PHP EOF只显示一个结果

时间:2011-06-01 22:19:48

标签: php mysql loops eof

  

可能重复:
  PHP EOF shows only one result from loop

你好

好像我找不到解决这个问题的方法。

我正在使用以下代码。

它应该显示EOF中mySQL循环给出的所有结果。

但它只展示了第一批结果,没有别的。

我做错了什么?

请帮帮我

function getYiBAdminBanner() {
global $site;
global $dir;
$queryYiBmenu = "SELECT * FROM `(YiB)_cPanel_Menu` WHERE Type = 'top'";
$resultYiBmenu=mysql_query($queryYiBmenu) or die("Errore select menu: ".mysql_error());
$countYiBmenu = mysql_num_rows($resultYiBmenu); 
while($rowYiBmenu = mysql_fetch_array($resultYiBmenu)) {
$menu .= "<div id=\"menu\" style=\"display:none;\"><li><a href=\"".$site['url'].$rowYiBmenu['linkHref']."\" onMouseOut=\"javascript: $('#menu').hide('9000');\"><img class=\"imgmenu\" src=\"".$site['url'].$rowYiBmenu['linkIcon']."\">".$rowYiBmenu['linkTitle']."</a></li></div>";
}
if($countYiBmenu <= 0){
$menu = "No Modules Installed";
}
$bannerCode .= <<<EOF
<div style="width:520px; background-color: #EEE; height:30px;">
{$menu}
</div>
EOF;
return $bannerCode;
}

2 个答案:

答案 0 :(得分:1)

虽然这不能解决您的问题,但我发现您使用的是mysql_fetch_array()。这是毫无意义的,因为你之后正在进行关联匹配(例如,$ rowYiBmenu ['linkHref'])。它会对你有用,但这会浪费资源,因为结果也会加载到数值数组中(使$ rowYiBmenu数组大两倍,只是浪费内存)。

此外,您没有声明$ menu变量,只是'添加'。在while语句之前,把$ menu =''; (或其他任何声明该变量的空字符串的内容)。

最后,在html字符串周围使用单引号。这样,您无需在添加属性时继续转义双引号。例如,while语句中的$ menu行应如下所示:

$menu .= '<div id="menu" style="display:none;"><li><a href="'.$site['url'].$rowYiBmenu['linkHref'].'" onMouseOut="javascript: $(\'#menu\').hide(9000);"><img class="imgmenu" src="'.$site['url'].$rowYiBmenu['linkIcon'].'">'.$rowYiBmenu['linkTitle'].'</a></li></div>';

我不确定我是否帮助解决了你的问题,但我认为这会帮助你清理一下代码(代码越清晰,错误就越少,发现错误就越容易)。

答案 1 :(得分:0)

我试过帮助其他duplicate question

我觉得你需要对来自数据库的数据进行一些基本的调试(学习?)。这应该很容易解决。

我建议您将while()代码改为这样的代码,以帮助调试发生的事情:

while($rowYiBmenu = mysql_fetch_array($resultYiBmenu)) {
    print "linkTitle: " . $rowYiBmenu['linkTitle'] ."<BR>";
    print "linkHref: " . $rowYiBmenu['linkHref'] ."<BR><BR>";
}
exit;

您应该看到数据库中所有结果的输出(不仅仅是第一个或最后一个)。在确定正在检索和循环正确数据之后。您可以将$menu变量连接和$bannerCode + HereDoc EOF代码整理出来。