2011-06-01 125 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代碼整理出來。