---
# System prepended metadata

title: 2021/05/16TodoList

---

# 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>
```