2012-06-24 71 views
0

我遇到了php for循環的問題。
循環迭代過快,並且在內部的html代碼被echo-ed之前完成。PHP:For循環在代碼執行之前完成

<?php for($i = 0; $i < sizeof($shoppingCart); $i++) { 
    $sql = "SELECT * FROM products_test WHERE id = " . substr($shoppingCart[$i], 5) . ""; 
    $q = $DBH->query($sql) or die("failed!"); 
    $q->setFetchMode(PDO::FETCH_ASSOC); 
    $r = $q->fetchAll(); 
    echo '<tr>'; 
    echo '<td><img src="' . $r[$i]['image']. '" /></td>'; 
    echo '<td>' . $r[$i]['title'] . '</td>'; 
    echo '<td>' . $r[$i]['desc'] . '</td>'; 
    echo '<td>' . $r[$i]['price'] . '</td>'; 
    echo '<td><input type="number" id="qty"></td>'; 
    echo '<td>Remove</td>'; 
    echo '</tr>'; 
} ?> 

設置一個臨時變量將不起作用,因爲它只會有相同的行爲。

怎麼了?

在此先感謝!

+2

是什麼錯誤?你預期的結果是什麼以及你現在得到了什麼? – sree

+3

你的意思是「在HTML代碼之前完成echo-ed」?聽起來就像你得到一個錯誤,所以代碼停止。 –

+2

你確定這是你的確切代碼,並且'$ i ++之後沒有';'' –

回答

0

這可能是你的陣列空了。大家應該添加一個catch。

你會想要讓這樣的事情,使用empty功能:

<?php 
if (!empty($shoppingCart)) 
{ 
    for($i = 0; $i < sizeof($shoppingCart); $i++) { 
    $sql = "SELECT * FROM products_test WHERE id = " . substr($shoppingCart[$i], 5) . ""; 
    $q = $DBH->query($sql) or die("failed!"); 
    $q->setFetchMode(PDO::FETCH_ASSOC); 
    $r = $q->fetchAll(); 
    echo '<tr>'; 
    echo '<td><img src="' . $r[$i]['image']. '" /></td>'; 
    echo '<td>' . $r[$i]['title'] . '</td>'; 
    echo '<td>' . $r[$i]['desc'] . '</td>'; 
    echo '<td>' . $r[$i]['price'] . '</td>'; 
    echo '<td><input type="number" id="qty"></td>'; 
    echo '<td>Remove</td>'; 
    echo '</tr>'; 
    } 
} 
else 
{ 
    echo '<tr><td>Your shopping cart is empty</td></tr>'; 
} 
?> 
0

在我看來,你的查詢總是返回一行?但是您嘗試使用$r[$i]訪問不存在的行。

這可以解釋爲什麼在瀏覽器中看不到任何東西。但嘗試查看瀏覽器源代碼,如果它顯示空的HTML標籤,那麼這就是這個問題。

嘗試使用print_r($r)顯示數組的內容並查看它的外觀。

+0

是的!這是問題所在。對不起,不提供更多信息。 – Asaf

+0

沒問題。如果我的回答對你有幫助,你能接受嗎? –

相關問題