# 【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'); } ```