我是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变量的行上得到一个错误,但我确实看到“所有字段都是必需的”。如果没有填写任何字段,我也会看到此错误,因此此部分有效。
如果填写了所有字段。无论长度如何,我总是看到“标题太短”和“博客帖子有点短”,即使它们不是......
我花了一段时间看着这个,只是不知道我做错了什么!
任何帮助都将非常感谢!!
谢谢, 最大
答案 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)
或任何其他数字......总是如此!