PHP验证表单没有返回正确的响应

时间:2013-06-27 21:32:44

标签: php html forms validation undefined-index

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

我想要的是代码;

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

    <!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变量的行上得到一个错误,但我确实看到“所有字段都是必需的”。如果没有填写任何字段,我也会看到此错误,因此此部分有效。

    如果填写了所有字段。无论长度如何,我总是看到“标题太短”和“博客帖子有点短”,即使它们不是......

    我花了一段时间看着这个,只是不知道我做错了什么!

    任何帮助都将非常感谢!!

    谢谢, 最大

6 个答案:

答案 0 :(得分:2)

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

改变
if (strlen($title < 3)){

if (strlen($title) < 3){

和其他比较类似。

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

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

答案 1 :(得分:0)

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

你这样做:

if (strlen($title < 3))

当你应该这样做时:

if (strlen($title) < 3)

您的条件失败的原因是因为您获得strlen($title < 3)的结果,结果为strlen(true),这导致答案为1(我相信),因此条件被视为true

在更正的案例中,条件是如何运作的:

我们使用strlen函数来计算$title的长度,我们可以说是“测试”。因此,strlen($title)会产生4。现在,条件变为4 < 3,结果为false

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

首先,为您的form命名:

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

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

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

在if 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!";
}

等。对于其他变量。

进行其他答案中提到的长度验证。

答案 5 :(得分:0)

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

删除它!

其他问题包括:if (strlen($title < 3)){ 这应该是if(strlen($title) < 3){ 等等....

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

希望它有所帮助......