Benim foreach döngüsü üzerinde bir hata alıyorum

7 Cevap php

İşte kod:

<?php

//Starting session

session_start();

//Includes mass includes containing all the files needed to execute the full script
//Also shows homepage elements without customs

require_once ('includes/mass.php');

$username = $_SESSION['username'];

if (isset($username))

{   

//Query database for the users networths

$sq_l = "SELECT * FROM user ORDER BY worth";

$sql_query_worth = mysql_query($sq_l);

while ($row = mysql_fetch_assoc($sql_query_worth))

      {

         $dbusername = $row['username'];

         $dbworth    = $row['worth'];

            foreach ($dbusername as $dbuser)

                {
                    echo ". USER: ".$dbuser." Has a networth of:  ".$dbworth;

                }
      }               
}

?>

Üç sonuç vardır. Ve burada hatalardır.

Burada hata msg:

Uyarı: C foreach için verilen Geçersiz bağımsız değişken (): hat 32 \ xampp \ htdocs \ Moğol \ richlist.php

Uyarı: C foreach için verilen Geçersiz bağımsız değişken (): hat 32 \ xampp \ htdocs \ Moğol \ richlist.php

Uyarı: C foreach için verilen Geçersiz bağımsız değişken (): hat 32 \ xampp \ htdocs \ Moğol \ richlist.php

7 Cevap

Eğer foreach döngüsü bir dizi geçmezken olmasıdır. Bu deneyin:

while ($row = mysql_fetch_assoc($sql_query_worth))
{
    $dbusername = $row['username'];
    $dbworth    = $row['worth'];
    echo "USER: ".$dbusername ." Has a networth of:  ".$dbworth;              
}

Sadece değiştirmek:

        foreach ($dbusername as $dbuser)

            {
                echo ". USER: ".$dbuser." Has a networth of:  ".$dbworth;

            }

için:

echo ". USER: ".$dbusername." Has a networth of:  ".$dbworth;

Bir dizi üzerinde foreach() dolaşır. Büyük olasılıkla $dbusername Eğer foreach() kurtulmak ve sadece yerine doğrudan $dbusername echo almak gerektiği anlamına gelir, bunun yerine bir dizedir.

Sen bir dizi gibi bir dize boyunca yineleme için çalışıyoruz - foreach dizi () giriş gerektirir

Lütfen foreach döngü gerek yok; Bu daha iyi çalışması gerekir:

while ($row = mysql_fetch_assoc($sql_query_worth))
{
  $dbusername = $row['username'];
  $dbworth    = $row['worth'];
  // The username is in $dbusername
  // And the worth is in $dbworth
  // So, just use those :
  echo ". USER: ".$dbusername." Has a networth of:  ".$dbworth;     
}


Bascially :

  • mysql_fetch_assoc $row içine geçerli satırın veri getirir
  • anlamına gelir $row username ve worth anahtarları içeren bir dizidir
  • you are assigning the values of those two array entries to $dbusername and $dbworth
    • Şimdi dizelerini içeren
    • ve direkt olarak kullanılabilir: herhangi bir alt-dizi içermez.


If you want to get a better look to what your variables contain, you could use print_r, or var_dump ; for instance, like this :

while ($row = mysql_fetch_assoc($sql_query_worth))
{
  var_dump($row;)
  $dbusername = $row['username'];
  $dbworth    = $row['worth'];
  var_dump($dbusername, $dbworth);
  echo ". USER: ".$dbusername." Has a networth of:  ".$dbworth;     
}

Neden foreach orada gerekiyor? Değil bir dizi bu. Sen foreach dışında bu olmalıdır.

echo ". USER: ".$dbuser." Has a networth of: ".$dbworth;

Sen foreach yanlış çağırıyor. Bu ilk argüman olarak bir dizi bekliyor. Zaten veritabanı sorgu sonuçları ile bir süre döngü yineleme gibi bu durumda sadece foreach çıkarın.