22 messaggi dal 03 settembre 2003
Ciao ragazzi,
ho scaricato lo shoppingcart e sto cercando di modificarlo solo che non riesco a capire perche? non passano i valori di chekbox all?altra pagina (conferma.asp). Vi posto il codice:

carrello.asp

<h1>Carrello della spesa</h1>

<script runat=server language=vbscript>

sub aggiungiArticolo()

'Questa routine aggiunge un nuovo articolo al carrello

articoli=split(request("articoli"),",")

'Se il carrello non è vuoto devo verificare
'se i nuovi articoli sono già presenti

if presenti=1 then

for art=0 to ubound(articoli)

trovato=false

for righe=0 to ubound(carrello,2)

if clng(carrello(0,righe))=clng(articoli(art)) then
trovato=true
righe=ubound(carrello,2)+1
end if

next

if trovato=false then
'righe=ubound(carrello,2)
redim preserve carrello(1,righe)
carrello(0,righe)=articoli(art)
carrello(1,righe)=1
end if

next

else
redim carrello(1,nuoviArt-1)
for c=0 to nuoviArt-1
carrello(0,c)=articoli(c)
carrello(1,c)=1
next
end if

presenti=1

end sub

sub cancellaArticoli()
'Questa routine elimina un articolo dal carrello
'con una tecnica di shifting degli elementi

articoli=split(request("elimina"),",")

presenti=true

for k=0 to ubound(articoli)

x=0

do

if cint(carrello(0,x))=cint(articoli(k)) then

'Verifico se si tratta dell'ultimo elemento

if x<ubound(carrello,2) then
ultimo=ubound(carrello,2)
carrello(0,x)=carrello(0,ultimo)
carrello(1,x)=carrello(1,ultimo)
end if
if ubound(carrello,2)=0 then
erase carrello
presenti=false
else
redim preserve carrello(1,ubound(carrello,2)-1)
end if
exit do
else
x=x+1
end if

loop

next

end sub

sub aggiornaDati

'Questa routine modifica le quantità degli articoli scelti dall'utente

for k=0 to ubound(carrello,2)
carrello(1,k)=request("qta")(k+1)
next

end sub

</script>

<%
'ANALISI DELLE RICHIESTE

'Imposto una variabile bool che tiene traccia della presenza
'di elementi nell'array
if isArray(session("carrello"))=0 then
dim carrello()
presenti=0
else
carrello=session("carrello")
presenti=1
end if

'Verifico l'azione scelta dall'utente
if request("action")="Aggiorna carrello" then

'Verifico se l'utente ha eliminato degli articoli o variato alcune quantità
cancellaArt=request("elimina").count
if cancellaArt>0 then
cancellaArticoli
else
aggiornaDati
end if
end if

'Verifico se l'utente ha chiesto di svuotare il carrello
if request("action")="Svuota carrello" then
presenti=0
session("carrello")=null
else
'Verifico se ci sono nuovo articoli da inserire
nuoviArt=request("articoli").count

if nuoviArt>0 then aggiungiArticolo

end if

'Provvedo alla visualizzazione del contenuto dell'array costruendo la
'lista di codici_articolo da visualizzare con la query SQL
if presenti=0 then

response.write "<br><font color=red><b>Il carrello è vuoto.</b></font><br><br>"
session("carrello")=null
else


for c=0 to ubound(carrello,2)

codici=codici & "," & carrello(0,c)

next

codici=right(codici,len(codici)-1)

response.write "Contenuto del carrello:<br><br>"

'Riassegno all'oggetto SESSION il contenuto dell'array
session("carrello")=carrello
%>



<form ACTION="default.asp?cat=<%=cat%>&pg=<%=i%>" METHOD="post" onSubmit="return checkForm()">

<table border="1">
<tr bgcolor="#dddddd">
<td>Elimina</td>
<td>Descrizione</td>
<td align=center>Quantità</td>
<td>Prezzo</td>
</tr>
<%
'Apro la connessione
Set rsArticoli = Server.CreateObject("ADODB.RecordSet")
RsArticoli.open "select * from Products where product_id in(" & codici & ")", objConn

'Costruisco la tabella articoli con una casella di conferma acquisto

'Assegno ad una variabile la collezione dei campi
Set campi=rsArticoli.fields

riga=0

for k=0 to ubound(carrello,2)


Response.write "<tr><td align=""center"">"
Response.write "<input type=""checkbox"" name=""elimina"" value="& campi("product_id") &"></td>"
Response.write "<TD width=""150"">" & campi("product_name") & "</TD>"
Response.write "<TD align=""center""><input type=""text"" size=""3"" name=""qta"" value=" & carrello(1,k) & "></TD>"
totale=totale+campi("product_price")*carrello(1,k)
Response.write "<TD>" & formatCurrency(campi("product_price")*carrello(1,k)) & "</TD></tr>"
rsArticoli.MoveNext

next

response.write "<TR><TD colspan=3 align=right><b>Totale:</b><TD><font color=red>" & formatCurrency(totale) & "<font><TD></TR>"


%>
</table>
<br>

<input type=submit name="action" value="Aggiorna carrello">
<input type=submit onclick="return confirm('Sei sicuro di voler eliminare il contenuto del carrello ?')" name="action" value="Svuota carrello"><br><br>
<input type=button value="Conferma ordine" onclick="location.href='conferma.asp">
</form>

<%
RsArticoli.Close
Set RsArticoli=nothing
end if

%>

Questa pagina verifica i valori passati con le checkbox:

conferma.asp

prodID = request.form("elimina")

prodID = replace(prodID," ","")
myArray = split(prodID,",")

for x = 0 to ubound(myArray)
response.write myArray(x) & "<br>"
next

Grazie a tutti
22 messaggi dal 03 settembre 2003
nessuno mi sa aiutare
11.886 messaggi dal 09 febbraio 2002
Contributi
abbi pietà, hai postato il codice di due pagine, non è semplice raccapezzarsi :(

comunque... là in mezzo c'è questa riga:
Response.write "<input type=""checkbox"" name=""elimina"" value="& campi("product_id") &"></td>"

in questo modo stai dando un valore numerico (credo) alla checkbox che di per sè accetta solo 2 valori: "on" e stringa vuota.

una checkbox, per sua natura, può essere spuntata o non spuntata, non puoi dargli un valore arbitrario. Anche se glielo dai, penso che venga sovrascritto al momento del post.
Usa un campo hidden se devi passare le informazioni da una pagina all'altra...
Lo stato della checkbox invece si controlla così:

prodID = request.form("elimina")
if prodID = "on" then
'la check in questo caso è spuntata...
else
...e in questo: no.
end if

Enjoy learning and just keep making
22 messaggi dal 03 settembre 2003
grazie BrightSoul per la tua risposta

ho provato a passare i valori con il campo hidden ma niente da fare
non capisco perche'
magari mi potresti spiegare perche' la pagina conferma.asp non scrive i valori passati

grazie e ciao
11.886 messaggi dal 09 febbraio 2002
Contributi
tu stai passando i dati a conferma.asp in questo modo:

<input type=button value="Conferma ordine" onclick="location.href='conferma.asp">

giusto? ... Sbagliato!
Scherzo, ti spiego:
quel bottone che hai definito è totalmente estraneo al form, infatti cliccandolo non viene passato alcun dato. Esaminandolo vedi che:

1) è un input type="button", che non svolge alcuna funzione di per sè
2) gli hai aggiunto un codice javascript all'evento onclick che non interagisce con il form, ma che si limita semplicemente ad aprire conferma.asp.

Quello che devi fare è aggiungere un'ALTRO javascript, uno diverso, che POSTI i dati del form a conferma.asp. Solo in questo modo la pagina potrà riceverli. Dunque scrivi:

<input type=button value="Conferma ordine" onclick="Javascript:this.form.submit()">

bene, siamo un passo avanti. Noterai adesso che è scomparso il riferimento a "conferma.asp". Il nome della pagina lo devi scrivere nell'action della form dove attualmente hai:

<form ACTION="default.asp?cat=<%=cat%>&pg=<%=i%>" METHOD="post" onSubmit="return true">

quindi, cambia tutta questa riga in:
<form ACTION="conferma.asp?cat=<%=cat%>&pg=<%=i%>" METHOD="post" onSubmit="return checkForm()">

a conferma.asp verranno passati anche dei parametri (cat e pg) che non so esattamente cosa siano, forse categorie di qualche tipo.
Se non funziona fai un'altro post, per lo meno dovresti riuscire a far ricevere i dati a conferma.asp, ciao

Enjoy learning and just keep making
22 messaggi dal 03 settembre 2003
Grazie 1000 BrightSoul
e scusami non potevo ringraziarti prima

Ti vorrei chiedere se e? possibile inserire contemporaneamente con un ciclo tanti record in piu colone di database? Nel mio caso sono due colonne: id e quantita. Sono riuscita ad inserire solo in una colonna.
Ti posto il codice
carrello.asp

'Verifico se l'utente ha chiesto di confermare l'ordine
IF request("action")="Conferma ordine" THEN
qta=request.form("qta")
cod=request.form("id")
dim aID
aID=split(cod,",")
dim iLoop

strSql="SELECT cart_productID, cart_quantity FROM Cart"

for iLoop=LBound(aID) to UBound(aID)

strSql="INSERT INTO Cart (cart_productID, cart_quantity) VALUES (" & aID(iLoop) &", "& qta(iLoop) &")"
objConn.Execute(strSql)
next

response.redirect "conferma.asp"
END IF
....................................
....FORM
.....................................
<form ACTION="carrello.asp" METHOD="post" onSubmit="return checkForm()">

<table border="1">
<tr bgcolor="#dddddd">
<td>Elimina</td>
<td>Descrizione</td>
<td align=center>Quantità</td>
<td>Prezzo</td>
</tr>
<%
'Apro la connessione verso il database usando ADO e il provider OLE DB di Access 97
Set rsArticoli = Server.CreateObject("ADODB.RecordSet")
RsArticoli.open "select * from Products where product_id in(" & codici & ")", objConn

'Costruisco la tabella articoli con una casella di conferma acquisto

'Assegno ad una variabile la collezione dei campi
Set campi=rsArticoli.fields

riga=0

for k=0 to ubound(carrello,2)

Response.write "<tr><td align=""center"">"
Response.write "<input type=""hidden"" name=""id"" value="& campi("product_id") &"><input type=""checkbox"" name=""elimina"" value="& codici &"></td>"
Response.write "<TD width=""150"">" & campi("product_name") & "</TD>"
Response.write "<TD align=""center""><input type=""text"" size=""3"" name=""qta"" value=" & carrello(1,k) & "></TD>"
totale=totale+campi("product_price")*carrello(1,k)
Response.write "<TD>" & formatCurrency(campi("product_price")*carrello(1,k)) & "</TD></tr>"
rsArticoli.MoveNext
next

response.write "<TR><TD colspan=3 align=right><b>Totale:</b><TD><font color=red>" & formatCurrency(totale) & "<font><TD></TR>"

%>
</table>
<br>
<input type=submit name="action" value="Aggiorna carrello">
<input type=submit onclick="return confirm('Sei sicuro di voler eliminare il contenuto del carrello ?')" name="action" value="Svuota carrello"><br><br>
<input type=submit name="action" value="Conferma ordine">
</form>

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.