gpt4 book ai didi

php - 不返回虚假表单提交的错误

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:06:46 25 4
gpt4 key购买 nike

我正在想办法解决这个问题,因为表单的 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 变量。没有必要让它说是和否,而你的意思是 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?

关于php - 不返回虚假表单提交的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6431176/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com