0

我是 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 不太了解......非常感谢详细的回复!

谢谢!

4

5 回答 5

2

如果您在 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
于 2013-07-31T15:30:15.933 回答
1

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

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

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

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

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

注意: 显然你必须有一个正确的 HTML 文档类型,打开和关闭 body 标签等。这个例子中的 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.';
        }
    }
    ?>
于 2013-08-08T01:01:44.440 回答
0
//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')

undefined index 表示您正在使用的键尚未初始化。所以 $_POST['degree_type'] 直到第一次提交表单之后才会出现。

于 2013-07-31T16:16:07.130 回答
0

当提交的表单没有选择单选按钮组(定义为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.");
};

将干净地完成您的任务。

于 2013-07-31T15:32:30.820 回答
0

您看到这些通知的原因是因为$_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 可点击。

于 2013-07-31T15:31:00.663 回答