<tr align="center">
<td>
<input type="checkbox" name="remove[]" value="<?php echo $pro_id;?>">//removes checked items
</td>
<td>
<img src="admin_area/product_images/<?php echo $product_image?>" width="60" height="60"/><br>//displays products image
<?php echo $product_title ?>//displays products title
</td>
<td>
<input type="text" size="4" name="qty" value="<?php echo $_SESSION["qty"]; ?>"><span style="color:red">Required</span>
</td>//textbox where user enters the new quantity
<input type="hidden" name="pro_id" value="<?php echo $pro_id; ?>">
</td>
<?php
$sql = "select * from cart";
$run_query = mysqli_query($con,$sql);
while ($row = mysqli_fetch_array($run_query)) {
$_SESSION["qty"] = $row['qty'];
}
if (isset($_POST['update_cart'])) {
$ip = getIp();
$Updateqty = $_POST['qty'];
//get quantity from the text boxes which are repeated with every product
$pro_id = $_POST['pro_id'];
//gets the id from the hidden field
$update_qty = "UPDATE cart SET qty='$Updateqty' where p_id='$pro_id' and ip_add='$ip'";
$run_qty = mysqli_query($con, $update_qty);
if ($run_qty) {
echo"<script>window.open('cart.php','_self')</script>";
}
}
?>
</tr>
回答
有這裏有一個問題:
$sql = "select * from cart";
$run_query = mysqli_query($con,$sql);
while ($row = mysqli_fetch_array($run_query)) {
$_SESSION["qty"] = $row['qty'];
}
這個while循環將覆蓋$_SESSION["qty"]
每次迭代,所以它總是會設置爲購物車中最後一個物品的數量。
然後,該會話值用於顯示每個項目。
<input type="text" size="4" name="qty" value="<?php echo $_SESSION["qty"]; ?>"><span style="color:red">Required</span>
另外,如果你曾表示你的問題是從具有多個行的表中的一行,並在其中一個包裹的形式對整個表,每個輸入將被提交,既然你有多個值爲qty
和pro_id
,只有最後一個會被使用。這就是讓每個數量都得到更新的外觀。
我會建議這樣的方法來使它工作。這可能不適合你的,是的,因爲我猜對一些名字,但應該足以說明我的心裏有:
<?php
if (isset($_POST['update_cart'])) {
$ip = getIp();
// prepare an update statement
$sql = "UPDATE cart SET qty=? where p_id=? and ip_add=?";
$stmt = mysqli_prepare($con, $sql);
// loop over each quantity and update
foreach ($_POST['qty'] as $pro_id => $qty) {
$stmt->bind_param("iis", $qty, $pro_id, $ip);
$stmt->execute();
}
}
$sql = "select * from cart";
$run_query = mysqli_query($con,$sql);
while ($row = mysqli_fetch_array($run_query)) {
// update the session with the new values
$_SESSION[$row['p_id']]['qty'] = $row['qty'];
}
?>
應該針對每個項目的更新量,但是這取決於由表單提供的qty
值的數組。爲了達到這個目的,你需要使用這樣的數組語法來命名你的輸入:
<form action="" method="post">
<table>
<?php foreach ($products as $product): ?>
<tr>
<td>Other product info</td>
<td>
<input type="text"
name="qty[<?php echo $product['id'] ?>]"
value="<?php echo $_SESSION[$product['id']]['qty']; ?>">
</td>
</tr>
<?php endforeach ?>
</table>
<input type="submit" name="update_cart" value="Update Cart">
</form>
UPDATE查詢不在while循環中,OP在UPDATE中使用不同的變量:' $ Updateqty = $ _ POST ['qty'];'但* * *我確實看到邏輯被搞亂了。 –
@JayBlanchard問題代碼中沒有任何形式,這意味着有一種形式將他們展示的tr的多個實例包裝起來。所以我認爲它看起來像'qty'和'pro_id'有很多不同的實例,並且它們總是會得到最後一個。 –
哦,我剛剛注意到,關閉tr是在PHP代碼之後,所以它可能會重複。 –
- 1. 當我更新變量
- 2. 當更新的數據庫,我不想更新所有列
- 3. Python更新時是否需要更新我的程序?
- 4. 表更新時是否需要更新所有過程?
- 5. PHP表單提交,但只更新最後一行..需要更新所有行
- 6. 更改「x」變量需要更新2個功能,但只更新一個
- 7. (我的)SQL - 批量更新
- 8. 當更新值更新所有表
- 9. MySQL更新行。需要更新大量的唯一行
- 10. 我需要更新我的jQuery代碼
- 11. 我們是否需要更新Orbeon?
- 12. 當我更新一個變量
- 13. 我無法更新變量
- 14. Revolution R說我需要更新到VS2008 SP1,但我有VS2010
- 15. 更新中,只有當它需要更新
- 16. GoogleApiClient失敗的Android Wear API需要更新,但我已經更新
- 17. 更新不需刷新的PHP變量
- 18. DBMS_SQL.Execute和批量更新 - 需要幫助
- 19. 蟒子更新其行(\ r) - 我需要在每次更新
- 20. Codeigniter更新函數更新所有行
- 21. 更新模型時,是自我更新
- 22. 如何在我的購物車頁面中更新我的更新數量?
- 23. 我需要以獨特的方式更新C++中的指針矢量
- 24. sale.order.line數量更新
- 25. 當我的電腦發生更改時更新環境變量
- 26. 當我點擊更新按鈕我有數據要更新,但它會得到清除當我移動到更新頁面在angularjs
- 27. 更新面板的更新頁面完全,但我需要更新剛好本身
- 28. 數量更改時更新總變量
- 29. 當更新我的實體時,我的舊實體更新太
- 30. 需要更新只有一個元組,但這是更新整個列在表
你的代碼沒有出現任何問題。你確定'$ pro_id'和'$ ip'設置正確嗎? –
[Little Bobby](http://bobby-tables.com/)說*** [你的腳本存在SQL注入攻擊風險。](http://stackoverflow.com/questions/60174/how-can- ***)瞭解[MySQLi](http://php.net/manual)[準備](http://en.wikipedia.org/wiki/Prepared_statement)聲明/en/mysqli.quickstart.prepared-statements.php)。即使[轉義字符串](http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string)是不安全的! –
你必須在使用會話的所有頁面的頂部有'session_start();'是否到位? –