# 2021/05/16TodoList
## 今回の目標
#### サーバーにアクセスする方法、SQLの実行方法、
#### 一通りのsql文と文法、サーバへのアクセス方法の学習
## タスク一覧
[TOC]
### DBの作成

### トップ画面の作成
```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>
```