# データベースとアプリ連携 ## ベース index.php ```htmlembedded= <form> <input type="text" name='name'> <input type="password" name='password'> <button>送信</button> </form> ``` get.phpとpost.phpを作成 ## GET index.phpのformタグにaction属性とmethod属性を追記します action属性に値を設定しないと現在のページが再度読み込まれます 送信ボタンを押したときにget.phpを表示できるようにしたいので、action属性には`get.php`を指定し、method属性には`GET`を指定します ```htmlembedded= <form action="get.php" method="GET"> <input type="text" name="name" placeholder="名前"> <input type="password" name="password" placeholder="パスワード"> <button>送信</button> </form> ``` それぞれの入力欄に何か文字を入力した後、送信ボタンを押すとget.phpが表示されます 入力した文字を取得するには`$_GET`を使用します `$_GET`は連想配列になっており、入力欄のname属性を指定することで(`$_GET['name属性の値']`)入力した値を取得できます get.php ```htmlembedded= <div> 名前 : <?php echo $_GET["name"] ?> </div> <div> パスワード: <?php echo $_GET["password"] ?> </div> ``` GETで送信した場合、入力した内容がURLに含まれます 名前にaaa、パスワードにbbbと入力して送信ボタンを押してみると、 URLの末尾が`?name=aaa&password=bbb`になります ## POST 今度は送信ボタンを押したときにpost.phpが表示されるようにしてみましょう また、今回はmethodを`POST`にして送信するようにしてください index.php ```htmlembedded= <form action="post.php" method="POST"> <input type="text" name="name" placeholder="名前"> <input type="password" name="password" placeholder="パスワード"> <button>送信</button> </form> ``` POSTで送信された値は`$_POST["name属性"]`で取得できます get.phpを参考にpost.phpを完成させましょう post.php ```htmlembedded= <div> 名前 : <?php echo $_POST["name"] ?> </div> <div> パスワード : <?php echo $_POST["password"] ?> </div> ``` POSTで送信すると入力した内容がURLに含まれません ## GETとPOSTの使い分け 検索や単純にデータを表示したいときは`GET`、 データを登録するときは`POST`と覚えておきましょう ## 入力画面、確認画面、完了画面を実装しよう まずはindex.php、 confirm.php, complete.phpを以下のようにしてベースを整えましょう ```htmlembedded= <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>お問い合わせフォーム</title> </head> <body> </body> </html> ``` ### 入力画面 index.phpのbodyタグ内にformを追加します 複数行入力できるようにしたいので今回はtextareaタグを使用します ```htmlembedded= <form action="confirm.php" method="POST"> <div> <label for="content">お問い合わせ内容</label> </div> <div> <textarea name="content" id="content" maxlength="140"></textarea> </div> <div> <button>入力内容を確認する</button> </div> </form> ``` ### 確認画面 送信された内容を受け取れるようにconfirm.phpを編集します 送信された内容は`$_POST`に入っているので、そこから取り出してあげましょう ```htmlembedded= <form action="complete.php" method="POST"> <div> <label for="content">お問い合わせ内容</label> </div> <div> <?php echo $_POST['content'] ?> </div> <div> <button type="button" onclick="location.href='index.php'">戻る</button> <button>入力内容を確認する</button> </div> </form> ``` ### 完了画面 complete.phpを以下のように編集してください ```htmlmixed= <p>データの登録が完了しました</p> <a href="index.php">お問い合わせフォームに戻る</a> ``` メモ この後に作るdb.phpをcomplete.phpでrequireさせようと思ってます ## PHPとデータベースを接続しよう db.phpを作成し、以下の内容を記述してください ```php= <?php $dsn = "mysql:dbname=SQL_lesson;host=localhost;charset=utf8"; $user = "root"; try { $db = new PDO($dsn, $user); } catch(PDOException $e){ echo "エラーメッセージ : ". $e->getMessage(); return; } ``` ## blogsテーブルのレコードを取得しよう get.phpを作成し、以下の内容を記述してください ```php= <?php require_once("./db.php"); $sql = "SELECT * FROM blogs"; try{ $stmt = $db -> query($sql); while($result = $stmt->fetch(PDO::FETCH_ASSOC)){ echo "<tr><td>{$result['id']}</td><td>{$result['content']}</td></tr>"; } } catch(PDOException $e){ echo "エラーメッセージ : ". $e->getMessage(); return; } ``` index.phpの記述を以下のように編集してください ```htmlembedded= <body> <form action="confirm.php" method="POST"> <div> <label for="content">お問い合わせ内容</label> </div> <div> <textarea name="content" id="content" maxlength="140"></textarea> </div> <div> <button>入力内容を確認する</button> </div> </form> <table border="1"> <tr> <th>id</th> <th>content</th> </tr> <?php require_once("./get.php"); ?> </table> </body> ``` ## フォームからデータベースに値を保存しよう post.phpを作成し以下の内容を記述してください ```php= <?php require_once("./db.php"); $content = $_POST['content']; $sql = "INSERT INTO blogs (content) VALUES (:content)"; try{ $stmt = $db -> prepare($sql); $stmt -> bindParam(":content", $content, PDO::PARAM_STR); $stmt -> execute(); }catch(PDOException $e){ echo "エラーメッセージ : ". $e->getMessage(); return; } ``` complete.phpを以下のように修正してください ```htmlembedded= <?php require_once("./post.php"); ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>お問い合わせフォーム</title> </head> <body> <p>データの登録が完了しました</p> <a href="index.php">お問い合わせフォームに戻る</a> </body> </html> ```