Salve a tutti, sono un novello della programmazione web e l'altro giorno sono incappato in un problema che non riesco a risolvere. Spero che ci sia qualche anima pia disposta ad aiutarmi.
Allora, per farla breve, ho un DB Access con i seguenti campi:
ID, Nome, Quantità e Costo.
Devo aggiornare il campo Quantità in base all'interazione con l'utente... come se si trattasse di un carrello di un sito di ecommerce molto molto semplice.
nella prima pagina ho inserito il form per permettere all'utente di inserire la qtà e l'ID del prodotto che intende acquistare; mentre la seconda pagina interagisce con il DB o fornisce gli eventuali messaggi d'errore....
PAG 1 :
PAG 2:codice:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <% @ language="JScript"%> <% var con; var conString; con = Server.CreateObject("ADODB.Connection"); conString = "Provider=Microsoft.Jet.OLEDB.4.0; " + "Data Source=" +Server.MapPath("auto.mdb"); con.Open(conString); %> <title>Esercizio 9.1 - Pagina A </title> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> </head> <body> <h1> Pagina A </h1> <% var rst; var sSQLString; rst = Server.CreateObject("ADODB.Recordset"); sSQLString = " Select * from auto_nuove "; rst = con.Execute(sSQLString); %> <table border=1> <tr><th>ID</th><th>Nome</th><th>Costo</th></tr> <% while (!rst.EOF) { Response.write("<tr><td>"+ rst("ID") + "</td> <td>"+ rst("nome") + "</td> <td>"+ rst("costo")+ "</td></tr>"); rst.MoveNext( ); } rst.Close(); con.Close(); rst = null; con = null; %> </table> <h2> Form richiesta quantità </h2> <form name="spesa" action="lab91B.asp" method="GET"> <table> <tr> <td> Identificativo</td> <td><input type="text" name="id" value=""></td> </tr> <tr> <td> Quantità</td> <td><input type="text" name="quantita" value=""></td> </tr> </table> <input type="submit" value="Invio"></p> </form> </body> </html>
codice:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <%@language="JScript"%> <% var con; var conString; con = Server.CreateObject("ADODB.Connection"); con.Mode = adModeReadWrite; conString = "Provider=Microsoft.Jet.OLEDB.4.0; " + "Data Source=" +Server.MapPath("auto.mdb"); con.Open(conString); %> <title>Esercizio 9.1 - Pagina B </title> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> </head> <body> <h1>Pagina B</h1> <% var rst; var quantitaProdotto; var costoComplessivo; var trovato = 0; if (Request.ServerVariables("REQUEST_METHOD") == "GET") { idProdotto=parseInt(Request.QueryString("id")) quantitaProdotto=parseInt(Request.QueryString("quantita")); } else if (Request.ServerVariables("REQUEST_METHOD") == "POST") { quantitaProdotto=parseInt(Request.Form("quantita")); idProdotto=parseInt(Request.Form("id")); } if (isNaN(idProdotto)) { Response.write(" Formato Id prodotto non valido</p>"); } else { if (isNaN(quantitaProdotto) || quantitaProdotto < 0) { Response.write(" Formato quantita prodotto non valido</p>"); } else { rst = Server.CreateObject("ADODB.Recordset"); rst.Open("auto_nuove",conString,adOpenDynamic,adLockPessimistic); while (!rst.EOF) { if(rst("id") == idProdotto) { var trovato = 1; if (quantitaProdotto > parseInt(rst("quantita"))) { Response.write(" Quantita richiesta non disponibile</p>"); } else { Response.write(" Costo complessivo: " + rst("costo")*quantitaProdotto + "</p>"); rst("quantita")=parseInt(rst("quantita"))-quantitaProdotto; rst.Update(); } } rst.MoveNext( ); } if(trovato == 0) Response.write(" Id non esistente</p>"); rst.Close( ); rst = null; } } %> <h2> Contenuto del database aggiornato</h2> <% sSQLString = " Select * from auto_nuove "; rst = con.Execute(sSQLString); %> <table border=1> <tr><th>ID</th><th>Nome</th><th>Quantità</th></tr> <% while (!rst.EOF) { Response.write("<tr><td>"+ rst("ID") + "</td> <td>"+ rst("nome") + "</td> <td>"+ rst("quantita")+ "</td></tr>"); rst.MoveNext( ); } rst.Close(); con.Close(); rst = null; con = null; %> </table> Clicca qui per tornare alla pagina precedente</p> </body> </html>
Ora, il problema si verifica nella visualizzazione e non nell'aggiornamento dati:
poniamo che del prodotto con ID 1 siano presenti 50 esemplari.
L'utente, tramite form, seleziona ID 1 e 5 (qtà) esprimendo così la volontà di volere comprare 5 pezzi del prodotto con ID 1... Compare il messaggio del costo complessivo visualizzato in modo corretto, ma la tabella che mostra i dati aggiornati del DB indica ancora che ci sono 50 pezzi di ID1... (e non 45, come mi aspetterei).
Poniamo il fatto che l'utente ripeta l'operazione, tornando alla pagina del form tramite il link, stavolta selezionando ID 1 ma qtà 0,
ecco cosa succede: questa volta la tabella mostra ID 1 e qtà 45...![]()
E' come se le due pagine funzionassero a rilento, ogni volta in ritardo di un passaggio nella visualizzazione...
Non riesco proprio a capire dove sbaglio...
qualcuno può darmi una mano?
Grazie dell'attenzione

Rispondi quotando
