你好
好像我找不到解决这个问题的方法。
我正在使用以下代码。
它应该显示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;
}
答案 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
代码整理出来。