不明白这个数组结果是如何发生的

时间:2010-01-08 05:38:31

标签: php arrays login

我正在努力学习构建登录序列。在一个部分中,我想确定用户是否将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
)

谢谢!

6 个答案:

答案 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 || ... 并且你永远不会有这个错误,因为另一种方式是错误

抱歉英语不好。