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">×</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;
}
}
在这样的“multi-form”环境下,系统应该能够根据数据值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">×</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>
所以,我能够解决这个问题,解决方案是“id”,所以当您使用 foreach 时,对于每次迭代,它是 re-creating 具有不同输入值的表单,当然!
但问题是 id-field,即使输入值不同,但每次迭代的 id 都相同,因此,即使您单击不同的按钮,即第 2 个或第 3 个,POST 请求会将初始值视为实际值,即第一次迭代,只是因为id相同!
类似于first-come-first-serve的概念。由于 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">×</button>
</form>
<?php
}
?>
因此每次迭代,id 的值都会不同,比如如果 cart_id 是 as:1, 2, 3 那么 id 将是 clearitem1, clearitem2, clearitem3。这样 POST 请求将检索不同的值,因为 ID 不同!
我创建了一个表单,每次它都会在 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">×</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;
}
}
在这样的“multi-form”环境下,系统应该能够根据数据值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">×</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>
所以,我能够解决这个问题,解决方案是“id”,所以当您使用 foreach 时,对于每次迭代,它是 re-creating 具有不同输入值的表单,当然!
但问题是 id-field,即使输入值不同,但每次迭代的 id 都相同,因此,即使您单击不同的按钮,即第 2 个或第 3 个,POST 请求会将初始值视为实际值,即第一次迭代,只是因为id相同!
类似于first-come-first-serve的概念。由于 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">×</button>
</form>
<?php
}
?>
因此每次迭代,id 的值都会不同,比如如果 cart_id 是 as:1, 2, 3 那么 id 将是 clearitem1, clearitem2, clearitem3。这样 POST 请求将检索不同的值,因为 ID 不同!