【问题标题】:PHP EOF showing only one result [duplicate]PHP EOF仅显示一个结果[重复]
【发布时间】:2011-06-01 22:19:48
【问题描述】:

可能重复:
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;
}

【问题讨论】:

  • 对我来说似乎是正确的,countYiBmenu 返回什么?

标签: php mysql loops eof


【解决方案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>';

我不确定我是否帮助您解决了您的问题,但我认为这会帮助您稍微清理一下代码(代码越干净,出错的可能性就越小,并且更容易发现错误)。

【讨论】:

  • 更不用说您可以使用字符串插值而不是连接来格式化字符串。此外,生成的 HTML 是错误的。多个divs 具有相同的id(“菜单”),lis 没有包围ul
  • 是的,天哪....我什至忘记了 li 标签以及您应该使用 sprintf 而不是堆积变量的事实。不错的收获。
  • 有趣.. 两年的 PHP 编程,我不记得/不知道 sprintf。我实际上的意思是写像'&lt;a href="{$site['url']}{$rowYiBmenu['linkHref']}"&gt;{$rowYiBmenu['linkTitle']}&lt;/a&gt;' 这样的东西。 编辑啊,单引号字符串不受插值的影响。我的错。
【解决方案2】:

我曾尝试帮助其他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 代码整理出来。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-25
    • 2015-08-02
    • 1970-01-01
    • 1970-01-01
    • 2018-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多