Ciao. Per prima cosa:
Codice PHP:
$sql_v = "UPDATE products SET Quantita_rimaste={$quantita_r}, Quantita_vendute={$quantita_v} WHERE id_product IN (";
foreach($_SESSION['cart'] as $id => $value) {
$sql_v.=$row['id_product'].",";
}
Perchè fai ciò? non ha senso. fai un ciclo inutile e metti una sequenza sempre uguale di $row['id_product'];
semplifica
Codice PHP:
$sql_v = "UPDATE products SET Quantita_rimaste={$quantita_r}, Quantita_vendute={$quantita_v}
WHERE id_product = {$row['id_product']}";
Per le quantità negative: Vuoi bloccare tutto se un solo prodotto finisce sotto scorta? In questo caso sei un po' legato dal fatto che mostri il carrello e nella stessa pagina aggiorni le quantità
In questo caso ti conviene separare le due cose:
1. Prima fai il ciclo per mostrare il carrello e allo stesso tempo verifichi se ci sono tutte le quantità
2. dopo, SE le quantità sono presenti rifai nuovamente il while sul result della query (devi resettare il puntatore con mysqli_data_seek(0))
e fai gli update. ALTRIMENTI stampi l'avviso
Edit: O meglio fai il contrario. Prima fai l'update (usa le transazioni) e se non trovi negativi mostri il carello con i valori aggiornati altrimenti il messaggio ed i "vecchi" valori