私は解決しようとして何時間も費やしてきたが、運がなかったしつこい問題を抱えています。データベースからアイテムを削除するために使用するフォームがあります。ここにフォームがあります: 編集:コードをもう少し合理的なものに更新しましたが、まだ問題があります。
<div id="tabs-3">
<p>Select Replenish for Books that will be for sale again.<br/>Select Remove for Books that will NOT be for sale again.</p>
<br/>
<table>
<tr>
<td><input type="radio" name="returnType" value="replenish" checked>Replenish<br></td>
<td><input type="radio" name="returnType" value="remove">Remove<br></td>
</tr>
<tr>
<td> </th>
<td> </th>
</tr>
<tr>
<th>SKU</th>
<th>Order ID</th>
<th>Quantity</th>
<th>Location</th>
</tr>
<?php $numberofrow = 10;?>
<!--create the for loop-->
<?php for($counter = 1;$counter<=$numberofrow;$counter++){ ?>
<!--create 1 row for repeating-->
<tr>
<td><input type="text" id="sku<?php echo $counter;?>"/></td>
<td><input type="text" id="order<?php echo $counter;?>"/></td>
<td><input type="text" id="reEnterQty<?php echo $counter;?>"/></td>
<td>
<select id="reEnterLocation<?php echo $counter;?>" name="reEnterLocation" class="Location">
<option value="">--Select Location--</option>
<?php
$query = "SELECT location_id, location FROM location ORDER BY location";
$result = $conn->query($query);
while ($row = $result->fetch_assoc()) {
echo '<option value="' . $row['location_id'] . '" >' . $row['location'] . '</option>';
}
?>
</select>
</td>
</tr>
<?php }?>
</table>
<br/>
<br/>
<input type="button" id="reEnterSKU" value="Process Returns" /> <br/>
<div id="returnsNotice"></div>
</div>
これを処理する js は次のとおりです。
$("#reEnterSKU").on('click', function() {
if($("input[name=returnType]:checked").val() == "remove"){ //executes when Remove radio button is checked
var arr = {};
var counter = 0;
for(var x=1;x<11;x++)
{
if($("#sku"+x).val() != "" && $("#order"+x).val() != ""){
arr[x] ={sku: $("#sku"+x).val(), order: $("#order"+x).val(), quantity: $("#reEnterQty"+x).val()};
}
}
$.ajax({
type: "POST",
async:false,
url: "invReturnsRemove.php",
dataType: "json",
data: {data: JSON.stringify(arr)},//({sku: $("#sku"+x).val(), order: $("#order"+x).val(), quantity: quantity}),
success: function(data){
}
});
$("#returnsNotice").html("<h3>" + x + " return(s) removed.</h3>");
invReturnsRemove.php は次のとおりです。
<?php
require_once ('../db.php');
$conn = db_connect();
$n=0;
$data =json_decode($_POST['data'], true);
foreach($data as $value){
$conn->query("UPDATE order_sold SET quantity = (quantity - {$data[$n]['quantity']}) WHERE sku = {$data[$n]['sku']} AND order_id = {$data[$n]['order']}");
$n++;}
$conn->close();
?>
問題は、実行しようとすると、削除するレコードが 1 つだけであっても、何百回も実行されることです。私が間違っている可能性があることと、それを修正する方法はありますか?