Inviare dati al DB..in una sola mossa.

Ciao.

Sto continuando a sviluppare il progetto

di cui parlavo in questa discussione:

http://www.phpnews.it/forum/index.php?topic=1660.0

Adesso (visto che ho sospeso l'implementazione con ajax)

è il momento di inserire i dati definitivi della fattura nel db.

Fino a questo momento dalla pagina html inserisco

i dati dei prodotti e l'invio alla pagina in php (fatt1.php)

qui viene aggiunta una riga nel corpo della fattura per ogni prodotto acquistato

e in caso di errore il singolo record (codice, descrizione, prezzo u., iva, imponibile)

può essere opportunamente cancellato  (visualizzo un link\tasto "Canc" per ogni riga).

I dati inviati, momentaneamente vengono inseriti in una tabella mysql

che ho chiamato "carrello" che alla fine, ultimata la compilazione

della fattura, viene azzerata con il pulsante reset che ho posto in basso

e che richiama il comando:

   mysql_query("TRUNCATE TABLE carrello");

OK!

Fin qui QUASI tutto funziona a dovere.

Dovrei ora creare una tabella\e che contenga i dati definitivi della fattura

che possono essere richiamati in un secondo momento tramite delle

funzioni di ricerca relativamente al periodo di acquisto o al cliente.

Mi hanno suggerito di creare prima un tabella "fatture" sul quale caricare

i dati principali (id, totale, id_cliente, data)

e poi una tabella "acquisti"con tutti i prodotti acquistati in

modo tale che ogni record della tabella "acquisti" riporti l'id_fattura

di appartenenza.

Penso di essere stato chiaro, o no?!??

Vorrei sapere da voi se la logica del funzionamento di cui sopra è corretta.

In pratica vorrei capire se è possibile fare tutto in una sola volta creando

un tasto "conferma" che crei il record della fattura nella tabella "fatture"

e contemporaneamente inserisca i dati dei prodotti nella tabella "acquisti" con l'id fattura

(senza prima la creazione dell'id_fattura non è possibile, CREDO, associare i record

della tabella "acquisti" ad essa..magari poi mi sbaglio.

Forse questa cosa non è possibile e avrei un sistema alternativo.

creare un tasto "conferma" che crei il record della fattura e

relativo id naturalmente e poi un tasto "stampa" (perchè la fattura dovrà

pure essere stampata) che oltre a stampare la fattura richiami anche la funzione che carichi

i dati dei prodotti nella tabella "acquisti", questa volta avendo a disposizione

l'id fattura. Considero però il primo metodo più professionale

se è possibile realizzarlo (ah!, a proposito l'unico tasto dovrebbe anche resettare

il "carrello" ovviamente).

Fatevi sotto con i suggerimenti allora, vediamo chi è il più bravo..scherzo!

Grazie

inviato 9 anni fa
frankphp
X 0 X

Allora, è corretto il primo approccio, ovvero quello dell'inserimento fattura e ordini in un colpo solo. Per essere sicuro che tutte le operazioni vengano eseguite correttamente devi usare le transazioni (fai una ricerca).

Rimango un po' perplesso dalla "TRUNCATE TABLE carrello". Se due persone lavorano su PC diversi con il tuo programma, ed uno esegue quella query, cosa succede all'altro?

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

Allora, è corretto il primo approccio, ovvero quello dell'inserimento fattura e ordini in un colpo solo. Per essere sicuro che tutte le operazioni vengano eseguite correttamente devi usare le transazioni (fai una ricerca).

Rimango un po' perplesso dalla "TRUNCATE TABLE carrello". Se due persone lavorano su PC diversi con il tuo programma, ed uno esegue quella query, cosa succede all'altro?

Al posto di truncate cosa suggeriresti tu?

Un ciclo che cancelli solo gli articoli della fattura corrente? Fammi un esempio, per piacere.

In ogni caso,

Il mio progetto non ha nessuna finalità per uso professionale.

Ho visto un giorno su un pc di un ufficio un programma che lavorava in modo simile

e mi sono chiesto se era possibile riprodurlo in php, e adesso sto curando lo sviluppo

di queste pagine come "palestra", cioè per tenermi allenato in php (visto che il più delle volte lo trascuro

per tanto di quel tempo che ogni volta che ho intenzione di creare qualcosina devo ricominciare

a ristudiarmelo dalle basi visto che dimentico quasi tutto...eh si, purtroppo non ho una grande memoria); se poi alla fine ne vien fuori qualcosa di interessante che possa servire a qualcuno, incluso me stesso, ben venga.

Uso solo io questo programma e per il momento sempre in locale.

Per le transazioni non so nemmeno che cosa sono. Potresti essere più preciso?

Resta inteso che nel frattempo provo a fare delle ricerche.

grazie e ciao

risposto 9 anni fa
frankphp
X 0 X

Invece di cancellare la tabella devi solo cancellare i record che non servono più.

Se il progetto non è "serio" allora lascia perdere le transazioni.

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

Invece di cancellare la tabella devi solo cancellare i record che non servono più.

Se il progetto non è "serio" allora lascia perdere le transazioni.

 :bye:

Beh, perchè non provare se sono efficaci?

Esiste, allora, un metodo alternativo per ottenere quello a cui mi riferivo?

grazie

risposto 9 anni fa
frankphp
X 0 X

le transazioni sono una caratteristica dei database relazionali. Attraverso le transazioni puoi effettuare una sequenza di query. Se ritieni che le query effettuate abbiano dato i risultati che ti attendevi allora renderai definitivo il loro effetto sulla base di dati attraverso una operazzione chiamata "commit". Se invece qualcosa è andato storto, ad esempio lo script è terminato prematuramente prima di aver eseguito tutte le query, allora farai (o verrà esequito automaticamente, un "annulla" generale, chiamato "rollback".

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

le transazioni sono una caratteristica dei database relazionali. Attraverso le transazioni puoi effettuare una sequenza di query. Se ritieni che le query effettuate abbiano dato i risultati che ti attendevi allora renderai definitivo il loro effetto sulla base di dati attraverso una operazzione chiamata "commit". Se invece qualcosa è andato storto, ad esempio lo script è terminato prematuramente prima di aver eseguito tutte le query, allora farai (o verrà esequito automaticamente, un "annulla" generale, chiamato "rollback".

 :bye:

ciao, allora

tradotto in $ (dollaroni)...ah ah questa mi è piaciuta :2funny:

leggendo l'articolo su questo stesso sito:

 L'estensione mysqli - III     

di Gianni Tomasicchio   

dovrei fare una cosa del genere:

# // provo a connettermi al server MySQL  
# $mysqli = new mysqli('localhost', 'root', 'password_db', 'test');  
#   
# // Avvio la transazione  
# $mysqli->query('START TRANSACTION');  
#   
# // eseguo alcune query  
# $mysqli->query("INSERT INTO fatture VALUES (NULL, 'id_cliente', 'totale, data')");  
# $mysqli->query("INSERT INTO acquisti //che ci metto qua per relazionarli?
#   
# // chiudo la transazione con esito positivo  
# $mysqli->query('COMMIT'); 

Va bene? Quale codice inserisco nella riga sopra, ammesso che sia esatto ed

efficace il procedimento?

Grazie ancora.

ps: ah proposito, perchè usare $mysqli al posto di $mysql (perchè la i)?

risposto 9 anni fa
frankphp
X 0 X

Quel codice funziona solo se usi le funzioni dell'estensione mysqli. Se leggi la prima parte di quella serie di articoli troverai le risposte ai tuoi dubbi.

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

Quel codice funziona solo se usi le funzioni dell'estensione mysqli. Se leggi la prima parte di quella serie di articoli troverai le risposte ai tuoi dubbi.

 :bye:

0

scusa ancora Gianni

ma per questa riga:

$mysqli->query("INSERT INTO fatture VALUES (NULL, 'id_cliente', 'totale, data')");

ottengo un messaggio di errore sul browser

dovrebbe essere (se ricordo bene)undefined function o qualcosa del genere.

Sarà forse perchè è necessario un aversione mysql + recente?

io ho la 4.0....e qualcosa.

Ciao e buone feste

risposto 9 anni fa
frankphp
X 0 X

Se si tratta di un errore di tipo "undefined function" allora non hai caricato l'estensione mysqli nel php.ini

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

Se si tratta di un errore di tipo "undefined function" allora non hai caricato l'estensione mysqli nel php.ini

 :bye:

azz sei ancora qui!

Il moderatore di forum + efficiente che conosca. Bravo.

Uso easyphp, forse l'estensione la carico da li. Ricordo che per attivare

le librerie GD spuntai una voce in un menù; magari ci sarà la voce anche

per mysqli...spero. In ogni caso ti farò sapere.

Ciao e grazie ;)

risposto 9 anni fa
frankphp
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda