# 【MC-Innovation-Lab】PHP3回目
## 初期準備
XAMPP又はMAMPを起動
PHPの授業からはXAMPPというアプリケーションを利用します。
*「Apache Server」と「MySQL Server」の横に緑色のランプがついたら、サーバーの起動完了です。
### XAMPPでPHPのエラーが表示されない場合
XAMPP/etc/php.iniの中の設定を記述変更すると表示できるようになります。
471行目です
`
display_error:Off
`
↓↓↓↓↓↓↓↓
`
display_error:On
`
XAMPPを 再起動すると設定情報が更新されます。
### 授業資料のダウンロードと解凍
Zipファイルですので解凍してください。
本日使う授業フォルダphp03に入っているもの。
```
cssフォルダ
fontsフォルダ
funcs.php
index.php
insert.php
jsフォルダ
select.php
```
### php03フォルダをMAMPのhtdocs階層に移動させてください。
先ほどCドライブにダウンロードしたXAMMPの中にhtdocsというフォルダがあります。
ここに授業資料の「php03」フォルダを移動してください!
## セクション3 PHPからMySQLを操作(更新)
### まずは更新画面を表示する為のリンクを作成する。
#### 1. select.phpのデータ表示のwhile文内のHTML生成にリンクを作成(GETデータ送信リンク)
```
//GETデータ送信リンク作成
// <a>で囲う。
$view .= '<p>';
$view .= '<a href="detail.php?id=' . $result['id'] . '">';
$view .= $result["indate"] . ":" . $result["name"];
$view .= '</a>';
$view .= '</p>';
```
#### 2. ブラウザの検証ツールからaタグのリンクの飛び先をチェック
### 更新画面を作成する
#### 1. detail.phpにデータ取得処理を記述
```
<?php
//1.外部ファイル読み込みしてDB接続
require_once('funcs.php');
$pdo = db_conn();
//2.対象のIDを取得
$id = $_GET['id'];
//3.データ登録SQL作成
$stmt = $pdo->prepare("SELECT * FROM gs_an_table WHERE id=:id;");
$stmt->bindValue(':id',$id,PDO::PARAM_INT);
$status = $stmt->execute();
//4.データ表示
$view = '';
if ($status == false) {
sql_error($status);
} else {
$result = $stmt->fetch();//ここを追記!!
}
?>
```
#### 2. detail.phpに更新画面用のHTMLを記述
index.phpのコードをまるっとコピーして貼り付け!
```
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>データ登録</title>
<link href="css/bootstrap.min.css" rel="stylesheet">
<style>
div {
padding: 10px;
font-size: 16px;
}
</style>
</head>
<body>
<header>
<nav class="navbar navbar-default">
<div class="container-fluid">
<div class="navbar-header"><a class="navbar-brand" href="select.php">データ一覧</a></div>
</div>
</nav>
</header>
<!-- method, action, 各inputのnameを確認してください。 -->
<form method="POST" action="insert.php">
<div class="jumbotron">
<fieldset>
<legend>フリーアンケート</legend>
<label>名前:<input type="text" name="name"></label><br>
<label>Email:<input type="text" name="email"></label><br>
<label><textarea name="naiyou" rows="4" cols="40"></textarea></label><br>
<input type="submit" value="送信">
</fieldset>
</div>
</form>
</body>
</html>
```
#### 3. detail.phpのHTML内formにvalueデータを代入する
```
<legend>フリーアンケート</legend>
<label>名前:<input type="text" name="name" value="<?= $result['name'] ?>"></label><br>
<label>Email:<input type="text" name="email" value="<?= $result['email'] ?>"></label><br>
<label><textarea name="naiyou" rows="4" cols="40"><?= $result['naiyou'] ?></textarea></label><br>
<input type="submit" value="送信">
```
#### 4. detail.phpのHTML内formの送信ボタン直上に以下を追記
```
<!-- ↓追加 -->
<input type="hidden" name="id" value="<?= $result['id'] ?>">
<input type="submit" value="送信">
```
#### 5. detail.phpのHTML内formのaction先をupdate.phpに変更する
```
<form method="POST" action="update.php">
.....省略
</form>
```
### 更新処理の中身を作成する
#### 1. update.phpに更新処理を追記
```
//1. POSTデータ取得
$name = $_POST["name"];
$email = $_POST["email"];
$naiyou = $_POST["naiyou"];
$id = $_POST["id"];
//2. DB接続します
require_once('funcs.php');
$pdo = db_conn();
//3.データ登録SQL作成
$stmt = $pdo->prepare( "UPDATE gs_an_table SET name = :name, email = :email, naiyou = :naiyou, indate = sysdate() WHERE id = :id;" );
$stmt->bindValue(':name', $name, PDO::PARAM_STR);/// 文字の場合 PDO::PARAM_STR
$stmt->bindValue(':email', $email, PDO::PARAM_STR);// 文字の場合 PDO::PARAM_STR
$stmt->bindValue(':naiyou', $naiyou, PDO::PARAM_STR);// 文字の場合 PDO::PARAM_STR
$stmt->bindValue(':id', $id, PDO::PARAM_INT);// 数値の場合 PDO::PARAM_INT
$status = $stmt->execute(); //実行
//4.データ登録処理後
if ($status == false) {
//execute(SQL実行時にエラーがある場合)
$error = $stmt->errorInfo();
exit("ErrorQuery:".$error[2]);
} else {
redirect('select.php');
}
```
## セクション4 PHPからMySQLを操作(削除)
### 削除ボタン(削除リンクを作成する)
#### 1. select.phpのデータ表示のwhile文内のHTML生成に削除リンクを作成
```
//GETデータ送信リンク作成
// <a>で囲う。
$view .= '<p>';
$view .= '<a href="detail.php?id=' . $result['id'] . '">';
$view .= $result["indate"] . ":" . $result["name"];
$view .= '</a>';
$view .= '<a href="delete.php?id=' . $result['id'] . '">';//追記
$view .= ' [削除]';//追記
$view .= '</a>';//追記
$view .= '</p>';
```
### 削除処理を実装する
#### 1. delete.phpに削除処理を記述
```
//1.対象のIDを取得
$id = $_GET['id'];
//2.DB接続します
require_once('funcs.php');
$pdo = db_conn();
//3.削除SQLを作成
$stmt = $pdo->prepare("DELETE FROM gs_an_table WHERE id = :id");
$stmt->bindValue(':id', $id, PDO::PARAM_INT);
$status = $stmt->execute(); //実行
//4.データ登録処理後
if ($status == false) {
//execute(SQL実行時にエラーがある場合)
$error = $stmt->errorInfo();
exit("ErrorQuery:".$error[2]);
} else {
redirect('select.php');
}
```