0

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

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

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

任何帮助将非常感激!!

谢谢,马克斯

4

6 回答 6

2

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

if (strlen($title < 3)){

if (strlen($title) < 3){

对于其他比较也是如此。

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

$title = isset($_POST['title']) ? $_POST['title'] : '';
于 2013-06-27T21:37:35.977 回答
0

You have a semicolon at the end of your first IF statement:

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

That means that if the statement is true, do nothing. Then it always executes the block below it.

于 2013-06-27T21:42:55.103 回答
0

I don't think it is a good idea to submit the form and do these validations on the server end (PHP end) if this doesn't require the server infrastructure. You could still do these validations using JavaScript.

于 2013-06-27T21:43:34.187 回答
0

First, name your form:

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

Then base your first if statement off the name of the form and remove the ';' at the end of that line:

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

Inside that if, check and set each $_POST variable as you are:

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

etc. for the other variables.

Do the length validation as mentioned in the other answers.

于 2013-06-27T21:43:55.523 回答
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

于 2013-06-27T21:38:07.827 回答
0

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

去掉它 !

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

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

希望能帮助到你....

于 2013-06-27T21:55:51.063 回答