我正在努力学习构建登录序列。在一个部分中,我想确定用户是否将3个必填字段中的任何一个留空:
foreach ( $_POST as $key => $value )
{
if ( $key = "school_code" ||
$key = "user_name" ||
$key = "password" )
{
if ( $value == "" )
{
$a_blank[] = $key ;
}
}
}
if( @sizeof( $a_blank ) > 0 )
{
echo '<pre>';
print_r( $a_blank );
echo '</pre>';
}
如果用户没有为school_code或user_name输入任何内容,但是输入密码然后单击“提交”,则结果为:
Array
(
[0] => 1
[1] => 1
)
为什么数组结果不是这样的(即$ key的值)?
Array
(
[0] => school_code
[1] => user_name
)
谢谢!
答案 0 :(得分:7)
比较是==,而不是=。
$key = "school_code" || $key = "user_name" || $key = "password"
应该用==代替。你也可以用稍微冗长的方式写出来:
$options = array("school_code","user_name","password");
if (in_array($key, $options) && empty($value)) {
$a_blank[] = $key;
}
答案 1 :(得分:2)
进行比较时,请记住使用两个等号(==
)而不是一个(=
)。一个等号是赋值,两个是比较。
以此为例:
$val = false;
if ($val = true)
foo();
如果您在=
语句中使用if
,则会调用foo()
。您实际执行的操作是在$val
语句中将true
的值设置为if
。在这种情况下,始终是真的。那不是你想要的。
$val = false;
if ($val == true)
foo();
这就是你想要的。在这里,foo()
将不会被调用。
有关详细信息,请参阅PHP docs。
答案 2 :(得分:1)
此代码存在两个问题。
$key = "school_code" || $key = "user_name" || $key = "password"
将$ key分配给逻辑的结果,或者总是为真(== 1)。
另一个问题是,根据浏览器,“空”表单值并不总是返回 因此,如果说用户将密码留空,则可能不会出现在$ _POST数组中。
你可以做一个简单明确的“if”而不是花哨的数组技巧。
$missing = array();
foreach (array('school_code','user_name','password') as $nm
if ( !isset($_POST[$nm] length($_POST[$nm]) == 0 ) {
$missing[] = $nm;
}
答案 3 :(得分:0)
我已经尝试过这段代码(使用==作为课程比较),它运行正常。
这是我得到的结果:
Array
(
[0] => school_code
[1] => password
)
但是当使用原始版本(错误地使用=符号)运行时,它会返回:
Array
(
[0] => 1
[1] => 1
)
问题在于提问者使用=来比较而不是==。 因此,解决方案是使用==并且它将起作用。
任何人都能解释一下吗?
答案 4 :(得分:0)
感谢所有关于我的问题的帮助!我很沮丧,“==”vs“=”再一次让我绊倒了。希望我可以设置我的IDE,这样每次输入一个等号时,一个小弹出会问我,“你确定吗?”
FWIW,这是HTML:
<?php
session_start() ;
$_SESSION["form_token"] = md5( rand( time(), true ) ) ;
?>
<!-- Display login form -->
<div id="login">
<p>Please supply your username, 3-digit school code, and password.</p>
<form action = "<?php echo $_SERVER['PHP_SELF']; ?>"
method = "post">
<Input type = "hidden"
name = "form_token"
value = "<?php echo $_SESSION['form_token']; ?>" />
<dl>
<dt><strong>Username</strong></dt>
<dd><input type = "text"
name = "user_name" /></dd><br/>
<dt><strong>School code</strong></dt>
<dd><input type = "text"
name = "school_code" /></dd><br/>
<dt><strong>Password</strong></dt>
<dd><input type = "password"
name = "password" /></dd> <br/>
<dd><input type = "submit"
name = "action"
value = "Login" /></dd>
</dl>
</form>
答案 5 :(得分:0)
当您使用此类comapring时 if($ key ==“school_code”|| ..)
如果您错误地键入“=”而非“==”
,则可能会出现此类错误好的技巧就是这样使用它: if(“school_code”== $ key || ... 并且你永远不会有这个错误,因为另一种方式是错误
抱歉英语不好。