---
# System prepended metadata

title: データベースとアプリ連携

---

# データベースとアプリ連携

## ベース
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>
```