Bu dizi sonuç nasıl olur anlamıyorum

6 Cevap php

Ben bir giriş dizisini oluşturmak öğrenmek için çalışıyorum. Kullanıcı boş 3 gerekli alanları herhangi bırakılırsa bir bölümünde, ben belirlemek istedik:

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

Kullanıcı school_code veya user_name şey girmiyor, ancak bir parola girin ve ardından tıklama göndermek ETMEZ varsa, sonuç:

Array
(
    [0] => 1
    [1] => 1
)

Neden dizi böyle sonuçlanmaz (yani, $ anahtar değerleri)?

Array
(
    [0] => school_code
    [1] => user_name
)

Teşekkürler!

6 Cevap

Karşılaştırma == değil = ile.

$key = "school_code" || $key = "user_name" || $key = "password"

Yerine == ile olmalıdır. Sen de biraz daha az ayrıntılı bir şekilde yazabiliriz:

$options = array("school_code","user_name","password");
if (in_array($key, $options) && empty($value)) {
    $a_blank[] = $key;
}

Bu kod ile iki problem.

The

$key = "school_code" || $key = "user_name" || $key = "password" 

Her zaman doğru olacak mantıksal veya sonucunu girmek için $ atar (== 1).

The other problem is that depending on the browser "empty" form values are not always returned so if say the user left password blank it might not appear in the $_POST array.

Sen çok daha iyi yapıyor olurdu düz eski açık değil bunun için fantezi dizi hileler daha s "eğer".

$missing = array();
foreach (array('school_code','user_name','password') as $nm
if ( !isset($_POST[$nm] length($_POST[$nm]) == 0 ) {
        $missing[] = $nm;
}

(Elbette karşılaştırma == kullanarak) bu kodu denedim ve gayet iyi çalışıyor.

Bu aldım sonuç:

Array
(
    [0] => school_code
    [1] => password
)

(Yanlışlıkla = işareti kullanarak) orijinal ile çalıştırdığınızda Ama döndürür:

Array
(
    [0] => 1
    [1] => 1
)

The problem is that the asker is using = to compare instead of ==. So the solution is to use == and it will work.

Herkes bu açıklayabilir misiniz?

Benim soru ile tüm yardım için teşekkürler! Ben vs "==" "=" Henüz bana bir kez daha takıldı ki sinirli değilim. Ben bir eşittir işareti yazdığınız her zaman, biraz açılır, bana sorardı ki benim IDE set isterdim "EMİN MİSİNİZ?"

FWIW, burada 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>

when you are using such comapring if ( $key == "school_code" || .. )

Eğer yanlış "=" yerine yazarsanız "==" Böyle hata olabilir

nice trick is use it that way : if ("school_code" == $key || ... and you'll never has this bug because another way it would be error

kötü İngilizce için üzgünüm.

Eğer bir karşılaştırma yapıyoruz, sadece bir yerine iki eşit işaretleri (==) kullanmayı unutmayın (=). Tek eşittir işareti iki karşılaştırma, atama olduğunu.

Örnek olarak bu atın:

$val = false;
if ($val = true)
    foo();

Eğer if açıklamada = kullanırsanız, foo() çağrılır. Ne aslında yapıyoruz olduğunu setting the value of $val için true sağ if deyimi içinde. Bu durumda, it will always be true. İstediğin değil.

$val = false;
if ($val == true)
    foo();

Bu istediğiniz şeydir. Burada, foo() denilen almazsınız.

Daha fazla bilgi için PHP docs bkz.