2014-01-22 22 views
0

MySQL查詢:foreach循環PHP在購物車

$sql_product = "SELECT * FROM products WHERE product_id= $product_id"; 
     $sql_result = $dbh->query($sql_product); 

PHP:

foreach($sql_result as $row) 
     { 
     $product_id=$row['product_id']; 
     $product_name=$row['product_name']; 
     $price=$row['price']; 
     $picture=$row['picture']; 

     // output 
     echo " 
     <div>$product_name</div> 
     <div>$price</div> 
     <div> 
      <form action='cart.php' method='POST' id='buy'> 
       Amount: <select name='amount'> 
         <option value='1'>1</option> 
         <option value='2'>2</option> 
         <option value='3'>3</option> 
        </select>     

      </form> 
     </div> 
     "; 
     if (isset($_POST['amount'])) 
      { 
      $amount = $_POST['amount']; 
      echo $amount, '<br /><br />'; 
      } 
     } 
    echo "<button type='submit'class='btn btn-primary' form='buy'>Buy</button>"; 

我有在PHP foreach循環選項標籤的問題。這是一個購物車,在表單中有一個HTML選項標籤。然後將選項標記的值變成一個名爲$ amount的變量。但每當我按下按鈕時,購物車中所有產品的數量都會發生變化。因此,如果我在購物車中有3件商品,並且我想購買第一件商品中的第一件商品,第二件商品和第三件商品中的第二件商品,則所有商品的變量$金額將變爲1。誰能幫我嗎?

回答

0

在for循環中添加一個計數器或其他東西。

$x=0; 
foreach() { 

    //your code here 

    <form action='cart.php' method='POST' id='buy'> 
      Amount: <select name='amount'".$x."> 
        <option value='1'>1</option> 
        <option value='2'>2</option> 
        <option value='3'>3</option> 
       </select>     

     </form> 

     //your code here 

     $x++; 

} 

,而不是創建$ X,你可以嘗試用$行。你只需要添加一些東西到 name='amount'".$variable."'>

如果你會改變你的foreach

foreach($sql_result as $row) 

foreach($sql_result as $k => $row) 

,你可以使用$ķ

`name='amount'".$k."'>` 



//// * UPDATE * ////

在評論sayd問題可能是形式獲取在foreach創建。所以我建議在外面創建它。這是你如何做到的。有一些變化,試圖找到他們。

// output is only $html at the end // 
$html = '<form action="cart.php" method="POST" id="buy">'; 
foreach($sql_result as $row) { 
    $product_id=$row['product_id']; 
    $product_name=$row['product_name']; 
    $price=$row['price']; 
    $picture=$row['picture']; 

    $html.=' 
     <div>$product_name</div> 
     <div>$price</div> 
     <div> 

       Amount: <select name="amount'.$row.'"> 
         <option value="1">1</option> 
         <option value="2">2</option> 
         <option value="3">3</option> 
        </select> 
     </div>'; 
     if (isset($_POST['amount'])) { 
      $amount = $_POST['amount']; 
      $html.= $amount.'<br /><br />'; //here string concatennation in php is with . 
     } 
} 
$html.='<button type="submit" class="btn btn-primary" form="buy">Buy</button>'; 
$html.='</form>'; 

// output happends here 
echo $html; 

// now all of this above you could wrap in a function and then 
// return $html; 
+0

它保持同樣的方式..有可能的方式有一個與形式在循環中選擇標籤,併爲購物車中的每個產品設置變量或變化的內容? – michAmir

+0

它應該改變!也許還有其他的錯誤。你是否可以在你的按鈕周圍包裹你的

,並且在提交和類之間缺少空格type ='submit'class ='btn btn-primary' – caramba

+0

我應該改變一些東西是這部分:if(isset($ _ POST [ 'aantal'])) \t \t \t \t { \t \t \t \t $ aantal = $ _POST [ 'aantal']; \t \t \t \t echo「aantal:」,$ aantal,'

'; \t \t \t \t} \t \t \t ?? – michAmir

0

您正在爲循環內部創建的所有表單分配相同的id(buy),並且每頁應只有一個id。 這樣做:

<form action='cart.php' method='POST' id='[email protected]'> 

,並把按鈕內循環,用正確的ID:

echo "<button type='submit'class='btn btn-primary' form='[email protected]'>Buy</button>"; 
+0

'buy_ $ row @ index'是做什麼的?它給了我下面的通知:注意:在67行上的/home/erik/public_html/winkelwagentje.php中的字符串轉換數組,並且所有產品的產品數量保持不變。 – michAmir

+0

使用你的計數器變量($ x),這裏的關鍵是建立一個唯一的數字來添加購買以創建一個唯一的ID標識符,如:id ='buy_ $ x'(buy_0,buy_1等)。對不起,我在以前的回覆中使用過的結構。這是聰明的。 – jvicab

+0

也許我沒有明白你的意思。我試過你寫的確切的東西,但仍然無法正常工作..對不起,我不知道這是什麼 – michAmir