2013-05-30 18 views
1

我有這個循環運行的購物車腳本,但是當我嘗試發送電子郵件時,我只允許通過電子郵件發送9個項目超過9個項目的電子郵件只是空白。有人告訴我,我應該將我的查詢'SELECT * FROM books WHERE id = '.$id;更改爲不帶循環的所有項目。這是正確的,我應該嘗試做什麼?如果有的話可以有人給我一個我將如何做到這一點的例子?有人可以幫我改變這個PHP查詢來獲得所有領域的一槍嗎?

<?php 
function showCarts() { 
global $db; 
$cart = $_SESSION['cart']; 
if ($cart) { 
$items = explode(',',$cart); 
$contents = array(); 
foreach ($items as $item) { 
    $contents[$item] = (isset($contents[$item])) ? $contents[$item] + 1 : 1; 
} 
$output[] = '<table style="border-width:1px; bordercolor="#0099FF"">'; 
    $output[] = '<tr>'; 
    $output[] = '<thead bgcolor="#0099FF">'; 
    $output[] = '<th>Item</th>'; 
    $output[] = '<th>Price</th>'; 
    $output[] = '<th>Quantity</th>'; 
    $output[] = '<th>Total</th>'; 
    $output[] = '</thead>'; 
    $output[] = '</tr>'; 
      foreach ($contents as $id=>$qty) { 
    $sql = 'SELECT * FROM books WHERE id = '.$id; 
    $result = $db->query($sql); 
    $row = $result->fetch(); 
    extract($row); 
    $output[] = '<tr>'; 
    $output[] = '<td>'.$title.' by '.$author.'</td>'; 
    $output[] = '<td>&dollar;'.$price.'</td>'; 
    $output[] = '<td>'.$qty.'</td>'; 
    $output[] = '<td>&dollar;'.($price * $qty).'</td>'; 
    $total += ($price * $qty); 
    $output[] = '</tr>'; 
} 
$output[] = '</table>'; 
$tax = (.07); 
$taxtotal += round($total * $tax,2); 
$amounttotal += ($total + $taxtotal); 
$output[] = '<p>Tax: <strong>&dollar;'.$taxtotal.'</strong></p>'; 
$output[] = '<p>Total: <strong>&dollar;'.$amounttotal.'</strong></p>'; 
} 
return join('',$output); 
} 
?> 
+2

'WHERE ID ='N次總是方式比'WHERE ID較慢'用N值。 – tadman

+0

*旁註:*錯誤的HTML:'

> – Raptor

+0

小心,您很可能會接受SQL注入和XSS攻擊。始終使用針對數據庫的準備/參數化查詢,以及在HTML上下文中使用任意數據的'htmlspecialchars()'。 – Brad

回答

1

替換爲您的for循環的一部分:?(?,?,?...)

$ids = implode(',', array_keys($contents)); 
    $sql = 'SELECT * FROM books WHERE id IN ('. $ids . ')'; 
    $result = $db->query($sql); 
    while($row = $result->fetch()) { 
     extract($row); 
     $qty = $contents[(int)$row['id']]; // assuming your `$row` is an associative array of result 
     $output[] = '<tr>'; 
     $output[] = '<td>'.$title.' by '.$author.'</td>'; 
     $output[] = '<td>&dollar;'.$price.'</td>'; 
     $output[] = '<td>'.$qty.'</td>'; 
     $output[] = '<td>&dollar;'.($price * $qty).'</td>'; 
     $total += ($price * $qty); 
     $output[] = '</tr>'; 
    } 
+0

謝謝,這確實很好,但當我向購物車中添加超過9件商品時,我仍然收到一封空白電子郵件。我將showCart()函數添加到我的電子郵件腳本的主體中,以通過電子郵件發送購物車。無論如何要做到這一點沒有一個循環呢? – user2426617

+0

問題在別處。檢查您的最大文章大小。您可能會超出尺寸限制。 – Raptor

+0

再次感謝上面的答案,我檢查了我的max_post_size,它是50M,我的memory_limit只有20M,你認爲這是足夠的嗎?此外,我使用雅虎作爲我的主機,我沒有訪問我的php.ini文件或.htaccess有關如何解決該問題的任何建議? – user2426617

相關問題