我正在想办法解决这个问题,因为表单的post参数是:answer1[2]和answer2[4]。括号内的数字代表它所属问题的id。我需要知道如何做到这一点的原因是,当它是一个空表单提交时,它不会返回答案的错误。
if((empty($_POST['answer1'])) || (trim($_POST['answer1'])=="") || ($_POST['answer1'] == NULL) || (!isset($_POST['answer1']))){$errors = "yes";}
if((empty($_POST['answer2'])) || (trim($_POST['answer2'])=="") || ($_POST['answer2'] == NULL) || (!isset($_POST['answer2']))){$errors = "yes";}
// Error checking, make sure all form fields have input
if ($errors == "yes") {
// Not all fields were entered error
$message = "You must enter values to all of the form fields!";
$output = array('errorsExist' => true, 'message' => $message);
}
您写道,您在理解发生的事情时遇到了问题。因此,让我们深入检查其中一个if子句:
if((empty($_POST['answer1'])) || (trim($_POST['answer1'])=="") || ($_POST['answer1'] == NULL) || (!isset($_POST['answer1']))) { ...
这可以更简单地写成:
if (empty($_POST['answer1']) || trim($_POST['answer1'])=="") { ...
这是因为NULL
的值是empty()
,而!isset(...)
的值也是空的。你已经在第一次检查了,所以没有必要再检查了。
那么就没有必要在所有内容周围添加括号。只有在实际需要时才添加它们,以使代码更易于阅读。
让我们在此基础上更改代码:
if (empty($_POST['answer1']) || trim($_POST['answer1'])=="") {$errors = "yes";}
if (empty($_POST['answer2']) || trim($_POST['answer2'])=="") {$errors = "yes";}
// Error checking, make sure all form fields have input
if ($errors == "yes") {
下一部分是$errors
变量。没有必要让它说是和否,而你的意思是true
或false
。接下来,应该为一切顺利的情况初始化变量
$errors = false;
if (empty($_POST['answer1']) || trim($_POST['answer1'])=="") {$errors = true;}
if (empty($_POST['answer2']) || trim($_POST['answer2'])=="") {$errors = true;}
// Error checking, make sure all form fields have input
if ($errors) {
// Not all fields were entered error
$message = "You must enter values to all of the form fields!";
$output = array('errorsExist' => true, 'message' => $message);
}
因此,现在代码看起来可以更好地查找实际错误。要找到错误,您需要检查哪些值实际提交到您的表单:
echo '<pre>', htmlspecialchars(print_r($_POST, true)), '</pre>'; die();
再次请求页面,您将看到您提交的数据,以便检查是否错误检查了正确的字段。
另一种方法是期望所有提交的文件都有错误。因此,默认值为true
。然后,只有当所有字段都有效时,$errors
才会设置为false
。
因此,在您的情况下,如果您没有进行正确的错误检查,您的回复将始终不会返回错误,即使是实践中的表单也会返回错误。这就是为什么你应该控制你的错误检查是否真的有效。
根据您在评论中的反馈,很明显,您需要在answer1
和answer2
帖子字段中引用该项目。您只是检查错了字段。
因此,只需将$_POST['answer1']
替换为$_POST['answer1'][2]
,其他答案也是如此。这是answer1
的if子句示例:
if (empty($_POST['answer1'][2]) || trim($_POST['answer1'][2])=="") { ...
^^^ ^^^
只要总是测试正确的变量,它就会像预期的那样工作。
相关:如何创建具有客户端特征的服务器端表单提交脚本?
不太确定变量在PHP中的作用域,但我猜你应该在做第一个IF之前定义$errors。此外,我认为没有必要进行这么多检查,IF(空($_POST[…]))就足够了。
伙计,你只需要这样做。您有多余的代码。请干燥(不要重复)
<?
if (empty($_POST['answer1']) || empty($_POST['answer2']))
$errors = "yes"
if ($errors == "yes")
{
$message = "You must enter values to all of the form fields!";
$output = array('errorsExist' => true, 'message' => $message);
}
?>
if(!@$_POST['answer1']) $errors = "yes";