
Originariamente inviata da
Punix
alhazred e darbula vi ringrazio inanzitutto per la pazienza...
per alhazred, allora adesso facendo questo:
il risultato è questo:
codice:
DEBUG 'sql': Ho diminuito la quantità di bombole rimaste, ne ho tolte 1
DEBUG 'sql2': Ho incrementato la quantità di bombole vendute, ne ho aggiunte 1
DEBUG 'sql4': Ho aumentato la quantità di bombole NON scontrinate, ne ho aggiunte 1
DEBUG 'sql7': Ho recuperato la quantità di bombole NON fatturate, ne ho trovate
Rollback eseguito, il db non ha subito variazioni
Errore quantita_vendita (1) non può essere maggiore di qua_n_fatturate ()
1) C'è un errore su una riga nella sezione dove c'è la sql7, la riga dice
$qua_n_fatturate = $row5['Quantita_n_fatturate'];
ma dovrebbe essere
$qua_n_fatturate = $row7['Quantita_n_fatturate'];
2) Ciò che hai postato mi fa capire che hai impostato il report degli errori ad un livello che non mostra gli warning, che ti avrebbero fatto capire questo problema.
Aggiungi come prima istruzione dello script
error_reporting(E_ALL);
3) Cancella la riga di codice:
mysqli_free_result($result4);
l'avevo dimenticata, le query update non restituiscono un recordset che va liberato, ritornano semplicemente true o false
3) Non sapendo cosa contenesse il db prima di eseguire questo tentativo di vendita non capisco se il rollback abbia funzionato non permettendo modifiche o se invece le quantità siano cambiate.
Nel caso il rollback non abbia fatto il suo lavoro, ricorda che la tabella deve usare il motore innodb, perché myisam non supporta le transazioni.
4) Ricordati anche di cambiare il db dando ai campi il giusto tipo secondo ciò che devono contenere, è una cosa importante.
Ti propongo qui sotto il codice per la tabella corretta
codice:
CREATE TABLE `bombole` (
`chili_bombola` TINYINT UNSIGNED NOT NULL PRIMARY KEY,
`Descrizione` varchar(500) NOT NULL,
-- se cambi il sistema di salvataggio dell'immagine
-- altrimenti rimetti il campo blob, ma te lo sconsiglio
`img` varchar(200) NOT NULL,
-- se non supera 999,99 euro, altrimenti 6,2
`Prezzo_acquisto` DECIMAL(5,2) UNSIGNED NOT NULL DEFAULT 0,
-- come sopra
`Prezzo_unitario` DECIMAL(5,2) UNSIGNED NOT NULL DEFAULT 0,
-- INT arriva a 16.777.215 ma vedi tu secondo le tue esigenze
`Quantita_fatturate` INT UNSIGNED NOT NULL DEFAULT 0,
`Quantita_n_fatturate` INT UNSIGNED NOT NULL DEFAULT 0,
`Quantita_rimaste` INT UNSIGNED NOT NULL DEFAULT 0,
`Quantita_vendute` INT UNSIGNED NOT NULL DEFAULT 0,
`scontrinato` INT UNSIGNED NOT NULL DEFAULT 0,
`non_scontrinato` INT UNSIGNED NOT NULL DEFAULT 0,
`v_domicilio` INT UNSIGNED NOT NULL DEFAULT 0,
`v_negozio` INT UNSIGNED NOT NULL DEFAULT 0
) ENGINE=InnoDB DEFAULT CHARSET=utf8_unicode_ci;