提问人:Max 提问时间:6/28/2013 最后编辑:Nir AlfasiMax 更新时间:6/28/2013 访问量:244
PHP 验证表单未返回正确的响应
PHP validation form not returning correct response
问:
我是PHP的新手,并试图编写一些代码来验证同一页面上的表单,然后再将帖子提交到数据库。
我想要的是代码;
- 询问是否有任何字段已填写
- 如果是这样,请检查是否有任何字段为空(因此输出消息)
- 如果没有,则每次向数组添加任何错误时,都要对数据进行一系列验证检查。
- 最后询问是否发现任何错误
- 如果没有,则将数据插入数据库(此位代码已写入,但未显示在我下面提供的代码中。
所以这是我的代码:
<!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 变量的行上收到错误,但我确实看到“所有字段都是必填字段”。如果未填写任何字段,我也会看到此错误,因此这部分有效。
如果所有字段都已填写。无论长度如何,我总是看到“标题太短”和“博客文章有点短”,即使它们不是。
我花了一段时间看这个,只是想不通我做错了什么!
任何帮助将不胜感激!
谢谢 麦克斯
答:
您已将比较放在函数调用中(以及其他两个)。所以从< 3
strlen
if (strlen($title < 3)){
自
if (strlen($title) < 3){
其他比较也是如此。
可以通过将变量的设置更改为如下所示来修复未定义的索引错误:
$title = isset($_POST['title']) ? $_POST['title'] : '';
评论
$_POST['title']
$_POST['content']
$content = $_POST['content']
看起来你做错了条件。
您正在这样做:
if (strlen($title < 3))
何时应执行此操作:
if (strlen($title) < 3)
你的条件失败的原因是因为你得到了 的结果,这导致了 ,这导致了 的答案(我相信),因此条件被看作是 。strlen($title < 3)
strlen(true)
1
true
在更正后的情况下,以下是条件的工作原理:
我们正在使用该函数来计算 的长度,我们可以说是“测试”。所以这样做会产生.现在条件变为 ,结果为 。strlen
$title
strlen($title)
4
4 < 3
false
评论
第一个 IF 语句的末尾有一个分号:
|| isset($_POST['comment_option']));
这意味着,如果陈述是真的,则什么都不做。然后它总是执行它下面的块。
评论
"checked"
""
checked
yes_btn
no_btn
$_POST['yes_btn']
$_POST['no_btn']
"checked"
如果不需要服务器基础设施,我认为提交表单并在服务器端(PHP端)进行这些验证不是一个好主意。您仍然可以使用 JavaScript 进行这些验证。
评论
首先,命名您的:form
<form action="add_post.php" method="post" name="myForm">
然后,将第一个语句作为 的名称,并删除该行末尾的 ';':if
form
if(isset($_POST['myForm'])){ . . . }
在其中,如果,检查并设置每个变量,如下所示:$_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!";
}
等。
按照其他答案中提到的进行长度验证。
评论
整个问题是,在if语句末尾的末尾有“ ; ”。if(isset($_POST['title']) || isset($_POST['content']) ||
isset($_POST['comment_option']));
删除它 !
其他问题出在条件上:这应该是等等......if (strlen($title < 3)){
if(strlen($title) < 3){
strlen 返回一个 Integer,只有这样您才能检查条件。
你在此代码中写的是:或任何其他数字......这永远是正确的!if(1)
希望它有所帮助......
上一个:此未定义的索引消息是什么意思
评论