Problema con asp e sql...

metalgemini

Utente Attivo
14 Apr 2004
745
0
0
Buongiorno a tutti.Io vorrei realizzare il carrello elettronico.Ho gia fatto tutto...mi manca il salvataggio dei dati nel db.
Ho una pagina chiamata addcarrel.asp dove, recuperando i dati relativi a:
"nomeprodotto" , "descrizione" , "prezzo" , "quantità" , "totale"

vorrei poi inserirli nella tabella CARRELLO del database nella sessione stabilita quando l'utente ha effettuato l'accesso.

Siccome non sono una cima in asp vorrei una manina :rolleyes:

posto il codice (omettendo connessioni varie...)nella speranza ke qualcuno mi aiuti:

Dim Sr
Set Sr = Server.CreateObject("ADODB.Recordset")

sql = "INSERT INTO carrello(nomeprodotto,descrizione,prezzo,quantita,totale) VALUES("'&request.querystring("nomeprodotto")&"','"&request.querystring("descrizione")&"','"&request.querystring("prezzo")&"','"&request.querystring("quantita")&"','"&request.querystring("totale")&"') where " & session("username") & " = ' " & session("username") & "'"
Sr.open sql, Conn, 1, 3

response.write"Hai aggiunto il prodotto al carrello..."

mi dà queto errore:
Microsoft JET Database Engine error '80040e14'

Syntax error in INSERT INTO statement.

/addcarrel.asp, line 174

ma devo metterci anche
Sr.AddNew()
Sr("nomeprodotto") = request.querystring("nomeprodotto")
ecc ecc...?

Vi ringrazio ciao a tutti
 

lukeonweb

Utente Attivo
5 Mar 2003
5.175
13
38
45
Napoli
www.lucaruggiero.it
sql = "INSERT INTO carrello (nomeprodotto, descrizione, prezzo, quantita, totale) VALUES ('" & request.querystring("nomeprodotto") & "', '" & request.querystring("descrizione") & "', '" &request.querystring("prezzo") & "', '" &request.querystring("quantita") & "', '" & request.querystring("totale") & "')"

c'era qualche errore, adesso dovrebbe andare

comunque non puoi usare il where in una insert, devi prevedere un campo di join

leggi la guida a sql del sito
 

metalgemini

Utente Attivo
14 Apr 2004
745
0
0
Sono già qui

Sono già tornato :D
Ho dato un'occhiata alla guida sql ma non ho trovato quello che cercavo, forse perchè trattasi di una cosa specifica della mia esigenza...io avrei bisogno delle righe di codice x salvare i dati nel carrello ma nella sessione dell'utente, x evitare ke un utente si trovi nel carrello i prodotti dell'altro utente...
Can you help me? :confused:

Ciao e grazie :byebye:
 

lukeonweb

Utente Attivo
5 Mar 2003
5.175
13
38
45
Napoli
www.lucaruggiero.it
Diciamo che nella guida a SQL che ho scritto non ho previsto un capitolo dal titolo

Soluzione al problema di metalgemini

:)

volevo farti capire che vuol dire fare delle join!

Nella tabella dei prodotti devi prevedere un campo tipo id_utente che rappresenta l'id della tabella degli utenti.

Ti faccio un esempio: pre estrarre tutti gli acquisti dell'utente lukeonweb (che ha id = 1 ad esempio) scriverai una query del genere

SELECT * FROM utenti, acquisti WHERE utenti.id = acquisti.id_utente AND utenti.username = 'lukeonweb'

oppure

... AND utenti.id = 1

o ancora

... AND acquisti.id_utente = 1

è sempre la stessa cosa!

Per inserire un acquisto ed associarlo ad un utente scriverai

INSERT INTO acquisti (campo1, campo2, id_utente) VALUES ('valore1', 'valore2', 1)

Chiaro il concetto?

Ciao ;)

PS: se vuoi "teorizzarci" un po su leggi la lezione che parla di relazioni e join, l'ho scritta anche da un punto di vista abbastanza analitico!
 

metalgemini

Utente Attivo
14 Apr 2004
745
0
0
:)

Ah che peccato...io avevo cercato proprio quello :D
Quindi vuoi dire ke non serve usare una sessione per non creare scompiglio fra i vari utenti nel database?
Basta salvare i dati e poi cancellarli una volta effettuato l'ordine?
 

lukeonweb

Utente Attivo
5 Mar 2003
5.175
13
38
45
Napoli
www.lucaruggiero.it
Non mi ero posto questo problema, mi pareva che la domanda fosse diversa :)

Comunque si, quello che dici lo condivido (alludo alla domanda del tuo ultimo post ovviamente) ma più che cancellare gli ordini ti consiglio di disabilitarli, magari usando un campo booleano (Si/No su Access) e settarlo su true o su false a seconda che l'acquisto sia "cancellato" o meno, o addirittura puoi usare un campo numerico per avere diversi potenziali stati, ad esempio:

0 = in corso
1 = pagato
2 = cancellato
3 = restituzione merci (con bestemmie allegate)
4 = non mi viene in mente...

Può tornare utile avere uno storico e tracciare un trand delle vendite e quant'altro. Ricorda sempre che oltre all'applicazione, tecnicamente parlando, devi abbinarci sempre anche del marketing.

:byebye:
 

metalgemini

Utente Attivo
14 Apr 2004
745
0
0
Abbiate pazienza...

Abbi pazienza ti prego...non vorrei mettere tanta carne al fuoco dato ke sono alle prime armi.
Ho deciso di aggiungere nella tabella "CARRELLO" un campo di tipo numerico chiamato "IDusername" dove, ovviamente, una volta aggiunto il prodotto viene salvato l'id dell'utente
[che è = a session("idusername")...la sessione la creo una volta effettuato il login.]
Mi pare ke il ragionamento sia giusto ma mi sorge un problema sintattico quando voglio visualizzare i prodotti nella pagina "carrello.asp".Ecco la query:

Query = "Select * from CARRELLO where IDusername =" &session("idusername")& "

Di sicuro faccio del casino con gli apici.
Ciao e grazie
 

Neo

Utente Attivo
7 Mar 2005
35
0
0
50
Camaiore (LU)
www.pepproject.it
x luke

Quello che gli ho detto in privato non era una soluzione tecnica al problema, gli ho offerto un carrello funzionante compreso di pagine Asp per la gestione sia dei prodotti che del carrello che dell'amministrazione; un lavoro che ho fatto io (esattamente www.gentedelforte.it) Gliel'avrei 'regalato' in cambio di pubblicità (o un banner sul sul suo lavoro o la possibilità di essere messo in contatto con persone che avrebbero potuto offrirmi un lavoro, visto che io lavoro a progetto), è proprio perchè non parlavo di una soluzione tecnica specifica che mi è sembrato più carino parlarne in privato piuttosto che nel forum!

Ciao a tutti. :fonzie:
 

metalgemini

Utente Attivo
14 Apr 2004
745
0
0
:)

Ti ringrazio infinitamente ma non mi piacciono le cose confezionate...preferisco imparare.Cmq se lavori a progetto mi sa ke il motivo è xkè di lavoro non ce ne sia tanto in giro...è triste ma è così :)
Cmq dato ke ormai ho aperto questo stressante topic :)
ho un altro problemino...al limite se l'amministratre non lo ritiene adatto a questa discussione lo puo cambiare di posto...praticamene ho una moltiplicazione dove il risultato mi viene intero (praticamente mi arrotonda).
Come devo fare per evitare ciò?Devo dichiarare le variabili in un determinato modo xkè di default asp le interpreta come numeri interi?
Grazie tante e scusate se sono stressante :)
 

Neo

Utente Attivo
7 Mar 2005
35
0
0
50
Camaiore (LU)
www.pepproject.it
Ciao metal, non ti preoccupare, non mi devi certo delle scuse! La mia era solo una proposta! Effettivamente anch'io preferisco imparare sulle mie spalle piuttosto che prendere pacchetti precotti, anche se spesso 'smanettando' sui pacchetti si possono imparare diverse cose! Comunque, riguardo alle variabili, con che tipo di dati le carichi? Se i valori li prendi dal db, in che modo sono inseriti nei records? Ed infine, come tratti le variabili per le operazioni? Queste tre domande perché VB non tratta spontaneamente i numeri come interi, se ti aspetti risultati decimali dopo un'operazione ed ottieni risultati interi vuol dire o che i numeri vengono 'troncati' in fase di registrazione, e quindi quando li recuperi ottieni interi; vengono troncati al momento in cui li carichi in variabili, oppure dopo l'esecuzione delle operazioni.
In tutti i casi, anche se molti puristi mi daranno torto, non ti consiglio di dichiarare preventivamente le variabili in VB! VisualBasic non da errori quando incontra un assegnazione ad una variabile non dichiarata, e non dichiarandola, anzi, viene automaticamente settata al tipo più idoneo per i dati che gli vengono imposti! Secondo me, VB, è importante dichiarare variabili solo è necessario per fare un controllo postumo sui tipi di dati oppure se sono Array (in questo caso la dichiarazione è d'obbligo non solo perché il sistema ti da un errore se non lo fai, ma anche perchè, per il loro normale utilizzo, è fondamentale specificarne le dimenzioni!).
Rispondi in post alle domande che ti ho fatto sopra e vediamo se posso aiutarti! In ogni caso puoi anche vedere il comando FormatNumber dalla guida di VB, forse ti può essere utile!

Ciao metal, alla prossima! :mexican:
 

Neo

Utente Attivo
7 Mar 2005
35
0
0
50
Camaiore (LU)
www.pepproject.it
x metalgemini

Ah dimenticavo, lavoro a progetto perché preferisco starmene comodamente a casa mia senza nessuno che mi stressi continuamente su come lavoro!!! La ditta che pubblicizzo nella firma mi ha fatto molte volte proposte allettanti (anche dal punto di vista economico: il portatile dal quale sto scrivendoti me lo hanno regalato loro!), ma sono arrivato all'accordo che io sono il loro referente per la programmazione senza il vincolo della dipendenza! Secondo me inoltre si può lavorare molto di più a progetto perché hai la possibilità di lavorare contemporaneamente per diverse ditte e/o persone! In fondo, come molti altri programmatori ti confermeranno, i lavori si somigliano tutti, una volta fatta una pagina o uno script può essere usato, con le dovute modifiche e/o miglioramenti, per infiniti altri lavori senza bisognio di doverli rifare ogni volta, quindi 2+2=? :fonzie:

Ciao metal e ... buon lavoro!
 

metalgemini

Utente Attivo
14 Apr 2004
745
0
0
:)

Ciao Neo e grazie x l'aiuto che mi stai dando.

Io devo salvare nella tabella CARRELLO, nei campi NOMEPRODOTTO(testo), DESCRIZIONE(memo),
PREZZO(valuta), QUANTITA(numerico), TOTALE(valuta),IDUSERNAME(numerico).....i dati relativi a:

request.querystring("nomeprodotto") ; preso dal db(testo) request.querystring("descrizione") ; preso dal db (memo)
request.querystring("prezzo") ; preso dal db (valuta)
request.querystring("quantita") ; input dell'utente
session("idutente") ; la sessione = all'ID dell'utente

Fino a qui tutto ok.Il problema viene ora,
devo anche salvare nel campo TOTALE(valuta), il risultato di: prezzo x quantità.Io ho agito nel seguente modo:



quantita = request.querystring("quantita")
prezzo = request.querystring("prezzo")
totale = quantita * prezzo

quando poi vado a salvare...faccio:

Sr("nomeprodotto") = request.querystring("nomeprodotto")
Sr("descrizione") = request.querystring("descrizione")
Sr("prezzo") = request.querystring("prezzo")
Sr("quantita") = request.querystring("quantita")
Sr("totale") = totale
Sr("IDusername") = session("idutente")

Sembrerebbe tutto ok...tranne il campo TOTALE che, metti caso, avessi dovuto fare 0,4 x 2...nel campo TOTALE mi ci trovo 1, invece di 0,8...sicuramente xkè arrotonda x eccesso.

Poi già ke ci siamo...mi levi una curiosità? :D
Io sento parlare di sql dove UPDATE serve per aggiornare il db...oppure INSERT INTO tabella(bla,bla,bla)...ma io quando salvo i dati, li modifico o li elimino...non uso tale codice...io uso ad esempio, per aggiungere i dati:

Dim Sr
Set Sr = Server.CreateObject("ADODB.Recordset")
Sr.Open "CARRELLO", Conn, 1, 3
Sr.addnew()
Sr("nomeprodotto") = request.querystring("nomeprodotto")
Sr("descrizione") = request.querystring("descrizione")
Sr("prezzo") = request.querystring("prezzo")
Sr("quantita") = request.querystring("quantita")
Sr("totale") = totale
Sr("IDusername") = session("idutente")
Sr.Update


non faccio: INSERT INTO ecc..ecc...forse xkè devo salvare dati in una sola tabella e non in tante?
Altra cosuccia :D quando appunto fai:
INSERT INTO tabella(nomecampo1,nomecampo2,nomecampo3) values('valore1','valore2','valore3')
non serve poi fare la menata:
Sr("nomeprodotto") = request.querystring("nomeprodotto")
Sr("descrizione") = request.querystring("descrizione")
Sr("prezzo") = request.querystring("prezzo")
ecc ecc...?Basta la stringa sql x inserire il tutto nei campi?
Ciao e scusa per le troppe domande!
:byebye:
 

Neo

Utente Attivo
7 Mar 2005
35
0
0
50
Camaiore (LU)
www.pepproject.it
Per prima cosa ti sconsiglio vivamente di impostare i campi prezzo e totale come valuta, impostali come numerico intero lungo con 2 cifre decimali e quando li devi visualizzare utilizza questo sistema:
Codice:
........ <%="€ "& FormatNumber(Prezzo,2)%>
Facendo così dovresti risolvere il problema dell'arrotondamento. (Mi raccomando di specificare le due cifre decimali, altrimenti il risultato non cambia)
In secondo luogo non ho ancora capito se il db lo fai in Access oppure MySQL, Oracle o che altro?

Riguardo al codice SQL, quando hai impostato:
Codice:
Set Sr.Open ....
....
Sr.update
lo Sr.update serve per scrivere effettivamente tutte le impostazioni che hai inserito sopra l'istruzione: infatti quando imposti un SR("nomecampo")=variabile in realtà ancora non stai scrivendo nella tabella ma solo in un buffer di memoria che viene svuotato e riversato in tabella con l'update, quindi in questo caso update non aggiorna ma scrive (nel caso ovviamente che la prima istruzione sia Sr.AddNew). Riguardo al fatto che sia meglio usare questo tipo di istruzione piuttosto che INSERT INTO dipende esclusivamente dai tuoi gusti, in pratica le due soluzioni sono identiche; o ne usi una oppure usi l'altra! Tutto questo quando lavori su una sola tabella, perché se tu dovessi inserire dati contemporaneamente in più tabelle, risulterebbe molto meno problematico usare Sr.AddNew, inquanto se tu usassi INSERT INTO, dovresti anche inserire tutta una serie di JOIN ... ON per ogni relazione tra tabelle.
Una domanda te la pongo io a questo punto: non è più pratico lavorare con le query? Chiaro che la domanda vale se lavori in Access, ma io di solito mi costruisco le query nel db, e quando mi servono le richiamo così:
Codice:
Set Sr=Conn.Execute("Exec query_che_ti serve '"& parametro &"','"& parametro ...... &"'")
Fammi sapere se ti sono stato d'aiuto o che problemi continui ad incontrare e ne parliamo, OK?
Alla prossima. Ciao da Neo
 

metalgemini

Utente Attivo
14 Apr 2004
745
0
0
:(

Ciao Neo e grazie ancora x il tuo aiuto.
Allora...ho provato a cambiare i campi valuta in campi numerici e sembrerebbe che arrotonda proprio col numerico ...allora li ho rimessi di tipo valuta e il campo "prezzo" non me lo arrotonda piu...quindi una cosa è risolta ;)
ora mi arrotonda il totale ma ho paura ke mi sn dimenticato di rimetterlo di tipo valuta...siccome non ho access qui...devo farlo a casa quindi te lo ridico! ciao ciao e grazie ancora :byebye:
 

metalgemini

Utente Attivo
14 Apr 2004
745
0
0
:)

Eccomi!
Allora...se i campi sono di tipo numerico a 2 decimali mi si visualizzano senza decimali.Se invece li metto di tipo valuta mi fa vedere i 2 decimali e grazie al FormatNumber ora riesco a non far arrotondare il totale!
Una cosa risolta!
Adesso ho il problemino di fare la somma di tutti i campi del totale...siccome nella tabella CARRELLO ci inserisco i dati e l'id dell'utente x riconoscere di ki è il tale prodotto...se faccio il totale di tutti i campi mi fa il totale dei prodotti di tutti gli utenti!
Quindi ho pensato di fare:

str_sql = "select sum(totale) as totale from carrello where IDusername = " &session("idutente")& "

xo' non conoscendo bene la sintassi di asp faccio sicuramente del casino con gli apici.Mi potresti dire dove sbaglio?
Ciao e grazie! :byebye:
 

Neo

Utente Attivo
7 Mar 2005
35
0
0
50
Camaiore (LU)
www.pepproject.it
str_sql = "select sum(totale) as totale from carrello where IDusername = ' " &session("idutente")& "'"
Così dovrebbe funzionare, se session("idutente") è numerico togli gli apici singoli e se vuoi puoi togliere anche tutti e due i doppi apici in fondo alla stringa.
Da quello che ho capito inserisci nel carrello un articolo alla volta e lo registri subito nel db. Non ti conviene costruirti un array nel quale gestisci tutti gli articoli per l'utente in uso e poi lo registri una sola volta alla fine delle operazioni?
Codice:
Dim LocalCart([I]numero_campi_di_ogni_prodotto[/I] ,50)
const ProdID=0
const ProdName=1
const ProdPrice=2
....... [I]tante costanti quanti sono i campi di ogni prodotto[/I]
[I]qui gestisci le operazioni con dei for i=0 to ubound(LocalCart) e le modifiche le fai richiamando la posizione che ti interessa con le costanti: LocalCart(ProdPrice,i)=.....[/I]
Alla fine delle operazioni, per poter passare da una pagina all'altra senza perdere le operazioni fatte butti tutto il carrello in una session:
Codice:
Session("Cart")=LocalCart
Quando il cliente conferma (magari andando alla cassa) fai un for next e metti tutto nel db:
Codice:
For i=0 to ubound LocalCart
Rs.open "[I]tabella del carrello[/I]",conn,1,3
Rs.Addnew
Rs("[I]campo[/I]")=LocalCart(ProdID,i)
Rs("[I]campo2[/I]")=LocalCart(ProdName,i)
......
Rs.update
Next
Ora la cosa te la ho abbastanza semplificata, ma con un pò di prove dovresti riuscire a far funzionare tutto, in ogni caso io sono sempre qui, e non solo io! Luke ad esempio pare aver abbandonato questo trade, ma ne sa molto più di me. Quindi fin che ti posso aiutare lo faccio volentieri, dove non arrivo io c'è tanta gente che può farlo!
Un ultimo consiglio, per non allungare troppo l'array con prodotti che in realtà sono stati cancellati, lavora sulla prima voce, quella dell'ID: quando un cliente cancella un prodotto dal carrello, tu cancella solo l'ID, e quando un prodotto viene aggiunto, inseriscilo nella prima posizione che ha l'ID vuoto!

Alla prossima! Ciao da Neo
 

metalgemini

Utente Attivo
14 Apr 2004
745
0
0
ehehehe...sembra facile...

Stai parlando l'arabo ehehehhe...
Cmq sn riuscito a fare il conteggio tenendo conto degli acquisti di un solo utente...ora ho il problema dell'invio dell'ordine x email...
ho provato con il servizio cgi fornito dal mio provider creando con un ciclo while i campi di tipo "hidden" ad es.:


Do While Rs.EOF
<input type="hidden" name="nomeprodotto" value="<%=Rs("nomeprodotto")%>">
<input type="hidden" name="descrizione" value="<%=Rs("descrizione")%>">
ecc ecc...ma creando più campi con lo stesso nome x email mi arriva questo:
nomeprodotto: penna, matita, gomma...ecc ecc
descrizione: descrizione1, descrizione2, descrizione3...ecc ecc

e non è affatto bello!

Allora ho provato a inviare il tutto con CDOSYS...ma è una tragedia...xkè essendo una capra in queste cose...quando c'è:

eMail.TextBody = Testo

non so come fare ad inserire in un unica variabile tutti i records del carrello.Ho provato con un array ma non sapendo quanti records(prodotti aggiunti al carrello) non potevo nemmeno partire con un array...(Dim ordine(?))ho provato a contare i records e ci sono riuscito...ma mettendo:
Dim ordine(variabile)
mi da errore e mi dice ke ci vuole x forza una costante...credo

sto parlando ankio arabo lo so ma non ci capisco nulla :ister:

A presto e grazie :byebye:
 
Discussioni simili
Autore Titolo Forum Risposte Data
P [ASP.Net] Problema ERR_INCOMPLETE_CHUNKED_ENCODING 206 (Partial Content) con Font ASP.NET 4
T problema strano con procedura di controllo da database, di dati immessi in un form asp Classic ASP 5
A Problema con codice ASP Classic ASP 1
M Problema con ASP e XML Classic ASP 12
G problema checkbox con mdb asp Classic ASP 8
V Problema con Pure Asp Upload Classic ASP 4
R Problema con AJAX e UpdatePanel di asp.net Ajax 2
C problema asp e db con permessi Classic ASP 2
T Problema con script search.asp Lukeonweb Classic ASP 9
K Problema invio dati form con ASP Classic ASP 8
cosov Problema con passaggio dati tra pagine asp Classic ASP 5
I Problema con form ASP-CDOSYS 2: la vendetta Classic ASP 4
I Problema con form ASP-CDOSYS Classic ASP 2
S problema con include e asp Classic ASP 0
L problema mail con asp Classic ASP 15
B problema con asp Classic ASP 1
O problema con dvr dahua xvr5116 IP Cam e Videosorveglianza 0
G Problema con Xampp Web Server 1
andrea barletta Problema con miniature comandi Photoshop 0
I problema con alice Posta Elettronica 0
N Problema con position absolute e overflow HTML e CSS 4
L Problema con inner join PHP 11
K [php] Problema con inner join PHP 4
K [PHP] Problema con variabili concatenate. PHP 1
O problema con query PHP 4
I problema con 2 account Posta Elettronica 1
L problema collegamento file css con html HTML e CSS 1
E Problema accesso a file con app sviluppata con MIT APP INVENTOR 2 Sviluppo app per Android 0
M Problema con Try Catch PHP 0
Sergio Unia Problema con gli eventi del mouse su una data table: Javascript 2
T PROBLEMA CON SESSIONI PHP 3
T ALTRO PROBLEMA CON ARRAY PHP PHP 1
R problema con else PHP 0
T PROBLEMA CON ARRAY PHP 8
L problema con query select PHP 2
R Problema query con ricerca id numerico PHP 2
F Problema con risposta PHP 0
S problema con recupero dati tabella mysql PHP 2
Z Problema con il mio tp-l i nk Reti LAN e Wireless 1
L Problema RAM con Tomcat 8 Apache 0
napuleone problema con sort e asort PHP 4
Z Problema con INT MySQL PHP 1
Z Problema database MySQL con XAMPP PHP 0
M Problema con controllo form in real time jQuery 6
Z Problema di sincronizzazione PAYPAL con PHP PHP 1
G Problema con Get page PHP 4
P Problema con require once PHP 6
P Problema con i package Java 1
A Problema login con Safari PHP 14
F INDESIGN: problema esportazione esecutivo per la stampa con foto B/N Webdesign e Grafica 0

Discussioni simili