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.