Twój problem dotyczy nazw pól w formularzu HTML:
<input type="number" name="quantity" value="<?php echo $row['quantity']; ?>">
<input type="hidden" name="item_id" value="<? echo $row['item_id']; ?>">
Myślę, że chciałeś nazwać je quantity[]
i item_id[]
zamiast tego, więc będą się pojawiać jako tablice w twoim $_POST
później zmienna, teraz nadpisują się nawzajem, tworząc $_POST['item_id']
zawierać tylko ostatni identyfikator w bazie danych.