我是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不太了解...详细的回复将非常感谢!
谢谢!
答案 0 :(得分:1)
如果您在HTML页面上收到未定义的错误,只需将isset()
检查添加到您打印出值的逻辑中。 E.g:
<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
答案 1 :(得分:1)
PHP中的“未定义索引”错误意味着您在表达式中使用了未定义的变量。例如,当你这样做时:
<?php if (($_POST['degree_type']) == 'MA') {echo 'checked="checked"';} ?>
$ _ POST ['degree_type']未定义。变量未定义有几个不同的可能原因。我必须看到PHP文件的其余部分才能知道确切的原因。
原因之一可能是表格没有正确提交。另一个原因可能是在提交表单之前评估了表达式。
无论哪种方式,下面的代码都应该有效。请注意,我正在检查每个字段是否已设置,然后再尝试验证它或比较它的值。
注意:强> 显然,您必须拥有正确的HTML文档类型,打开和关闭正文标记等。此示例中的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.';
}
}
?>
答案 2 :(得分:0)
您看到这些通知的原因是因为$_POST['degree_type']
根本没有设置。可能是拼写错误,或者只是没有提交(因为在提交表单之前你没有选择任何内容)。
另请注意,
if ($_POST['degree_type'] == "MS"||"MA"||"MBA"||"JD"||"PhD") {
它不起作用。这将检查$_POST['degree_type'] == "MS"
OR:"MS" is truthy (always true)
或"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可以点击。
答案 3 :(得分:0)
如果提交的表单没有选中单选按钮组的成员(定义为name
属性相同的单选按钮组),则提交的数据根本不包含该名称。 / p>
这就是为什么你得到“未定义的索引”错误(实际上是一个通知);当您测试$_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.");
};
将干净地完成您的任务。
答案 4 :(得分: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')
未定义索引表示您使用的密钥尚未初始化。因此,$ _POST ['degree_type']将在第一次提交表单之后才会出现。