即使未填写所有字段,表单也会提交

时间:2012-10-10 21:13:52

标签: php html sql

我是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" />

提前感谢您提供任何帮助,这似乎是一个很棒的社区参与!

6 个答案:

答案 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'])) && ...