# 【InFiNiTO Club】プログラミング講座10回目 ## 初期準備 ### 授業資料のダウンロードと解凍 Teams上にアップロードした資料をダウンロードしてください。 Zipファイルですので解凍してください。 本日使う授業フォルダphp03に入っているもの。 ``` cssフォルダ fontsフォルダ jsフォルダ SQLフォルダ index.php insert.php funcs.php detail.php delete.php select.php update.php ``` ### php03フォルダをMAMPのhtdocs階層に移動させてください。 先ほどCドライブにダウンロードしたMAMPの中にhtdocsというフォルダがあります。 ここに授業資料の「php03」フォルダを移動してください! ### 内容は先週の復習 基本の登録と一覧表示 ## セクション1 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) { sql_error($stmt); } else { redirect('select.php'); } ``` ## セクション2 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) { sql_error($stmt); } else { redirect('select.php'); } ``` ## さくらサーバーでのデプロイ方法 ### 1. 作ったアプリのフォルダをFTPでさくらサーバーのwww直下にアップロード *今回は授業で作成したphp03フォルダをアップしましょう。 ### 2. ローカル(MAMP)のデータベースをエクスポートする ``` 1:phpMyAdminにログインする 2:エクスポートしたいDBを左側の一覧から選択 3:上部のタブからエクスポートを選択 4:エクスポート方法の詳細にチェックを入れる 5:フォーマットはSQLのままにしておく 6:その他の設定は変更せず実行 7:〇〇.sqlというファイルが作成されます。 ``` ### 3. さくらサーバー上でデータベースを作成します。 ログイン後ホームからデータベースのショートカットをクリック。 新規追加からデータベース名を入力し作成します。 *契約者のユーザー名が接頭名としてデフォルトで付きます。 ### 4. 先ほど作ったさくらサーバーのデータベースにインポートします。 ``` 1:phpMyAdminにログインする 2:インポートしたいDBを左側の一覧から選択 3:上部のタブからインポートを選択 4:ファイル選択フォームから先ほど作成した〇〇.sqlを選択して実行 ``` これでデータベースは完成しているはずです。 ### 5.最後にさくらサーバーに公開しているphp03フォルダ内のfuncs.phpのDB接続関数を編集します。 ``` function db_conn(){ try { $db_name = "****"; //データベース名 $db_id = "****"; //ユーザ名 $db_pw = "****"; //パスワード $db_host = "mysql〇〇.契約名.sakura.ne.jp"; //DBホスト $db_port = "3306"; //さくらサーバーのポート番号は3306です $pdo = new PDO('mysql:dbname=' . $db_name . ';charset=utf8;host=' . $db_host.';port='.$db_port.'', $db_id, $db_pw); return $pdo;//ここを追加!! } catch (PDOException $e) { exit('DB Connection Error:' . $e->getMessage()); } } ``` ![](https://i.imgur.com/XJ2RB3d.png)