Ошибка в цикле foreach - PullRequest
       47

Ошибка в цикле foreach

0 голосов
/ 12 марта 2010

Вот код:

<?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;

                }
      }               
}

?>

Есть три результата. А вот и ошибки.

Вот сообщение об ошибке:

Предупреждение: неверный аргумент передан foreach () в C: \ xampp \ htdocs \ Mogul \ richlist.php в строке 32

Предупреждение: неверный аргумент указан для foreach () в C: \ xampp \ htdocs \ Mogul \ richlist.php в строке 32

Предупреждение: неверный аргумент указан для foreach () в C: \ xampp \ htdocs \ Mogul \ richlist.php в строке 32

Ответы [ 7 ]

5 голосов
/ 12 марта 2010

Просто измените:

        foreach ($dbusername as $dbuser)

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

            }

до:

echo ". USER: ".$dbusername." Has a networth of:  ".$dbworth;
3 голосов
/ 12 марта 2010

Это потому, что вы не передаете массив в цикл foreach. Попробуйте это:

while ($row = mysql_fetch_assoc($sql_query_worth))
{
    $dbusername = $row['username'];
    $dbworth    = $row['worth'];
    echo "USER: ".$dbusername ." Has a networth of:  ".$dbworth;              
}
1 голос
/ 12 марта 2010

foreach() перебирает массив. Скорее всего, вместо этого $dbusername является строкой, что означает, что вы должны избавиться от foreach() и просто вместо этого выводить эхо $dbusername.

0 голосов
/ 12 марта 2010

Вы звоните foreach неправильно. Он ожидает массив в качестве первого аргумента. В этом случае просто удалите foreach, поскольку у вас уже есть цикл while, повторяющий результаты запроса к базе данных.

0 голосов
/ 12 марта 2010

Зачем вам нужен foreach там? Это не массив. Вы должны иметь это за пределами foreach.

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

0 голосов
/ 12 марта 2010

Нет необходимости в вашей foreach петле; это должно работать лучше:

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


В основном:

  • mysql_fetch_assoc извлекает данные текущей строки в $row
  • , что означает $row - массив, содержащий ключи username и worth
  • вы присваиваете значения этих двух записей массива $dbusername и $dbworth
    • который теперь содержит строки
    • и может использоваться напрямую: они не содержат подмассива.


Если вы хотите лучше понять, что содержат ваши переменные, вы можете использовать print_r или var_dump; например, вот так:

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;     
}
0 голосов
/ 12 марта 2010

Вы пытаетесь перебрать строку как массив - foreach требует ввода array ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...