大学生のモノづくり記録

Webページ作成(主にHTML、CSS、PHP、jQuery)、ArduinoやRaspberry Piを使って物作りの勉強した記録を載せたり/趣味のことを書いていきたいなと思います。(クオリティはかなり低いです)

ポートフォリオサイトを作りなおしてみた ~DBの表示が出来た件~

皆様、こんにちは今回もポートフォリオサイトの作成の進展を書いていこうと思います。更新が悪くて申し訳ございません。大学の課題を終えるのに必死です。

 話は、変わり以前DB導入の所で、表示されていない事について書いた記事がありましたが、その後の進展について今回は、書いていこうと思います。

mychallengo.hatenablog.com

 

 まず、最初に原因についてを言ってしまうと、データを記入することは、していましたが、そのデータを表示させようとしませんでした。

 

 ここで、SQLの文についてまとめていこうと思います。

まず、データの取得方法です。

SELECT * FROM デーブル名

です。SELECTは、日本語で「選択する」と言う意味です。データを選択して取得するものであると自分は、そう思えました。

 この文を読んで思うことは*(アスタリスク)は、何の目的で描いているの?と自分は、最初思いました。この*(アスタリスク)は、すべてのカラムという意味です。

 ここで、まだ”カラム”と言う言葉が出てきました。自分は、この言葉の意味を知らないので、わかりませんでした。

・カラムとは:テーブルの列にあたる部分の事です

f:id:kyozinnlove55:20200609005828p:plain

 

 https://26gram.com/database-terms より引用

次にデータの追加方法についてです。

INSERT INTO テーブル名 VALUES(テーブルの構造にあったデータを入れましょう)

INSERT INTOは、日本語で、~を挿入するという意味です。

例としては、

テーブルsampleにID、name,romaziと言った構造しているとします。そこに

INSERT INTO sample VALUES (1,'鈴木','suzuki');

と記入すると、IDに1が入り、nameの所に鈴木が入り、romaziの所にsuzuki が入ります。

こういう働きするのかINSERT INTO文です。

 

次に更新の方法です。

UPDATE テーブル名
SET カラム名 = 値, カラム名 = 値
WHERE id = 1

 

この文では、まず更新するテーブルを選択し、その後内容を記入してから、どこのIDを更新するのかを選択してデータの更新を行っていきます。

 

最後に削除の方法です。

DELETE FROM テーブル名
WHERE 条件

削除の方法は、テーブル名を選択して条件を選択して削除を行います。

例:delete from user where age < 20;

この文は、テーブルuserのカラムageの所で20未満の物を削除する文です。

 

 ここで、一回道がそれて条件について説明します。

条件は、AND、OR、比較演算子について説明していきます。

 

AND

 ANDは、簡単言うと条件が両方成り立っているのかを比較します。

例:delete from user where id="1" AND

old < 20;

 上記の文の場合は、idが1でoldが20未満ではないと消去が出来ません。 

 例のように条件が両方成り立っていなければ消去ができないのです。

 

OR

 ORは、ANDとは、違い片方の条件が成り立てば、条件は、満たされます。

例:

delete from user where id="1" OR

old < 20;

 強引では、ありますが、上記の文の場合idが1かoldが20未満のどちらが達成していれば消去が可能になります。

 

比較演算子

 比較演算子は、以下に引用しているサイトの記事がわかりやすかったので、参照します。

【これだけ覚えてたらOK!】SQL構文まとめ - Qiitaより引用

比較演算子 意味
= 左右の値が等しい
+ 左辺は右辺より小さい
< 左辺は右辺より大きい
> 左辺は右辺の値以下
<= 左辺は右辺の値以下
>= 左辺は右辺の値以上
<>

左右の値が等しくない

https://qiita.com/tatsuya4150/items/69c2c9d318e5b93e6ccd

 

 では、本題の今のポートフォリオサイトの現在についてです。

まずデータベースのプログラムからです。

<?php
    $dsn = 'mysql:dbname=sample3;host=localhost;charset=utf8';//データベースの情報を設定
    $user = 'root';//ユーザー選択
    $password = '';//パスワード
    
    // $dbh = new PDO($dsn, $user, $password);
      // $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
      // echo '接続に成功しています';
      
    try{

      $dbh = new PDO($dsn$user$password);//データベースに接続
      $dbh->setAttribute(PDO::ATTR_ERRMODEPDO::ERRMODE_EXCEPTION);//エラーをどこまで報告するのかの指定
      // $sql="INSERT INTO user (id,name,message,date) VALUE (NULL :name, :message ,:date)";//SQL文でデータベースに追加    
      $sql="INSERT INTO user (name,what,datataim) VALUE (:name,:what,'{date}')";
        $stmt=$dbh->prepare($sql);//プリペアードステートメント
        //$stmt->bindValue(':id',id,PDO :: PARAM_INT);
        $stmt->bindValue(':name',$name,PDO :: PARAM_STR);
        $stmt->bindValue(':what',$what,PDO :: PARAM_STR);
       //$stmt->bindValue(':datetime',$date,PDO :: PARAM_INT);
        $stmt-> execute();
        echo '処理が終了しました。';
        echo '接続に成功しています'
  }catch (PDOException $e){
      print('Connection failed:'.$e->getMessage());
      die();
  }

  // var_dump($date);
  ?> 
<!-- php表示側 -->
  
   <?php
  $dsn = 'mysql:dbname=sample3;host=localhost;charset=utf8';//データベースの情報を設定
  $user = 'root';//ユーザー選択
  $password = '';//パスワード
  
  // $dbh = new PDO($dsn, $user, $password);
    // $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    // echo '接続に成功しています';
    
  try{

    $dbh = new PDO($dsn$user$password);//データベースに接続
    $dbh->setAttribute(PDO::ATTR_ERRMODEPDO::ERRMODE_EXCEPTION);//エラーをどこまで報告するのかの指定
    // $sql="INSERT INTO user (id,name,message,date) VALUE (NULL :name, :message ,:date)";//SQL文でデータベースに追加    
    //SQLの追加の文を記入する(6・3)以降
    $sql="SELECT * FROM user";//データの選択
    $stmt=$dbh->prepare($sql);
    $stmt-> execute();
    $date = array();//データを1行ずつ取得
    $count = $stmt->rowCount();
    while($row =$stmt->fetch(PDO::FETCH_ASSOC)){
      $date[]=$row;
    }//この文があるとUODATE文が受け取れないので不要
      echo '処理が終了しました。';
      echo '接続に成功しています'
}catch (PDOException $e){
    print('Connection failed:'.$e->getMessage());
    die();
}

// var_dump($count);
// var_dump($date);
?>




  <table border=1>
    <tr>
    <th>氏名</th>
    <th>内容</th>
    <th>日にち</th>
    </tr>
    <?php foreach($date as $row):?>//配列の各要素の値を取得する方法。
    <tr>
   <!-- <td><!--?php echo $row['id']; ?--></td> -->
    <td><?php echo $row['name'?></td>
    <td><?php echo $row['what']; ?></td>
    <td><?php echo $row['datataim']; ?></td>
    </tr>
  <?php endforeach?>//終わりを明確にさせるために使用
  </table>

データベースのプログラムは、以上のようになりました。説明もソースプログラムのコメントに記入していきました。なぜかと言いますと実際にこの文は、何をしているのかを分かりやすくするために行いました。

 実際の表示結果を以下に示します。

・まず記入し送信します。

f:id:kyozinnlove55:20200609012710p:plain

接続に成功し、データの一覧が表示されます。

f:id:kyozinnlove55:20200609012718p:plain

phpmyadminの方もしっかり反映されています。

f:id:kyozinnlove55:20200609012726p:plain

 

 

 今後の展開として、まず時間の表示を修正(現段階で何かしらのエラーが起きている)また、このままデプロイしてしまうと誰でも情報の更新が出来てしまうので、ログイン画面を作成し、責任者が更新できるような構造を作成していくことが目標です。

 

 大学のオンライン講義もいいが、課題がものすごく多いのでそう思うと実際に大学行って講義受けたいと思いました。今後も頑張ります。