不返回错误表单提交的错误

时间:2011-06-21 19:50:26

标签: php validation

我正在试图弄清楚如何解决这个问题,因为表单的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);

}

4 个答案:

答案 0 :(得分:4)

你写道,你有问题要明白发生了什么。所以让我们深入检查其中一个if子句:

if((empty($_POST['answer1'])) || (trim($_POST['answer1'])=="") || ($_POST['answer1'] == NULL) || (!isset($_POST['answer1']))) { ...

这可以更简单地写为:

if (empty($_POST['answer1']) || trim($_POST['answer1'])=="") { ...

这是因为NULLempty()!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变量。没有必要说出是和否,而你的意思是truefalse。接下来,应该初始化变量,以确保一切顺利。让我们更改一下代码:

$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

因此,在您的情况下,如果您没有做正确的错误检查,您的响应将始终不会返回任何错误,即使是实际的表单也是如此。这就是为什么你应该控制你的错误检查是否真的有效。


根据您在评论中的反馈,很明显您需要在answer1answer2帖子字段中引用该项目。你刚刚检查了错误的字段。

所以只需将$_POST['answer1']替换为$_POST['answer1'][2],将其替换为另一个答案。这是answer1的示例if子句:

if (empty($_POST['answer1'][2]) || trim($_POST['answer1'][2])=="") { ...
                           ^^^                           ^^^

只需始终测试正确的变量,它应该像预期的那样工作。

相关: How do I create a server-side form submission script that has client-side characteristics?

答案 1 :(得分:3)

不太确定变量在PHP中的范围如何,但我猜你应该在你做第一个IF之前定义$ errors。另外,我认为没有必要进行这么多检查,if(空($ _ POST [...]))就足够了。

答案 2 :(得分:2)

盖伊,你只需要这样做。你有冗余的代码。请干(不要重复)

<?
    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);

    }
?>

答案 3 :(得分:0)

if(!@$_POST['answer1']) $errors = "yes";