Я бы изменил ваш пересмотренный код для непосредственного использования $ _POST, например,
for($i = 1;$i <= $_POST['num_cart_items'] ;$i++){
$item_number= intval($_POST['item_number' . $i]);
$item_quantity= intval($_POST['quantity' . $i]);
printf("DEBUG: item %d item:%d quantity:%d<br>", $i, $item_number, $item_quantity);
$new_amount = $row['stock_quantity'] - $item_quantity;
$db->update1_by_match('cart_products','stock_quantity',$new_amount,'id', $item_number);
}
Вывод диагностики должен помочь вам уточнить, к чему все идет.
РАННИЕ ВОПРОСЫ - примечания ниже относятся к вопросу до того, как он был полностью пересмотрен.
Что вам действительно нужно, так это массив, а не попытка использования переменных переменных
$item_numbers=array(24, 16);
foreach ($item_numbers as $item_number) {
$result = $db->get_cols_by_match('cart_products','stock_quantity','id', $item_number);
}
Чтобы сделать это так, как вы, что-то подобное может прояснить это
$item_number1='24';
$item_number2='16';
$num_cart_items = 2
for($i = 1;$i <= $num_cart_items ;$i++){
$varname='item_number' . $i;
printf("DEBUG: %s = %s<br>", $varname, $$varname);
$result = $db->get_cols_by_match('cart_products','stock_quantity','id', $$varname);
}
$$ varname является примером переменной переменной , но в вашем случае массив объявляет ваше намерение гораздо более понятным способом.