正在php中验证单选按钮


Validating radio buttons in php

我是PHP的新手,正在尝试编写代码来测试用户是否在回答调查问题时单击了单选按钮。有许多单选按钮。如果他们还没有点击一个,那么我想向用户发出一个错误。我尝试了几种方法,但没有找到任何有效的方法。这是我当前的代码和收到的错误消息。对于PHP脚本,我已经尝试了以下三个示例:

    ....
    if ($_POST['degree_type'] == "MS"||"MA"||"MBA"||"JD"||"PhD") {
        $degree_type = ($_POST['degree_type']); 
    } else if ($_POST['degree_type'] == null) {
        $errors[] = 'Please select a degree type.';
    }
    if (isset($_POST['degree_type'])) {
      $errors[] = 'Please select a degree type.';
    } else {
      $degree_type= $_POST['degree_type'];
    }
   if (array_key_exists('degree_type', $_POST)) {
      $degree_type = ($_POST['degree_type']); 
    } else {
      $errors[] = 'Please select a degree type.';
    }
    ....

这是我的html,位于同一页面中,位于PHP下方。

          <table>
            <tr>
              <td class="span6">What type of degree?</td>
              <td class="span6">
                      <input type="radio" name="degree_type" value="MA"
                        <?php if (($_POST['degree_type']) == 'MA') {echo 'checked="checked"';} ?>
                      >MA
                      <input type="radio" name="degree_type" value="MS"
                        <?php if (($_POST['degree_type']) == 'MS') {echo 'checked="checked"';} ?>
                      >MS
                      <input type="radio" name="degree_type" value="MBA"
                        <?php if (($_POST['degree_type']) == 'MBA') {echo 'checked="checked"';} ?>
                      >MBA
                      <input type="radio" name="degree_type" value="JD"
                        <?php if (($_POST['degree_type']) == 'JD') {echo 'checked="checked"';} ?>
                      >JD
              </td>
            </tr>
           ETC....

我在引用单选按钮的每一行HTML上都得到一个"未定义索引"错误。我知道这在JavaScript中可能更容易做到,但我对JS了解不多。。。如有详细回复,不胜感激!

谢谢!

如果HTML页面上出现未定义的错误,只需在打印值的逻辑中添加isset()检查即可。例如:

<input type="radio" name="degree_type" value="JD" <?php if (($_POST['degree_type']) == 'JD') {echo 'checked="checked"';} ?> >JD

成为

<input type="radio" name="degree_type" value="JD" <?php if (isset($_POST['degree_type']) && $_POST['degree_type'] == 'JD') {echo 'checked="checked"';} ?>>JD

PHP中的"未定义索引"错误意味着您在表达式中使用了未定义的变量。例如,当你这样做时:

<?php if (($_POST['degree_type']) == 'MA') {echo 'checked="checked"';} ?>

$_POST['degree_type']未定义。变量未定义的原因有很多。我必须查看PHP文件的其余部分才能知道确切的原因。

其中一个原因可能是表格没有正确提交。另一个原因可能是在提交表单之前对表达式进行了评估。

无论哪种方式,下面的代码都应该有效。请注意,在尝试验证或比较其值之前,我会检查每个字段是否已设置。

注意:显然,你必须有一个合适的HTML doctype,打开和关闭正文标记等。本例中的HTML只是页面的表单部分。

 <!-- myform.php -->
    <form name="my-form" method="POST" action="/myform.php">
        <span>What degree do you have?</span>
        <label for="bs">BS</label>
        <input type="radio" name="degree" id="bs" value="BS" <?php if(isset($degree) && $degree == 'BS') echo 'checked="checked"';?> />
        <label for="ma">MA</label>
        <input type="radio" name="degree" id="ma" value="MA" <?php if(isset($degree) && $degree == 'MA') echo 'checked="checked"';?> />
        <label for="phd">PHD</label>
        <input type="radio" name="degree" id="phd" value="PHD" <?php if(isset($degree) && $degree == 'PHD') echo 'checked="checked"';?> />

        <span>Which do you like better?</span>
        <label for="steak">steak</label>
        <input type="radio" name="food" id="steak" value="steak" <?php if(isset($food) && $food == 'steak') echo 'checked="checked"';?> />
        <label for="lobster">lobster</label>
        <input type="radio" name="food" id="lobster" value="lobster" <?php if(isset($food) && $food == 'lobster') echo 'checked="checked"';?> />
        <input type="hidden" name="submitted" value="submitted" />
        <input type="submit" name="submit" value="submit" />
    </form>
    <?php
    if (isset($_POST['submitted'])) {
        $errors = array();
        if (isset($_POST['degree'])) {
            $degree = $_POST['degree'];
        } else {
            $errors[] = 'Please select your degree type.';
        }
        if (isset($_POST['food'])) {
            $food = $_POST['food'];
        } else {
            $errors[] = 'Please select your food preference.';
        }
        if (count($errors) > 0) {
            foreach($errors as $error) {
                echo $error;
            }
        } else {
            echo 'Thank you for your submission.';
        }
    }
    ?>

您之所以看到这些通知,是因为根本没有设置$_POST['degree_type']。要么是打字错误,要么就是没有提交(因为你在提交表格之前没有选择任何内容)。

另请注意,

if ($_POST['degree_type'] == "MS"||"MA"||"MBA"||"JD"||"PhD") {

这样不行。这将检查$_POST['degree_type'] == "MS" OR:"MS" is truthy (always true) OR "MA" is truthy (always true)。。。看看我要去哪里?

if (in_array($_POST['degree_type'], array("MS", "MA", "MBA", "JS", "PhD")) {

是一个更好的选择。


无关:

您应该真正使用<label>元素来标记标签。示例:

<label><input type="radio" name="degree_type" value="MA"> MA</label>.

这将使MA可点击。

当表单提交时没有选择单选按钮组(定义为name属性相同的单选按钮组)的成员时,提交的数据根本不包括该名称。

这就是为什么你会得到"未定义索引"错误(实际上是一个通知);当您测试$_POST['degree_type']的值,并且没有选择名为"degree_type"的单选按钮时,$_POST['degree_type']根本不存在。

幸运的是,这简化了验证任务。通过调用array_key_exists('degree_type', $_POST),您可以了解键是否存在,从而了解是否选择了单选按钮,而无需提示PHP"未定义索引"通知。如果函数调用返回true,则表示您选择了单选按钮;否则,你知道一个不是,这就是你的验证试图确定的。因此:

if (array_key_exists('degree_type', $_POST)) {
  $degree_type = $_POST['degree_type'];
}
else {
  array_push($errors, "Please select a degree type.");
};

将干净地完成您的任务。

//set a default 
$degree_type = "";
if (isset($_POST['degree_type'])) {
    $degree_type = $_POST['degree_type']; 
} else {
    $errors[] = 'Please select a degree type.';
}

然后不用

if (($_POST['degree_type']) == 'MA') 

对于您的支票,请使用:

if($degree_type == 'MA')

未定义索引表示您正在使用的键尚未初始化。因此$_POST['degree_type']直到第一次提交表单之后才会出现。