У меня есть цикл while, который проходит через подписку пользователя, затем через корзины покупок этой подписки и через заказанные продукты этой корзины. У меня есть форма с меткой выбора на каждом продукте, которая позволяет пользователю изменять количество заказанного продукта. Проблема: когда выбор сделан, он работает только для первого продукта. Как получить уникальное имя для каждого продукта в поле ввода имени в форме? И как мне поднять это на стороне сервера? К счастью, большинство решений, с которыми я сталкивался, пропустили, как их найти на стороне сервера.
Я попытался добавить переменную product_id ко входному имени тега select без особой удачи.
Я также попытался объявить счетчик перед циклом while и добавить его к имени тега select. тоже не повезло
// 1. на странице указателя
$Execute2=mysqli_query($conn,$ViewQuery2);
$last_subscription = null;
$last_product_cart = null;
$last_order = null;
while ($row = mysqli_fetch_assoc($Execute2)) {
// display active subscriptions
if ($row['subscription_id'] !== $last_subscription) {
$last_subscription = $row['subscription_id'];
echo "Subscription: ".'<span class="badge badge-light">' .$row['subscription_name'];
}
// display carts
if ($row['product_cart_id'] !== $last_product_cart) {
$last_product_cart = $row['product_cart_id'];
echo "CartNumber: ".($row['product_cart_id'])." ";
}
// display ordered products
if ($row['order_id'] !== $last_order) { $last_order=$row['order_id'];
echo $row['product_name'];
echo '<span>'.($row['qty']); echo '</span>';
?>
<form id="UpdateproductOrderqtyform" method="POST">
<div class="input-group form">
<input name="OrderId" type='hidden' value='<?php echo ($row["order_id"])?>'>
<select name="productOrderQtyUpdate" class="form-control form-control-sm h6 ml-4" style="height:20px;border: 1px solid rgb(204, 204, 204);" onchange="SubmitForm('UpdateproductOrderqtyform');"> <?php
for($x=1;$x<=30;$x++){
echo "<option>$x</option>";
} ?> </select>
</div>
</form>
<?php }
} // endwhile
// 2. скрипт для автоматической отправки на обмен
function SubmitForm(UpdateproductOrderqtyform) {
var oForm = document.getElementById(UpdateDishOrderqtyform);
if (oForm) {
oForm.submit();
}
else {
alert("DEBUG - could not find element " + UpdateproductOrderqtyform);
}
}
// 3. на стороне сервера
if(isset($_POST['productOrderQtyUpdate'])){
global $conn;
$NewQuantity=$_POST["productOrderQtyUpdate"];
$productOrderID=$_POST["OrderId"];
$QueryUpdateQuantity='UPDATE product_orders SET qty="$NewQuantity" WHERE order_id="$productOrderID"'; $ExecuteQueryUpdateQty=mysqli_query($conn,$QueryUpdateQuantity);
}
Когда форма отправлена, все работает нормально, если это первый элемент продукта в массиве. Если бы я передавал переменные, используя метод заголовка, он правильно нацелен на нужные элементы, но я хотел бы использовать тег выбора, поэтому предпочтительнее использовать метод формы