質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.78%

チェックボックスが入力されているかをphpで判定する

解決済

回答 5

投稿

  • 評価
  • クリップ 0
  • VIEW 7,161

score 18

困っていること
checkboxが未入力の場合、エラー処理をPHPで出力処理を行えていない状況

やりたいこと
postで、性別の部分を空で送った場合に、エラー処理、性別がチェックされていませんを出力したい

今現在わかっていること
そもそも、POSTで送られているか調べると、性別の部分を送っていないため
エラー表示にsexは未定義ですといわれる。

<?php 
session_start();

$errors = array();

if(isset($_POST['submit']) && $_POST['submit'] === "送信"){
  $KlastName        = $_POST['KlastName'];
  $Kname            = $_POST['Kname'];
  $lastName         = $_POST['lastName'];
  $name             = $_POST['name'];
  $password         = $_POST['password'];
  $confirm_password = $_POST['confirm_password'];
  $sex              = $_POST['sex']; <ーそもそもpostで送られていないので代入できていない
  $bday             = $_POST['bday'];

  if ($KlastName === "") {
    $errors['KlastName'] = "カナ苗字が記載されていません";
  }
  if ($Kname === "") {
    $errors['Kname'] = "カナ名前が記載されていません";
  }
  if ($lastName ==="") {
    $errors['lastName'] = "苗字が記載されていません";
  }
  if ($name === "") {
    $errors['name'] = "名前が記載されていません";
  }
  if ($password === "") {
    $errors['password'] = "パスワードが記載されていません";
  }
  if ($confirm_password === "") {
    $errors['confirm_password'] = "パスワード確認もよろしく";
  }
  if ($sex === "") {
    $errors['sex'] = "性別のチェックをお願いします";
  }
  if ($bday === "") {
    $errors['bday'] = "日付の選択をしてください";
  }
}

 ?>

<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
    <title>ログイン前</title>
    <script src="app.js" type="text/javascript"></script>
  </head>
  <body>
    <h1>自己紹介</h1>
    <h2>ユーザ新規登録</h2>
    <form action="" method="post">
      <?php 
      echo "<ul>";
      foreach ($errors as $message) {
        echo "<li>";
        echo "$message";
        echo "</li>";
      }
        echo "</ul>";
      ?>
      <p>カナ苗字
        <input type="text" name="KlastName" input pattern="^[ァ-ン]+$"
               title="全角カタカナでご入力ください。">
      </p>
      <p>カナ名前
        <input type="text" name="Kname" input pattern="^[ァ-ン]+$"
               title="全角カタカナでご入力ください。">
      </p>
      <p>苗字
        <input type="text" name="lastName">
      </p>
      <p>名前
        <input type="text" name="name" >
      </p>
      <p>パスワード
        <input id="password" type="text" name="password">
      </p>
      <div id="pass_message"></div>
      <p>パスワード確認
        <input type="password" name="confirm_password" id="confirm_password"
        onkeyup="setConfirmMessage(this.value);">
      </p>
      <div id="pass_confirm_message"></div>
    ここが性別のチェック->  <input type="radio" name="sex[]" value="1">男
      <input type="radio" name="sex[]" value="2">女
      <br>
      生年月日<input type="date" name="bday" value="<?php echo date('Y-m-j');?>">
      <br>
      <input type="submit" name="submit" value="送信">
    </form>
  </body>
</html>
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 5

checkベストアンサー

+2

filter_input がお勧めです。

【$_GET, $_POSTなどを受け取る際の処理】
https://qiita.com/mpyw/items/2f9955db1c02eeef43ea#フィルタ関数の活用

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/10/02 17:02

    なるほど、filter_input 関数 便利ですね

    キャンセル

  • 2018/10/02 17:15

    これのほうがスマートに書けてよみやすいです。ありがとうございます。

    キャンセル

+2

checkされていない = 未定義 となります。
つまり、未定義かどうかを調べれば良いです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+2

完全に蛇足ですが

type="radio" name="sex[]"

ラジオボタンにつけるnameには「[]」はつけないようにしましょう。
ラジオボタンは択一なので配列として処理する意味がありません

また、最近の傾向として「性」に対する世間からの要求が過激になっています
選択肢は

  • 指定しない

という、3種類用意したほうがよいでしょう。
(場合によっては、先に書いてあるほうが偉いという偏見を持った人が
女・男の順にしないとうるさい場合もある)

ただし「指定しない」にデフォのチェックをすると、人によっては性別入力を
スルーしてしまう場合があるので、未選択状態にしておいて未入力のバリデートをするか
更にもう一つ「未選択」という選択肢をつけてデフォにするかの工夫が必要です

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

以下のような感じでいかがでしょうか?

$sex = "";
if (isset($_POST['sex'])) {
    $sex = $_POST['sex'];
}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

issetでチェックすればいいのでは?

  if (!isset($_POST['sex'])) {
    $errors['sex'] = "性別のチェックをお願いします";
  }


他のチェック部分も再考慮した方がいいと思いますが・・

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.78%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る