4

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

在此先感谢您的帮助,这似乎是一个很棒的社区!

4

6 回答 6

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');
}

编辑:的确,正如评论所暗示的,验证需要比这更重要。检查后重定向不是一个好主意,而是尝试将表单发布到自身。如果没有任何错误,则继续处理表单数据,如果有错误将它们设置在变量/对象/数组中并将它们显示在表单上/使用发布数据重新填充表单。

于 2012-10-10T21:19:11.850 回答
3

( !not) 运算符最适用于布尔值,但您的所有值都是字符串。代替:

!$_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');
    }
于 2012-10-10T21:21:14.063 回答
0

因为您使用的是&&(and),这意味着所有条件都必须为真。使用||(或),这将起作用。

于 2012-10-10T21:19:53.127 回答
0

您正在使用 && ,只有在所有条件都为真时才为真 - 也就是说,您仅在未设置任何值的情况下进行重定向。如果您想在其中任何一个未设置的情况下支持它,您会说!A || !B || !C ||...or !(A && B && C && ...)

于 2012-10-10T21:23:28.760 回答
-1

表单的行为与设计的完全一样。

您需要使用 JavaScript 来验证您的表单:

<input type="button" onclick="val()" value="Register" name="submit" />

JS:

function val() {
    ///your validation code.

}

有很多表单验证脚本和插件可用。

于 2012-10-10T21:16:10.433 回答
-1

尝试

if(empty($_POST['item'])) && ...
于 2012-10-10T21:17:30.903 回答