错误的表单提交没有返回错误
我想弄清楚如何解决这个问题,因为表单的后期参数是:answer1 [2]和answer2 [4]。括号内的数字代表它所属问题的编号。我需要知道如何做到这一点的原因是,当它的空表单提交时,它不会为答案返回错误。错误的表单提交没有返回错误
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((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'][2]
代替$_POST['answer1']
,其他答案也一样。这是例如,如果子句answer1
:
if (empty($_POST['answer1'][2]) || trim($_POST['answer1'][2])=="") { ...
^^^ ^^^
就始终测试正确的变量,它应该像预期。
相关:How do I create a server-side form submission script that has client-side characteristics?
这就是我得到的。
Array ( [answer1] => Array ( [2] => ) [answer2] => Array ( [4] => ) [userID] => 10001 [submit] => Enter )–
@Jeff:好的,你检查错误的变量。我已经为答案添加了更多信息。 – hakre
但唯一不同的是括号内的数字并不知道。 questionID将与每个用户的答案不同。 –
不太确定变量在PHP中的作用范围,但我的猜测是你应该在做第一个IF之前定义$ errors。另外,我不认为这么多的检查是必要的,if(空($ _ POST [...]))就足够了。
if([email protected]$_POST['answer1']) $errors = "yes";
为什么-1?试试看,给我这个问题。 – user809145
Yuck。避免使用'@'错误抑制运算符。这是一种便宜的捷径,你可能会错过意想不到的,甚至是重要的错误。 (-1不是来自我,顺便说一句) – Wiseguy
为什么你会建议对'empty()'进行错误抑制?在PHP中使用错误抑制是一个好主意,而且这不是其中之一。 –
家伙,你只需要这样做。你有多余的代码。请干(不要重复自己)
<?
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);
}
?>
使用标志像'yes'和'no'脱身,使用'真/ FALSE'因为它的目的,那么你会降低你的'如果()'FN这个:'if($ errors)'(这意味着如果$ errors是TRUE,不需要做比较或==检查)。 – Jakub