2011-08-09 128 views
0

我正在創建一個訂單購物車。PHP - 如何做到這一點,如果?

在顯示購物車的頁面上,它檢查存儲在會話$order中的值是否與mysql表中的某一行的id相對應。如果該匹配存在,則返回相應的行。

在此過程中,我試圖檢索會話$quantity中存儲的與表中行的id對應的數量值。

$order$quantity中的每個值都分配了一個名稱,它是從中添加的項目的ID。

這是增加了爲了將購物車的代碼:

if (isset($_POST['action']) and $_POST['action'] == 'Order') 
{ 
// Add item to the end of the $_SESSION['order'] array 
$_SESSION['order'][$_POST['id']] = $_POST['id']; 
$_SESSION['quantity'][$_POST['id']] = $_POST['quantity']; 
header('Location: .'); 
exit(); 
} 

這是購物車頁上的代碼:

foreach ($order as $item) 
foreach ($quantity as $amount) 
{ 

mysql_data_seek($productsSql, 0); //<- this line, to reset the pointer for every EACH. 
while($row = mysql_fetch_assoc($productsSql)) 
{ 
    $itId = $row['id']; 
    $itDesc = $row['desc']; 
    $itPrice1 = $row['price1']; 
    if ($item == $itId) 
    { 
    $pageContent .= ' 
      <tr> 
       <td>'.$itDesc.'</td> 
       <td>'.if ($item[''.$itId.''] == $amount[''.$itId.'']) {echo $amount}.'</td> 
       <td>R'.number_format($itPrice1*$amount, 2).'</td>    
      </tr> 
';  
    } 
} 
} 

此行產生語法錯誤:

<td>'.if ($item[''.$itId.''] == $amount[''.$itId.'']) {echo $amount}.'</td> 

這裏的初學者有什麼問題?其次,我需要怎樣做才能完成我面臨的任務?

對此的任何輸入將不勝感激!

回答

2

你可以試試嗎?

<td>'.($item[$itId] == $amount[$itId] ? $amount : '').'</td> 

這是一個三元運算符,看看http://en.wikipedia.org/wiki/Ternary_operation

+0

雖然這工作被添加到購物車中的第一項。當第二件物品被添加到購物車中時,這些物品會被重複,例如,應該有兩個物品,其中有四個物品,這些物品的價值混合了嗎? –

+0

添加var轉儲時,$ $ itId的值爲:string(1)「3」string(1)「3」string(1)「6」string(1)「6」 –

+0

您可以嘗試使用$ item [intval($ itId)]? – Lordalcol

1

你不能簡單地添加這樣的條件語句,而你正在構建一個字符串。

你可以這樣做,但是

<td>' . ($item[$itId] == $amount[$itId]) ? $amount : null . '</td> 

,但你應該使用更清晰的方法。

您可能會遇到的另一個問題是,如果$amount是一個數組,您將無法將其打印爲字符串。但是,如果$amount是ArrayAccess接口的對象,則可以使用__toString()方法打印它;但那是另一回事。

0

創建購物車頁面的代碼有幾個問題。

  1. 您可以遍歷項目和數量,這可能會給您重複的輸出。
  2. $ item是一個純字符串,所以我想知道$ item [$ itId]應該做什麼?
  3. 您遍歷完整的結果集幾次,實際上並非必要。我真的希望「$ productSql」不是「從產品中選擇*」,否則這可能會在生產模式下變得很慢。

我建議建立一個良好的SQL用於獲取數據,並以此作爲填充頁面的基礎:

// note this has SQL-injection issues, so you really need to make sure that $order contains no crap 
$productsSql = mysql_query("select * from product where id in (".join($order, ',').")"); 

// you now have a result set with all products from your order. 
while($row = mysql_fetch_assoc($productsSql)) 
{ 
$itId = $row['id']; 
$itDesc = $row['desc']; 
$itPrice1 = $row['price1']; 
// session contains the quantity array mapping ID -> Quantity, so grab it from there 
$itQuantity = $quantity[$itId]; 
// finally calculate the price 
$itPrice = number_format($itPrice1*$itQuantity, 2); 

// now you have all data for your template and can just insert it. 
// if you use double quotes you can put the $xyz into the string directly 
$pageContent .= " 
     <tr> 
      <td>$itDesc</td> 
      <td>$itQuanty</td> 
      <td>R $itPrice</td>    
     </tr> 
     ";  
}