2014-02-08 69 views
0

我想弄清楚我將如何在我的while語句中做一個foreach語句。正如你可以通過這段代碼所說的那樣,即使它選擇了所有的行,它也只會從表中提交1行。我將如何讓它選擇每一行?雖然聲明(NumRows)內的Foreach

代碼:

$q2 = mysql_fetch_array(mysql_query("SELECT * FROM `ticketreply` WHERE `ticketid`='$id'")); 
$num_rows = mysql_num_rows($q2); 
while(count($num_rows) > $i){ 
    echo "<div style='float:left;width:940px;margin-bottom:2%;margin-left:".($i + 1)."0px;margin-right:25%;'><div style='margin-left:".($i + 1)."0px;border:1px solid #cecece;padding:10px;'>Posted By: <a href='#'>".user2($q2[1])."</a><h2>".$q2[2]."</h2></div></div></div>"; 
    $i++; 
} 

新嘗試:

$q2 = mysql_query("SELECT * FROM `ticketreply` WHERE `ticketid`='$id'"); 
$i = 0; 
foreach($q2 as $s){ 
    echo "<div style='float:left;width:100%;margin-bottom:2%;margin-left:".($i + 1)."0px;margin-right:25%;'><div style='margin-left:".($i + 1)."0px;border:1px solid #cecece;padding:10px;'>Posted By: <a href='#'>".user2($s[1])."</a><h2>".$s[2]."</h2></div></div></div>"; 
    $i++; 
} 

雖然現在這個不顯示任何行。

+0

首先儘量避免使用'mysql_ *'函數。而不是使用php中的'mysqli_ *'函數> 5.3 – krishna

+0

你看到foreach嗎?或者我錯過了什麼? –

+0

mysql_fetch_array不會返回數組中的所有結果。它返回一行,每次你再次運行它將返回下一行。 你檢查了PHP手冊嗎?示例#2向您展示瞭如何使用這些功能。 http://php.net/manual/en/function.mysql-fetch-array.php –

回答

1
$q2 = mysql_query("SELECT * FROM `ticketreply` WHERE `ticketid`='$id'"); 

$i = 0; 
while ($s = mysql_fetch_array($q2, MYSQL_NUM)) { 
    echo "<div style='float:left;width:100%;margin-bottom:2%;margin-left:".($i + 1)."0px;margin-right:25%;'><div style='margin-left:".($i + 1)."0px;border:1px solid #cecece;padding:10px;'>Posted By: <a href='#'>".user2($s[1])."</a><h2>".$s[2]."</h2></div> </div></div>"; 
    $i++ 
} 
1

只是要清楚,你的查詢,SELECT * FROM ticketreply WHERE ticketid ='$id'是最有可能只從表中選擇一個行。我假設您的ticketreply表中的ticketid是唯一的。所以只有一行被選中。

如果我用這個假設去,然後......

mysql_fetch_array獲取所有從查詢返回一行。關於mysql_fetch_array的文檔可以是found here

我會建議您在開始輸出HTML和樣式之前,首先打開一些$q2的打印語句,看看它是否包含您期望它包含的內容,並且具有您期望的結構有。

嘗試:

$q2 = mysql_fetch_array(mysql_query("SELECT * FROM `ticketreply` WHERE `ticketid`='$id'")); 
print_r($q2); 

您應該看到$ Q2是一個數組,它是兩個整數索引,並串索引(即,它也是一個散列結果,其中在表中的每個列名是關鍵)。讓我們限制mysql_fetch_array,這樣它只是給我們關聯的數組(字符串索引部分)而不是整數。

foreach ($q2 as $column => $value) { 
    print "column name: $column\n"; 
    print "  value: $value\n"; 
    print "\n"; 
} 

剛剛相反,如果你不關心的列名,和你:

$q2 = mysql_fetch_array(mysql_query("SELECT * FROM `ticketreply` WHERE `ticketid`='$id'"), MYSQL_ASSOC); 

現在,您可以通過以下方式聯繫的$q2每個元素作爲一個鍵 - 值對希望值的整數數組索引,那麼你就可以做到以下幾點:

$q2 = mysql_fetch_array(mysql_query("SELECT * FROM `ticketreply` WHERE `ticketid`='$id'"), MYSQL_NUM); 

然後,您可以使用常規for循環,通過你的結果迭代...

for ($i = 0; $i < sizeof($q2); $i++) { 
    print "Value $i: " . $q2[$i] . "\n"; 
} 

一旦你得到什麼的$q2結構是一個很好的感覺,那麼你可能會覺得很舒適,有信心從$q2嵌入在正確的位置值輸出HTML中。

+0

這不是唯一的。它基本上只是取回你正在回覆的票並將其ID放入數據庫中。雖然我看到你的意思,但它的選擇多於1,當我var_dump時選擇它們全部。 – user3023566