1つのファイルでフォーム処理

PHPのシンタックス

  1. HOME
  2. フォーム~同ファイル~

1つのファイルでフォーム処理を行う

マイルをkmに計算する
  • マイル

マイルをkmに換算するフォーム

<?php
require_once("es.php"); //フォーム~入力データのチェック~で参照してね
if (!checkEn($_POST)) { //文字エンコードの検証
  $encoding = mb_internal_encoding(); //PHPが使うエンコードを調べる
  $err = "Encoding Error! The espected encoding is" . $encoding;
  exit($err); //エラーメッセージを出してコードのキャンセルする
}
$_POST = es($_POST); //HTMLエスケープ(xss対策)
?>

<?php
if (isset($_POST["mile"])) {
  $isNum = is_numeric($_POST["mile"]); //数値かどうか確認
  if ($isNum) {
    $mile = $_POST["mile"];
    $error = "";
  } else {
    $mile = "";
    $error = '<span class = error>数値を入力してください。</span>';
  }
} else { //POSTされた値がないとき
  $isNum = false;
  $mile = "";
  $error = "";
}
?>

<!-- 入力フォーム(現在のページにPOST) -->
<form method="POST" action="<?php echo es($_SERVER['PHP_SELF']); ?>"><!-- es.phpのes()でxss対策-->
  <ul class="nolist">
    <li>
      <label>
        <input type="text" name="mile" value="<?php echo $mile; ?>">
      </label>
      <?php echo $error ?>
    </li>
    <li><input type="submit" value="計算する"></li>
  </ul>
</form>

<?php
if ($isNum) { //$mileが数値であれば計算結果を表示する
  echo "<HR>";
  $km = $mile * 1.609344;
  echo "{$mile}マイルは{$km}kmです!!";
}
?>

ページが初めて開いたのかPOSTで開いたのかを判断

$_POST["mile"]の値が設定されているかどうかで、初めて開いたのかフォームでPOSTでされて開いたのかを区別できる。
初めての時はからのフォームを表示し、POSTに値があればその入力値(マイル数)をフォーム表示し、kmに換算した計算結果を表示する。

現在のページにPOSTする
現在開いているファイル名は、スーパーグローバル変数の$_SERVER['PHP_SELF']で調べることができます。
※$_SERVER['PHP_SELF']を使うことで後からファイル名を変更しても書き替えの必要がない。

この値を利用するならば、action = "<?php echo htmlspecialchars($_SERVER['PHP_SELF'],ENT_QUOTES,'UTF-8'); ?>"でPOST先を指定できる。