フォーム~テキストエリア

PHPのシンタックス

  1. HOME
  2. 様々なフォーム

スライダーで選択

  • 焙煎土: 

お好みの焙煎度は「3、ハイロースト」です。

テキストエリア

  • お問い合わせ: 

文字エンコード検証とhtmlエスケープ

<?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
$error = [];
$min = 1;
$max = 5;
if (isset($_POST["roasting"])) {
  $roasting = $_POST["roasting"];
  $isRoasting = ctype_digit($roasting) && ($roasting >= $min) && ($roasting <= $max);
  if (!$isRoasting) {
    $error[] = "焙煎殿値にエラーがあります。";
    $roasting = $min;
  }
} else {
  $roasting = round(($min + $max) / 2);
  $isRoasting = true;
}
?>

<!-- 入力フォーム -->
<form method="POST" action="<?php echo es($_SERVER['PHP_SELF']); ?>">
  <ul class="nolist">
    <li><span>焙煎土: </span>
      <input type="range" name="roasting" min="1" max="5" step="1" value="<?php echo $roasting; ?>">
    </li>
    <li><input type="submit" value="決定"></li>
  </ul>
</form>

<?php
if ($isRoasting) {
  $rostList = ["ライトロースト", "ミディアムロースト", "ハイロースト", "シティロースト", "フレンチロースト"];
  echo "<HR>";
  echo "お好みの焙煎度は「{$roasting}、{$rostList[$roasting - 1]}」です。";
}
?>

<?php
if (count($error) > 0) {
  echo "<HR>";
  echo '<span class = "error">', implode("<br>", $error), '</span>';
}
?>

テキストエリアを作る

<?php
if (isset($_POST["note"])) {
  $note = $_POST["note"];
  $note = strip_tags($note); //HTML,PHPタグを削除する
  $note = mb_substr($note, 0, 150); //最大150文字だけ取り出し
  $note = es($note); //HTMLエスケープ
} else {
  $note = ""; //POSTされた値が無いとき
}
?>

<!-- 入力フォーム -->
<form method="POST" action="<?php echo es($_SERVER['PHP_SELF']); ?>">
  <ul class="nolist">
    <li><span>お問い合わせ: </span>
      <textarea name="note" cols="30" rows="5" maxlength="150" placeholder="コメント入力"></textarea>
    </li>
    <li><input type="submit" value="送信する"></li>
  </ul>
</form>

<?php
$length = mb_strlen($note); //テキストが入力されていれば表示
if ($length > 0) {
  echo "<HR>";
  $note_br = nl2br($note, false); //改行コード前に<br>を挿入
  echo $note_br;
}
?>

POSTされた値を処理する順番

※文字エンコード検証とhtmlエスケープに入っている、es($_POST)でのHTMLエスケープは行わずにcheckEn($_POST)だけしておく!

テキストからHTMLタグを削除し、文字数制限を行う為です。
テキストデータの処理は実施する順番が大事!!
  1. 文字エンコードが正しいかどうか検証する
  2. HTMLタグ、PHPタグを削除する
  3. 文字数制限内のテキストだけを取り出す
  4. HTMLエスケープを行う