2011-06-01 123 views
-1

可能重复:
PHP EOF shows only one result from loopPHP EOF显示结果只有一个

你好

好像我找不到这样的问题的解决方案。

我正在使用以下代码。

它应该显示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; 
} 
+1

*确切副本 – Cyclone 2011-06-01 22:22:21

+0

对我来说似乎是正确的,countYiBmenu返回的是什么? – 2011-06-01 22:23:01

回答

1

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

另外,你没有声明$ menu变量,你只是'添加'。在while语句之前,把$ menu =''; (或者其他任何会为该变量声明一个空字符串的东西)。

最后,围绕html字符串使用单引号。这样,您不必在添加属性时避免使用双引号。例如,在while语句中的$菜单行应该是这样的:

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

我不知道,如果我帮你解决问题的,但是我认为这将帮助你清理你的代码(代码越干净,越不容易出错,越容易发现错误)。

+0

更不用说您可以使用字符串插值而不是串联来格式化字符串。 此外,生成的HTML是错误的。具有相同id的多个div(“菜单”),没有周围的'ul'的li's。 – Zecc 2011-06-01 22:52:07

+0

是的,天哪....我甚至忘记了li标签和事实,你应该使用sprintf,而不是堆积到变量。很好的接收。 – 2011-06-01 23:03:55

+0

有趣..两年在PHP编程,我不记得/知道sprintf。其实我的意思是写一些像''{$rowYiBmenu['linkTitle']}''这样的东西。 **编辑**啊,单引号字符串不受内插。我的错。 – Zecc 2011-06-02 09:15:49

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代码整理出来。