我一直在努力想要一个文本表单字段。因此,如果某个人没有填写他的名字,他将收到一个错误,例如“没有标题填写!”
我现在得到了这个,但是当我将其插入数据库时,它不能正常工作。
if(isset($_POST['submit'])) {
$update = "UPDATE post SET `title`='$_POST[title]', `pic`='$_POST[pic]', `youtube`='$_POST[youtube]' WHERE id = $_POST[id]";
$db->query($update) or die($db->error);
if($_POST['title'] == "") {
$error = "Title is required!";
}
if ($_POST['pic'] == "") {
$error = "Picture is required!";
}
if(isset($error)){
echo $error;
} else {
echo '<p>Your post has been updated!</p>';
}
}
答案 0 :(得分:4)
如果发现错误,您需要停止执行代码,而不仅仅是回显错误。如果没有错误,则只应执行将数据提交到数据库的所有其他代码。尝试这样的事情:
编辑:看到代码更新后,您需要这样做:
if(isset($_POST['submit'])) {
if(!isset($_POST['title']) || trim($_POST['title']) == "") {
$error = "Title is required!";
}
if (!isset($_POST['pic']) || trim($_POST['pic']) == "") {
$error = "Picture is required!";
}
if(isset($error)){
echo $error;
} else {
$update = "UPDATE post SET `title`='" . mysql_real_escape_string($_POST['title']) . "', `pic`='" . mysql_real_escape_string($_POST['pic']) ."', `youtube`='" . mysql_real_escape_string($_POST['youtube']) ."' WHERE id = " . mysql_real_escape_string($_POST['id']);
$db->query($update) or die($db->error);
echo '<p>Your post has been updated!</p>';
}
}
问题是,无论验证后发生了什么,您的数据都会被提交到数据库 - 当您检查错误时,由于SQL已经执行,因此为时已晚。
如果你按照上面显示的方式进行操作,它只会在未设置$error
变量的情况下提交,这就是你想要的。
答案 1 :(得分:0)
我不会只依靠
if($_POST['title'] == "")
因为如果有人在文本字段中输入空格,它将无效。首先,标题不应该太长?那你可以为它设置最大长度吗?
也可以再运行一些检查,例如:
我不会只依靠
if(!isset($_POST['title'] || $_POST['title'] == "" || $_POST['title'] == " ")
{
// Error
}
else
{
// Database query
}
你想要else,否则它将始终执行数据库查询,无论他们是否没有正确填写表单。