# 2021/05/16TodoList ## 今回の目標 #### サーバーにアクセスする方法、SQLの実行方法、 #### 一通りのsql文と文法、サーバへのアクセス方法の学習 ## タスク一覧 [TOC] ### DBの作成 ![](https://i.imgur.com/JAmRlhA.png) ### トップ画面の作成 ```php= <?php require_once('dbconnect.php'); $data = array();//配列の入ったデータの取得 $dbh = ""; $data = fetchAllTodos($host,$username,$password,$dbname,$dbh);//配列の引き渡し // var_dump($data) ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> </head> <body> <h1>タスク</h1> <a href="create.php">新規追加</a> <table border = 1> <tr> <td>id</td> <td>タスク</td> <td>詳細</td> <td>編集削除</td> </tr> <?php foreach($data as $val): ?><!--配列の配置 --> <tr>  <td><?php echo $val['id']?></td> <td><?php echo $val['TodoName']?></td> <td><?php echo $val['comment']?></td> <td> <a href="update.php?id=<?php echo $val['id']?>">編集</a><!-- idをupdateに渡す --> <a href="delete.php?id=<?php echo $val['id']?>">削除</a><!-- idをdeleteに渡す --> </td> </tr> <?php endforeach?> </table> </body> </html> ``` ### サーバーにアクセスする関数を定義するファイルの作成 ```php= <?php $host = 'localhost'; $username = 'root'; $password = ''; $dbname = 'todo'; function fetchAllTodos($host,$username,$password,$dbname,$dbh){ //DBへ接続 $db = mysqli_connect($host,$username,$password,$dbname); //文字コード設定 mysqli_set_charset($db,"utf8"); //クエリの送信 $query = "SELECT * FROM `task`"; $result = mysqli_query($db , $query); if($result){ //echo'クエリ成功'; while ($row = mysqli_fetch_array($result)){ $data[] = $row;//配列の取得 } }else{ '失敗'; } if(!mysqli_close($db)){ echo"切断に失敗"; } return $data;//配列を帰す } //fetchAllTodos関数の複製 function addTodo($host,$username,$password,$dbname,$dbh){ //DBへ接続 $db = mysqli_connect($host,$username,$password,$dbname); //文字コード設定 mysqli_set_charset($db,"utf8"); //クエリの送信 $query = $dbh;//上からデータの取得 $result = mysqli_query($db , $query); if($result){ }else{ '失敗'; } if(!mysqli_close($db)){ echo"切断に失敗"; }else{ header('Location: http://localhost/basic/study/index.php'); } //dataの取得が必要ないのでreturnは消す。 } //fetchAllTodos関数の複製 function updateTodo($host,$username,$password,$dbname,$dbh){ //DBへ接続 $db = mysqli_connect($host,$username,$password,$dbname); //文字コード設定 mysqli_set_charset($db,"utf8"); //クエリの送信 $query = $dbh; $result = mysqli_query($db , $query); if($result){ //echo'クエリ成功'; while ($row = mysqli_fetch_array($result)){ $data[] = $row;//配列の取得 } }else{ '失敗'; } if(!mysqli_close($db)){ echo"切断に失敗"; } return $data;//配列を帰す } ``` ### 新規投稿をするファイルの作成 ```php= <?php require_once('dbconnect.php'); $method = $_SERVER["REQUEST_METHOD"];//POST/GET通信の判定 $data = array(); if($method == 'POST') { $TodoName = $_POST["TodoName"];;//入力されたデータの読み込み $comment = $_POST["comment"]; $dbh = "INSERT INTO `task`(`TodoName`, `comment`) VALUES ('$TodoName','$comment')";//INSERTクエリの実行 addTodo($host,$username,$password,$dbname,$dbh);//データの読み込み } ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <h1>追加</h1> <form method="post"><!-- post通信で2行目に配列の値を引き渡している。 --> タスク: <input type="text" name = "TodoName"><br> 詳細: <input type="text" name = "comment"><br> <button type = "submit">登録</button> </form> </body> </html> ``` ### 削除をするファイルの作成 ```php= <?php require_once('dbconnect.php'); $id = $_GET["id"]; if($id){ //deleteクエリの実行 $dbh = "DELETE FROM `task` WHERE `id` = '$id'"; addTodo($host,$username,$password,$dbname,$dbh);//データの読み込み } ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> </head> <body> <h1>削除</h1> </body> </html> ``` ### 編集をするファイルの作成 ```php= <?php require_once('dbconnect.php'); $method = $_SERVER["REQUEST_METHOD"]; if ($_SERVER["REQUEST_METHOD"] === "GET")//POST/GET通信の判定 { //編集する情報の取得 $id = $_GET["id"];//idデータの読み込み $dbh ="SELECT * FROM `task` WHERE `id` = '$id'"; $data = updateTodo($host,$username,$password,$dbname,$dbh);//配列の取得 }elseif($method === 'POST'){ //編集内容の登録 $id = $_GET["id"];//データの読み込み $TodoName = $_POST["TodoName"]; $comment = $_POST["comment"]; $dbh = "UPDATE `task` SET `TodoName`= '$TodoName',`comment`= '$comment' WHERE `id` = $id "; addTodo($host,$username,$password,$dbname,$dbh); } ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> </head> <body> <h1>編集</h1> <?php foreach((array)$data as $val): ?><!--配列の配置 --> <form method="post"> タスク: <input type="text" name = "TodoName" value = "<?php echo $val['TodoName']?>"><br> 詳細: <textarea name="comment"><?php echo $val['comment']?></textarea><br> <button type = "submit">登録</button> </form> <?php endforeach?> </body> </html> ```