【问题标题】:PHP validation form not returning correct responsePHP验证表单没有返回正确的响应
【发布时间】:2013-06-25 13:42:48
【问题描述】:

我是 PHP 新手,并尝试编写一些代码来验证同一页面上的表单,然后再将帖子提交到数据库。

我想要的是代码;

  1. 询问是否有任何字段已填写
  2. 如果是,请检查是否有任何字段为空(是否输出消息)
  3. 如果每次向数组中添加任何错误时,都要对数据进行一系列验证检查。
  4. 最后问一下有没有发现错误
  5. 如果不将数据插入数据库(这段代码是写的,但我在下面提供的代码中没有显示。

这是我的代码:

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Untitled Document</title>
</head>


if(isset($_POST['title']) || isset($_POST['content']) || isset($_POST['comment_option']));

{


$title = $_POST['title'];
$content = $_POST['content'];
$comment_option = $_POST['comment_option']; 
$form_errors = array();

if (empty($title) || empty($content) || empty($comment_option)) 
{

    $form_errors[] = "All fields are required!";

} else {

    if (strlen($title < 3)){

        $form_errors[] = "The title is too short!";

    }

    if (strlen($title > 50)){

        $form_errors[] = "The title is too long!";

    }

    if (strlen($content < 50)){

        $form_errors[] = "Post is a bit short!";

    }
}


if(!empty($form_errors)) {

print_r($form_errors);


}else{

//insert data into database

}

}
?>

<form action="add_post.php" method="post">

Title: <input type="text" name="title"><br>

Content: <input type="text" name="content"><br>

Comments enabled?<br>

<input type="radio" name="comment_option" value="true">Yes<br>
<input type="radio" name="comment_option" value="false">No<br>

<input type="submit">


</form>




<body>
</body>
</html>

当我加载页面时,我在设置 $title $content 和 $comment_option 变量的行上收到三个未定义索引的错误。如果我只是点击提交,那么我只会在我设置 $comment_option 变量的那一行得到一个错误,但我确实看到“所有字段都是必需的”。如果未填写任何字段,我也会看到此错误,因此这部分有效。

如果所有字段都已填写。无论长度如何,我总是看到“标题太短”和“博客文章有点短”,即使它们没有......

我花了一段时间看这个,只是无法弄清楚我做错了什么!

任何帮助将不胜感激!

谢谢, 最大

【问题讨论】:

    标签: php html forms validation undefined-index


    【解决方案1】:

    首先,命名您的form

    &lt;form action="add_post.php" method="post" name="myForm"&gt;

    然后将您的第一个 if 语句基于 form 的名称并删除“;”在该行的末尾:

    if(isset($_POST['myForm'])){ . . . }

    在 if 中,检查并按原样设置每个 $_POST 变量:

    if(isset($_POST['title']) && isset($_POST['content']) && isset($_POST['comment_option']))
    {
     $title = $_POST['title'];
     $content = $_POST['content'];
     $comment_option = $_POST['comment_option'];
    }
    else
    {
     $form_errors[] = "All fields are required!";
    }
    

    等等。其他变量。

    按照其他答案中的说明进行长度验证。

    【讨论】:

    • 当并非所有字段都保存数据时,如何使用它输出消息?感谢您的建议。
    • 已更新,检查所有变量不为空。
    【解决方案2】:

    整个问题是你有“;”在 if 语句的末尾。 if(isset($_POST['title']) || isset($_POST['content']) ||
    isset($_POST['comment_option']));

    删除它!

    其他问题在条件:if (strlen($title &lt; 3)){ 这应该是if(strlen($title) &lt; 3){ 等等……

    strlen 返回一个整数,然后您才能检查条件。 您在这段代码中写的是:if(1) 或任何其他数字.... 这总是正确的!

    希望对你有帮助....

    【讨论】:

      【解决方案3】:

      看起来你在做 strlen 条件错误。

      你正在这样做:

      if (strlen($title < 3))
      

      什么时候你应该这样做:

      if (strlen($title) < 3)
      

      你的条件失败的原因是因为你得到strlen($title &lt; 3)的结果,这导致strlen(true),这导致1的答案(我相信),因此条件被视为@ 987654326@.

      在更正的情况下,条件是如何工作的:

      我们正在使用strlen 函数来计算$title 的长度,我们可以说是“测试”。所以这样做strlen($title) 将产生4。现在条件变为4 &lt; 3,结果为false

      【讨论】:

      • 哦,对了,我明白了。一个nooby错误x)。谢谢你告诉我这个。
      【解决方案4】:

      如果不需要服务器基础架构,我认为提交表单并在服务器端(PHP 端)进行这些验证不是一个好主意。您仍然可以使用 JavaScript 进行这些验证。

      【讨论】:

      • 是的,但是如果用户关闭 javascript 或尝试使用 curl 或其他方式提交表单怎么办?您仍然需要服务器端验证。
      • 我不知道任何 javascript 并且不知道如何以任何其他方式进行操作:/
      【解决方案5】:

      第一个 IF 语句的末尾有一个分号:

      || isset($_POST['comment_option']));

      这意味着如果陈述为真,则什么也不做。然后它总是执行它下面的块。

      【讨论】:

      • 好的,谢谢你一开始就消除了未定义的索引错误,但如果我不按单选按钮上的某些东西,comment_option 仍然会出错。我猜是因为收音机是真/假?
      • 单选按钮是"checked"""。如果您需要确保至少选中一个,则将 HTML 修改为默认单选按钮之一为 checked
      • 在您的情况下,您有两个同名的单选按钮。不是一个好主意。我会将其中一个名称更改为yes_btn,另一个更改为no_btn,然后检查$_POST['yes_btn']$_POST['no_btn'] 中的哪一个设置为"checked"
      • 啊,我明白了。 Iv 设置一个默认检查并解决问题。它现在全部排序:)。感谢大家的投入!
      【解决方案6】:

      您已将&lt; 3 比较放在对strlen(以及其他两个)的函数调用中。所以从

      if (strlen($title < 3)){
      

      if (strlen($title) < 3){
      

      对于其他比较也是如此。

      可以通过将变量的设置更改为以下内容来修复未定义的索引错误:

      $title = isset($_POST['title']) ? $_POST['title'] : '';
      

      【讨论】:

      • 啊,好的,验证位已排序,并且工作正常,谢谢!问题是我仍然得到未定义的索引错误。是因为如果 $_POST['?'] 里面什么都没有,我设置了一个里面什么都没有的变量?
      • 那是因为您正在检查是否设置了任何变量,然后假设它们都是。因此,如果设置了$_POST['title'] 而未设置$_POST['content'],那么当您尝试设置$content = $_POST['content'] 时,您将得到一个未定义的索引
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-07
      • 1970-01-01
      • 2013-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-04
      相关资源
      最近更新 更多