我是php新手,我不太明白为什么这个表单在所有情况下提交... 所以我的问题是:
如何修复此问题,以便表单仅在用户填写所有字段时提交?
if (!$_POST['username'] && !$_POST['password'] && !$_POST['repassword']
&& !$_POST['user_firstname'] && !$_POST['user_lastname'] ){
header('Location: register.php?msg=You did not complete all of the required fields');
}
我使用了&&
和||
运算符,但无论您填写哪个字段,它都会提交。
<form action="createuser.php" method="post" name="registration_form" id="registration_form">
<label>Email</label>
<input name="username" type="text" id="username" size="50" maxlength="50" /><br />
<label>First Name</label>
<input name="user_firstname" type="text" id="user_firstname" size="50" maxlength="50" /><br />
<label>Last Name</label>
<input name="user_lastname" type="text" id="user_lastname" size="50" maxlength="50" /><br />
<label>Password</label>
<input name="password" type="password" id="password" size="50" maxlength="100" /><br />
<label>Re-type Password</label>
<input name="repassword" type="password" id="repassword" size="50" maxlength="100" /><br />
<input type="submit" value="Register" name="submit" />
提前感谢您提供任何帮助,这似乎是一个很棒的社区参与!
答案 0 :(得分:3)
if (empty($_POST['username'])
|| empty($_POST['password'])
|| empty($_POST['repassword'])
|| empty($_POST['user_firstname'])
|| empty($_POST['user_lastname'])
){
header('Location: register.php?msg=You did not complete all of the required fields');
}
编辑:是的,正如评论所示,验证需要比这更重要。检查后重定向不是一个好主意,而是尝试将表单发布到自身。如果没有任何错误,则继续处理表单数据,如果有错误将它们设置在变量/对象/数组中并在表单上显示/重新填充表单和发布数据。
答案 1 :(得分:3)
!
(非)运算符最适合使用布尔值,但所有值都是字符串。而不是:
!$_POST['username']
尝试:
!empty($_POST['username'])
如果你想在所有字段都满了时执行某些操作,这就是codi:
if (!empty($_POST['username']) &&
!empty($_POST['password']) &&
!empty($_POST['repassword']) &&
!empty($_POST['user_firstname']) &&
!empty($_POST['user_lastname']) ){
header('Location: register.php?msg=You completed all of the required fields');
}
如果要在至少一个字段为空时执行某些操作,请尝试:
if (empty($_POST['username']) ||
empty($_POST['password']) ||
empty($_POST['repassword']) ||
empty($_POST['user_firstname']) ||
empty($_POST['user_lastname']) ){
header('Location: register.php?msg=You did not complete all of the required fields');
}
答案 2 :(得分:0)
因为您正在使用&&
(和),这意味着所有条件都必须为真。使用||
(或),这将有效。
答案 3 :(得分:0)
你正在使用&amp;&amp;只有在所有条件都为真的情况下才会出现这种情况 - 也就是说,只有在设置了 none 的情况下才进行重定向。如果您想要在未设置任何的情况下支持它,您可以说!A || !B || !C ||...
或!(A && B && C && ...)
。
答案 4 :(得分:-1)
表单的行为与设计完全一样。
您需要使用JavaScript来验证表单:
<input type="button" onclick="val()" value="Register" name="submit" />
JS:
function val() {
///your validation code.
}
有许多表单验证脚本和插件可供使用。
答案 5 :(得分:-1)
尝试
if(empty($_POST['item'])) && ...