フォーム~ラジオ・チェック・プル・リスト

PHPのシンタックス

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

ラジオボタンとプルダウン選択

  • 性別: 
  • 結婚: 
  • 血液型: 

チェックボックスとリストボックスで選択

  • 宿泊先: 
  • お食事: 
  • 場所: 

選択されていません。
「宿泊先」にエラーがあります。
「食事」にエラーがあります。
「場所」にエラーがあります。

文字エンコード検証と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 = []; //エラーを入れる配列
if (isset($_POST["sex"])) {
  $sexValues = ["男性", "女性"];
  $isSex = in_array($_POST["sex"], $sexValues);
  if ($isSex) {
    $sex = $_POST["sex"];
  } else {
    $sex = "error";
    $error[] = "「性別」に入力エラーがあります。";
  }
} else { //POSTされた値がないとき
  $isSex = false;
  $sex = "男性";
}

if (isset($_POST["marriage"])) {
  $marriageValue = ["独身", "既婚", "同棲中"];
  $isMarriage = in_array($_POST["marriage"], $marriageValue);
  if ($isMarriage) {
    $marriage = $_POST["marriage"];
  } else {
    $marriage = "error";
    $error[] = "「結婚」に入力エラー!!";
  }
} else { //POSTされた値がないとき
  $isMarriage = false;
  $marriage = "独身";
}

if (isset($_POST["blood"])) {
  $bloodType = ["A型", "B型", "O型", "AB型"];
  $isBlood = in_array($_POST["blood"], $bloodType);
  if ($isBlood) {
    $blood = $_POST["blood"];
  } else {
    $blood = "error";
    $error[] = "「血液型」に入力エラー!!";
  }
} else { //POSTされた値がないとき
  $isBlood = false;
  $blood = "A型";
}
?>


<?php
//ラジオボタンを初期値でチェック(選択)するかどうか
function checked($value, $question)
{
  if (is_array($question)) { //配列のとき値が含まれていればtrue
    $isChecked = in_array($value, $question);
  } else { //配列でないとき値が一致すればtrue
    $isChecked = ($value === $question);
  }
  if ($isChecked) { //フォームのinputにchecked入れるかどうか
    echo "checked";
  } else {
    echo "";
  }
}

//プルダウンを初期値でチェック(選択)するかどうか
function selected($value, $question)
{
  if (is_array($question)) {
    $isSelected = in_array($value, $question);
  } else {
    $isSelected = ($value === $question);
  }
  if ($isSelected) { //フォームのinputにselected入れるかどうか
    echo "selected";
  } else {
    echo "";
  }
}
?>

<!-- 入力フォーム -->
<form method="POST" action="<?php echo es($_SERVER['PHP_SELF']); ?>">
  <ul class="nolist">
    <li><span>性別: </span>
      <label><input type="radio" name="sex" value="男性" <?php checked("男性", $sex); ?>>男性</label>
      <label><input type="radio" name="sex" value="女性" <?php checked("女性", $sex); ?>>女性</label>
    </li>
    <li><span>結婚: </span>
      <label><input type="radio" name="marriage" value="独身" <?php checked("独身", $marriage); ?>>独身</label>
      <label><input type="radio" name="marriage" value="既婚" <?php checked("既婚", $marriage); ?>>既婚</label>
      <label><input type="radio" name="marriage" value="同棲中" <?php checked("同棲中", $marriage); ?>>同棲中</label>
    </li>
    <li><span>血液型: </span>
      <select name="blood">
        <option value="A型" <?php selected("A型", $blood); ?>>A型</option>
        <option value="B型" <?php selected("B型", $blood); ?>>B型</option>
        <option value="O型" <?php selected("O型", $blood); ?>>O型</option>
        <option value="AB型" <?php selected("AB型", $blood); ?>>AB型</option>
      </select>
    </li>
    <li><input type="submit" value="送信する"></li>
  </ul>
</form>

<?php
$isSubmited = $isSex && $isMarriage;
if ($isSubmited) { //「性別」と「結婚」が受信されていれば結果を表示
  echo "<HR>";
  echo "あなたは{$sex}、{$marriage}です。", "<br>";
  echo "血液型は{$blood}です。";
}
?>

<?php
if (count($error) > 0) { //エラー表示
  echo "<HR>";
  //implode関数で配列の要素に<br>を付けて連結
  echo '<span class = "error">', implode("<br>", $error), '</span>';
}
?>

チェックボックスとリストボックスのフォーム

<?php
$error2 = [];
if (isset($_POST["tour"])) {
  $tours = ["キャンプ", "コテージ", "ホテル"];
  $diffValue = array_diff($_POST["tour"], $tours); //配列同士を比較し、重複していない要素を取得
  if (count($diffValue) == 0) { //規格外の値が含まれてなければOK
    $tourChecked = $_POST["tour"];
  } else {
    $tourChecked = [];
  }
} else {
  $tourChecked = [];
  $error2[] = "「宿泊先」にエラーがあります。";
}

if (isset($_POST["meal"])) {
  $meals = ["朝食付き", "昼食付き", "ディナー付き"];
  $diffValue = array_diff($_POST["meal"], $meals); //配列同士を比較し、重複していない要素を取得
  if (count($diffValue) == 0) { //規格外の値が含まれてなければOK
    $mealChecked = $_POST["meal"];
  } else {
    $mealChecked = [];
  }
} else {
  $mealChecked = [];
  $error2[] = "「食事」にエラーがあります。";
}

if (isset($_POST["place"])) {
  $placeArea = ["河川", "山", "海"];
  $diffValue = array_diff($_POST["place"], $placeArea); //配列同士を比較し、重複していない要素を取得
  if (count($diffValue) == 0) { //規格外の値が含まれてなければOK
    $placeSelected = $_POST["place"];
  } else {
    $placeSelected = [];
  }
} else {
  $placeSelected = [];
  $error2[] = "「場所」にエラーがあります。";
}
?>


<!-- 入力フォーム -->
<form method="POST" action="<?php echo es($_SERVER['PHP_SELF']); ?>">
  <ul class="nolist">
    <li><span>宿泊先: </span>
      <label><input type="checkbox" name="tour[]" value="キャンプ" <?php checked("キャンプ", $tourChecked); ?>>キャンプ</label>
      <label><input type="checkbox" name="tour[]" value="コテージ" <?php checked("コテージ", $tourChecked); ?>>コテージ</label>
      <label><input type="checkbox" name="tour[]" value="ホテル" <?php checked("ホテル", $tourChecked); ?>>ホテル</label>
    </li>
    <li><span>お食事: </span>
      <label><input type="checkbox" name="meal[]" value="朝食付き" <?php checked("朝食付き", $mealChecked); ?>>朝食付き</label>
      <label><input type="checkbox" name="meal[]" value="昼食付き" <?php checked("昼食付き", $mealChecked); ?>>昼食付き</label>
      <label><input type="checkbox" name="meal[]" value="ディナー付き" <?php checked("ディナー付き", $mealChecked); ?>>ディナー付き</label>
    </li>
    <li><span>場所: </span>
      <select name="place[]" size="3" multiple>
        <option value="河川" <?php selected("河川", $placeSelected); ?>>河川</option>
        <option value="山" <?php selected("山", $placeSelected); ?>>山</option>
        <option value="海" <?php selected("海", $placeSelected); ?>>海</option>
      </select>
    </li>
    <li><input type="submit" value="送信する"></li>
  </ul>
</form>

<!-- 宿泊先か食事のどちらかがチェックされていれば結果表示 -->
<?php
$isSelected = count($mealChecked) > 0 || count($tourChecked) > 0;
if ($isSelected) {
  echo "<HR>";
  echo "宿泊先:", implode("と", $tourChecked), "<br>";
  echo "お食事:", implode("と", $mealChecked), "<br>";
  echo "場所:", implode("と", $placeSelected), "<br>";
} else {
  echo "<HR>";
  echo "選択されていません。";
}
?>

<?php
if (count($error2) > 0) { //エラー表示
  echo "<HR>";
  //implode関数で配列の要素に<br>を付けて連結
  echo '<span class = "error">', implode("<br>", $error2), '</span>';
}
?>
<!-- 初期値でチェックchecked関数は上記のラジオボタンフォームを参照 -->