お問い合わせフォーム2

今回は、前回作成した「入力画面」「確認画面」「完了画面」を状況に応じて、
表示する画面を切り替えられるようにし、送信した内容をデータベースに保存できるようにします。

db_app/form2/study内にindex.phpを作成し、以下のコードを記述してください。

<!DOCTYPE html>
<html lang="ja">

<head>
  <meta charset="UTF-8">
  <title>お問い合わせフォーム</title>
</head>

<body>
  <h1>お問い合わせ</h1>
  <form action="index.php" method="POST">
    <table>
      <tr>
        <th>お名前</th>
        <td><input type="text" name="name" /></td>
      </tr>
      <tr>
        <th>メールアドレス</th>
        <td><input type="email" name="email" /></td>
      </tr>
      <tr>
        <th>お問い合わせ内容</th>
        <td><textarea name="body"></textarea></td>
      </tr>
      <tr>
        <td><button name="state" value="confirm">確認画面へ</button></td>
      </tr>
    </table>
  </form>

  <h1>お問い合わせ内容</h1>
  <form action="index.php" method="POST">
    <table>
      <tr>
        <th>お名前</th>
        <td><input type="text" name="name" value=<?php echo $_POST["name"] ?> readonly /></td>
      </tr>
      <tr>
        <th>メールアドレス</th>
        <td><input type="email" name="email" value=<?php echo $_POST["email"] ?> readonly /></td>
      </tr>
      <tr>
        <th>お問い合わせ内容</th>
        <td><textarea name="body" readonly><?php echo $_POST["body"] ?></textarea></td>
      </tr>
      <tr>
        <td><button onClick="history.back()">戻る</button></td>
        <td><button name="state" value="submit">送信</button></td>
      </tr>
    </table>
  </form>

  <h1>お問い合わせありがとうございました</h1>
  <table>
    <tr>
      <th>お名前</th>
      <td><?php echo $_POST["name"] ?></td>
    </tr>
    <tr>
      <th>メールアドレス</th>
      <td><?php echo $_POST["email"] ?></td>
    </tr>
    <tr>
      <th>お問い合わせ内容</th>
      <td><?php echo $_POST["body"] ?></td>
    </tr>
  </table>
  <p>上記内容でお問い合わせが完了しました</p>
  <a href="index.php">お問い合わせフォームに戻る</a>
</body>

</html>

画面を切り替えられるようにしよう

画面を切り替える方法はいくつかありますが、今回は、それぞれの画面を数字で管理するようにします。

入力画面・・・0
確認画面・・・1
完了画面・・・2

0の時、入力画面を表示
1の時、確認画面を表示
2の時、完了画面を表示

画面の切り替えは何となくif文で実装できそうな気がしてきましたね!
早速、if文で画面を切り替えられるように実装してみましょう。

<?php
$state = 0;
?>

<!DOCTYPE html>
<html lang="ja">

<head>
  <meta charset="UTF-8">
  <title>お問い合わせフォーム</title>
</head>

<body>
  <?php if ($state === 0) : ?>
    <h1>お問い合わせ</h1>
    <form action="index.php" method="POST">
      <table>
        <tr>
          <th>お名前</th>
          <td><input type="text" name="name" /></td>
        </tr>
        <tr>
          <th>メールアドレス</th>
          <td><input type="email" name="email" /></td>
        </tr>
        <tr>
          <th>お問い合わせ内容</th>
          <td><textarea name="body"></textarea></td>
        </tr>
        <tr>
          <td><button name="state" value="confirm">確認画面へ</button></td>
        </tr>
      </table>
    </form>
  <?php elseif ($state === 1) : ?>
    <h1>お問い合わせ内容</h1>
    <form action="index.php" method="POST">
      <table>
        <tr>
          <th>お名前</th>
          <td><input type="text" name="name" value=<?php echo $_POST["name"] ?> readonly /></td>
        </tr>
        <tr>
          <th>メールアドレス</th>
          <td><input type="email" name="email" value=<?php echo $_POST["email"] ?> readonly /></td>
        </tr>
        <tr>
          <th>お問い合わせ内容</th>
          <td><textarea name="body" readonly><?php echo $_POST["body"] ?></textarea></td>
        </tr>
        <tr>
          <td><button onClick="history.back()">戻る</button></td>
          <td><button name="state" value="submit">送信</button></td>
        </tr>
      </table>
    </form>
  <?php elseif ($state === 2) : ?>
    <h1>お問い合わせありがとうございました</h1>
    <table>
      <tr>
        <th>お名前</th>
        <td><?php echo $_POST["name"] ?></td>
      </tr>
      <tr>
        <th>メールアドレス</th>
        <td><?php echo $_POST["email"] ?></td>
      </tr>
      <tr>
        <th>お問い合わせ内容</th>
        <td><?php echo $_POST["body"] ?></td>
      </tr>
    </table>
    <p>上記内容でお問い合わせが完了しました</p>
    <a href="index.php">お問い合わせフォームに戻る</a>
  <?php endif; ?>
</body>

</html>

プレビューしてお問い合わせフォームの入力画面のみ表示されていれば成功です!
$stateの値を変更して、確認画面と完了画面も同様に表示できるか確認してみましょう。

if文を使用することで画面を切り替えられるようになりましたが、
現段階ではフォームを送信しても画面が切り替わってくれません。
今回はフォームで送信した内容を元に、自動で画面が切り替わるようにしていきます。

まずはindex.phpを以下のように修正してください。

<?php
$state = 0;

print_r($_POST);

if (array_key_exists("state", $_POST)) {
  if ($_POST["state"] === "confirm") {
    $state = 1;
  } elseif ($_POST["state"] === "submit") {
    $state = 2;
  }
} else {
  $state = 0;
}
?>

<!DOCTYPE html>
<html lang="ja">

<head>
  <meta charset="UTF-8">
  <title>お問い合わせフォーム</title>
</head>

<body>
  <?php if ($state === 0) : ?>
    <h1>お問い合わせ</h1>
    <form action="index.php" method="POST">
      <table>
        <tr>
          <th>お名前</th>
          <td><input type="text" name="name" /></td>
        </tr>
        <tr>
          <th>メールアドレス</th>
          <td><input type="email" name="email" /></td>
        </tr>
        <tr>
          <th>お問い合わせ内容</th>
          <td><textarea name="body"></textarea></td>
        </tr>
        <tr>
          <td><button name="state" value="confirm">確認画面へ</button></td>
        </tr>
      </table>
    </form>
  <?php elseif ($state === 1) : ?>
    <h1>お問い合わせ内容</h1>
    <form action="index.php" method="POST">
      <table>
        <tr>
          <th>お名前</th>
          <td><input type="text" name="name" value=<?php echo $_POST["name"] ?> readonly /></td>
        </tr>
        <tr>
          <th>メールアドレス</th>
          <td><input type="email" name="email" value=<?php echo $_POST["email"] ?> readonly /></td>
        </tr>
        <tr>
          <th>お問い合わせ内容</th>
          <td><textarea name="body" readonly><?php echo $_POST["body"] ?></textarea></td>
        </tr>
        <tr>
          <td><button onClick="history.back()">戻る</button></td>
          <td><button name="state" value="submit">送信</button></td>
        </tr>
      </table>
    </form>
  <?php elseif ($state === 2) : ?>
    <h1>お問い合わせありがとうございました</h1>
    <table>
      <tr>
        <th>お名前</th>
        <td><?php echo $_POST["name"] ?></td>
      </tr>
      <tr>
        <th>メールアドレス</th>
        <td><?php echo $_POST["email"] ?></td>
      </tr>
      <tr>
        <th>お問い合わせ内容</th>
        <td><?php echo $_POST["body"] ?></td>
      </tr>
    </table>
    <p>上記内容でお問い合わせが完了しました</p>
    <a href="index.php">お問い合わせフォームに戻る</a>
  <?php endif; ?>
</body>

</html>

array_key_existsメソッドは第一引数に指定したキーが、第二引数に指定した配列(連想配列)内に存在するかどうかを判定してくれます。

index.phpを実行したとき、まず始めに$_POST内にstateというキーが存在するかどうかを判定します。
index.phpが表示された段階では当然、送信(POST)していないので$_POSTは空になります。
そのため、13行目が実行され$stateの値が0になるので入力画面が表示されます。

お問い合わせフォームに以下の内容を入力して送信してください。

フォームを送信すると、今度は$_POSTに値が入った状態でindex.phpが実行されます。
この時、$_POST内にstateというキーが存在するので、今度はif文がtrueの時の処理を実行します。
7,9行目のif文は$_POST内のstateというキーにconfirmもしくはsubmitのどちらかのバリューで条件分岐するように設定しています。
バリューがconfirmの場合は$stateの値を1、submitの場合は$stateの値を2という風にすることで画面を切り替えるようにしています。

これでようやく画面の切り替えができるようになりました。
次回はPDOを使用するので不安な方は復習してきましょう!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です