2010-03-12 29 views
0

这里的错误是代码:让我的foreach循环

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

       } 
     }    
} 

?> 

有三种结果。这里是错误。

以下是错误消息:

警告:(c)中提供的foreach参数无效:\ XAMPP \ htdocs中\ Mogul公司\上线richlist.php 32

警告:无效参数提供为的foreach ()在C:\ XAMPP \ htdocs中\ Mogul公司\上线richlist.php 32

警告:在C的foreach()提供参数无效:\ XAMPP \ htdocs中\ Mogul公司\ richlist.php在线路32

+1

看来'$ dbusername'不是一个数组。 – Gumbo 2010-03-12 16:51:08

+0

那是什么“foreach”?是不是'$ dbusername''一个字符串? – kennytm 2010-03-12 16:51:57

+0

你想完成什么?错误信息很清楚,循环没有任何意义。 – 2010-03-12 16:52:15

回答

3

那是因为你没有将数组传递给foreach循环。试试这个:

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

只需更改:

 foreach ($dbusername as $dbuser) 

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

      } 

到:

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

您正在试图通过像数组的字符串迭代 - 的foreach需要阵列()输入

1

foreach()遍历数组。最有可能的是$dbusername是一个字符串,这意味着你应该摆脱foreach(),而只是直接回显$dbusername

0

不需要您的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;  
} 


Bascially:

  • mysql_fetch_assoc当前行的数据取入$row
  • 这意味着$row是一个数组,包含usernameworth
  • 您正在将这两个数组项的值分配到$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

为什么你需要那里的foreach?那不是一个数组。你应该在foreach之外做这件事。

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

0

您错误地调用foreach。它期望一个数组作为第一个参数。在这种情况下,只需删除foreach,因为您已经有一个while循环遍历数据库查询结果。