簡體   English   中英

foreach 中的表單操作僅適用於 php 的第一個值

[英]form action inside foreach works only for the first value of php

我創建了一個表單,每次它都會在 foreach 循環期間存儲不同的 id

 <?php foreach ($res as $r) { ?> <form id="clearitem" action="clearitem.php" method="POST" enctype="multipart/form-data"> <input type="text" name="clearitem" value="<?php echo $r['cart_id'];?>"> <button type="Submit">&times;</button> </form> <?php } ?>

並且數據的檢索工作完美,它一個接一個地向我顯示每個 id,但是當我單擊按鈕(在這種情況下是清除項目)時,它僅適用於第一個值,即如果我單擊按鈕第二個或第三個值,它只刪除第一個,而不是與按鈕對應的那個。

如果有人可以提供,請幫忙,為什么會發生這種情況以及適當的解決方案!

clearitem.php

 if(isset($_POST['clearitem'])){ $clear=$_POST['clearitem']; $sql = "DELETE FROM cart WHERE id=".$clear; if ($conn->query($sql) === TRUE) { echo "Record deleted successfully of id".$clear; } else { echo "Error deleting record: " . $conn->error; } }

所以,我能夠解決這個問題,解決方案是“id”,所以當你使用 foreach 時,對於每次迭代,它當然是用不同的輸入值重新創建表單!

但問題是 id 字段,即使輸入值不同,但每次迭代的 id 都是相同的,因此,即使您單擊不同的按鈕,即第二個或第三個,POST 請求也會將初始值視為實際值,即第一次迭代,只是因為 id 相同!

這類似於先到先得的概念。 由於 POST 請求獲取與 id 對應的第一個元素的值,因此這將是該特定 id 的最終值,並且無論您迭代多少次,如果您使用相同的 id,該值將不會更新。

可能的解決方法是在每次不同的迭代中使用不同的 id,這可以通過將 foreach 值放在 id 中來實現。

 <?php foreach ($res as $r) { ?> <form id="clearitem<?php echo $r['cart_id'];?>" action="clearitem.php" method="POST" enctype="multipart/form-data"> <input type="text" name="clearitem" value="<?php echo $r['cart_id'];?>"> <button type="Submit">&times;</button> </form> <?php } ?>

這樣,對於每次迭代,id 的值都會不同,例如如果 cart_id 為:1、2、3,那么 id 將為 clearitem1、clearitem2、clearitem3。 這樣,POST 請求將檢索不同的值,因為 id 不同!

在這樣的“多表單”環境下,系統應該能夠根據in each form中的數據值正確處理提交的數據。

因此,下面的代碼應該可以工作(經過測試):

<?php

$conn = new mysqli("localhost","dbuser","dbpassword","dbname");

$sql = "SELECT * FROM cart";
$stmt = $conn->prepare($sql); 
$stmt->execute();
$res = $stmt->get_result();

foreach ($res as $r) {
?>

<form id="clearitem" action="clearitem.php" method="POST" enctype="multipart/form-data">
<input type="text" name="clearitem" value="<?php echo $r['cart_id'];?>">
<button type="Submit">&times;</button>
</form>
<?php } ?>

以下是clearitem.php代碼

<?php

if (isset($_POST["clearitem"])) {

$conn = new mysqli("localhost","dbuser","dbpassword","dbname");
$sql = "delete FROM cart where cart_id=?" ;
$stmt = $conn->prepare($sql); 

$id=$_POST["clearitem"]; 
$stmt->bind_param("i", $id);
$stmt->execute();
}
?>

<script>
    alert("Done !");
    if ('referrer' in document) {
        window.location = document.referrer;
        /* OR */
        //location.replace(document.referrer);
    } else {
        window.history.back();
    }
</script>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM