Il tuo problema è con i nomi dei campi nel tuo modulo HTML:
<input type="number" name="quantity" value="<?php echo $row['quantity']; ?>">
<input type="hidden" name="item_id" value="<? echo $row['item_id']; ?>">
Penso che tu volessi chiamarli quantity[]
e item_id[]
invece, così saranno e su come array nel tuo $_POST
variabile in seguito, ora si sovrascrivono a vicenda, creando $_POST['item_id']
contengono solo l'ultimo ID nel database.