Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 29
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    684

    modifiche ad una pagina carrello

    Ho preso due pagine.asp, ovvero una guida, e le sto adattando alle mie esigenze.

    Vi presento il problema.
    catalogo.asp
    Originariamente lo script prevedeva di inviare tramite form il campo ID di un determinato articolo checckando un checkbox con valore name="articoli" alla pagina carrello.asp. All'interno di questo form gli articoli sono stampati a video ciclando i record di un database.

    carrello.asp
    Questa pagina tramite il comando:
    codice:
    articoli = split(request("articoli"),",")
    crea l'array con la collection di valori.

    FIN QUI TUTTO OK.

    Io ho modificato il tutto, perche' nel mio caso devo paginare i record su più pagine e, correggetemi se sbaglio, se l'utente checcka su due checkbox nella 1° pagina e va alla pagina successiva perdo quei campi. Ora ho pensato di sostituire al campo checkbox un link, eliminando il form, che fa riferimento alla stessa pagina passando la variabile con quel valore e inserendola all'interno di una variabile sessoion. In questo modo anche cambiando pagina i valori non vengono persi.
    Quindi, stando nella pagina catalogo.asp ogni link generato dal ciclo avrà come link "catalogo.asp?articoli=<%=rs("ID")%>"
    Al refresh della pagina aggiungo il valore contenuto nella variabile ad una variabile session in questo modo:
    codice:
    IF session("articoli") = "" THEN
    session("articoli") = request.querystring("articoli")
    ELSE
    session("articoli") = session("articoli") + "," + request.querystring("articoli")
    END IF
    Poi ho inserito un pulsante che mi porta alla pagina carrello.asp
    Qui ho modificato poche linee di codice della pagina carrello.asp che qui riporto:
    ORIGINALE:
    codice:
    articoli = split(request("articoli"),",")
    MODIFICATO:
    codice:
    articoli = split(session("articoli"),",")
    l'altra parte di codice, verifica se ci sono nuovi articoli da inserire.
    originale:
    codice:
    ' Verifico se l'utente ha chiesto di svuotare il carrello
    IF request("articoli") = "Svuota Carrello" THEN
    presenti = 0
    session("carrello") = null
    ELSE
    'verifica se ci sono nuovi articoli da inserire
    nuoviArt = request("articoli").count
    if nuoviArt > 0 then AggiungiArticolo
    END IF
    modificato:
    codice:
    ' Verifico se l'utente ha chiesto di svuotare il carrello
    IF request("articoli") = "Svuota Carrello" THEN
    presenti = 0
    session("carrello") = null
    ELSE
    'verifica se ci sono nuovi articoli da inserire
    conteggioArt = split(session("articoli"),",")
    nuoviArt = 0
    for x = 0 TO UBOUND(conteggioArt)
    nuoviArt = nuoviArt +1
    next
    if nuoviArt > 0 then AggiungiArticolo
    END IF
    Facendo se clicco nella pagina catalogo.asp su dei prodotti e dopo vado nella pagina carrello.asp tutto ok, anche modifico quantità o elimino prodotti.
    Ma se vado nella pagina catalogo.asp nuovamente e seleziono un altro articolo e poi vado nella pagina carrello.asp mi da questo errore:
    Errore di run-time di Microsoft VBScript (0x800A000D)
    Tipo non corrispondente: 'clng'
    /sexydvd/carrelloprova.asp, line 69

    ecco la parte di codice in questione con la linea in question in rosso:
    codice:
    <script runat=server language=vbscript>
    
    sub aggiungiArticolo()
    
    'Questa routine aggiunge un nuovo articolo al carrello
    
    'articoli=split(request("articoli"),",")
    articoli = split(session("IDFILM"),",")
    		
    
    '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
    ...
    la variabile di sessione e': session("IDFILM") e non session("articoli") scusate, e' solo una precisazione..

    Questo dovrebbe essere javascript.
    Non sono molto ferrato in materia e Vi chiedo aiuto.
    Grazie, sono bloccato e non posso andare avanti...

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    684
    correggo, si tratta di visualbasic... ho scritto questo post alle 3 di notte dopo 2 gg. di prove.

    qualcuno potrebbe aiutarmi, grazie

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    684
    OK.. questo problema l'ho risolto.

    infatti ho modificato il codice della pagina catalogo.asp in questo modo:
    codice:
    IF request.querystring("articoli") <> "" THEN
    
    IF session("articoli") = "" THEN
    session("articoli") = request.querystring("articoli")
    ELSE
    session("articoli") = session("articoli") + "," + request.querystring("articoli")
    END IF
    
    END IF
    infatti senza il controllo della variabile, mi aggiungeva ogni volta che entravo nella pagina catalogo.asp, avendo la session piena, una ",".

    ecco il perche' dell'errore, non restituiva la collection giusta da splittare!!!

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    684
    Ho modificato la pagina carrello.asp secondo le mie esigenze. Il tutto funziona: aggiornare q.tà, svuotare carrello e aggiungere altri prodotti.

    Ultima cosa che non riesco a modificare e rendere funzionante, e' la possibilità di eliminare un solo articolo dal carrello.

    Ecco il codice che gestisce il tutto, ricordo che la collection di dati e' contenuta in una variabile di sessione quindi 1,4,65,23

    Questa parte di codice, visualizza gli articoli ordinati:
    codice:
    <form ACTION="carrelloprova.asp" METHOD="post" onSubmit="return checkForm()">
      <table border="1">
        <tr bgcolor="#dddddd"> 
          <td>Elimina</td>
          <td>Film</td>
          <td align=center>Quantità</td>
          <td>Prezzo</td>
        </tr>
        <%
    	'Apro la connessione verso il database usando ADO
    	Set rsArticoli = Server.CreateObject("ADODB.RecordSet")
    	StrConn = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & server.mapPath("database\archivio.mdb")
    	rsArticoli.open "select * from film where idfilm in(" & codici & ")",StrConn
    	
    	'where codice in(" & articoli & ")
    
    	'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)
       		NewTd="<TD align=center><input type=checkbox name=elimina value=" & campi("idfilm") & ">"
        		NewTd=NewTd & "<TD width=150>" & campi("FILM") & "</TD>"
        		NewTd=NewTd & "<TD align=center><input type=text size=3 name=qta value=" & carrello(1,k) & "></TD>"
        		totale=totale+campi("PREZZO")*carrello(1,k)
        		'NewTd=NewTd & "<TD>" & formatCurrency(campi("PREZZO")*carrello(1,k)) & "</TD>"
    			NewTd=NewTd & "<TD>" & campi("PREZZO")*carrello(1,k) & "</TD>"
        		NewRow="<TR>" & NewTd & "</TR>"
        		Response.write NewRow
        		rsArticoli.MoveNext
      	next
    	
    	response.write "<TR><TD colspan=3 align=right>Totale:<TD><font color=red>" & totale & "<font><TD></TR>"
      	
    	RsArticoli.Close
    	Set RsArticoli=nothing
    %> 
      </table>
      
    
      <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">
      
    
      
    
      <input type=button value="Conferma ordine" onclick="location.href='conferma.asp'">
    </form>
    Ora qui controllo l'azione dell'utente
    codice:
    <% 
    	'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
    ...
    qui di seguito inserisco la routine VB che cancella l'articolo dal carrello.
    codice:
    <script runat=server language=vbscript>
    ...
    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
    se seleziono un checkbox di un articolo e poi aggiorno il carrello, non lo elimina!!! :master:

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    684
    Sto analizzando la routine VB "cancella articolo()"

    e vi spiego come funziona, al momneto prendo in esame il caso in cui sia stato inserito un solo articolo, esempio con ID = 3

    'indica l'ID del primo articolo inserito
    (carrello(0,x)= 3
    'indica quanti articoli ci sono nel carrello ora 1 quindi 0
    (carrello,2)= 0
    elimina = 3
    quindi, analizzando abbiamo:

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

    presenti=true
    for k=0 to ubound(articoli)
    x=0
    do

    ' SE 3 = 0 THEN
    if cint(carrello(0,x))=cint(articoli(k)) then
    'continuo il ciclo fino ad arrivare a k=3

    'Verifico se si tratta dell'ultimo elemento
    'Se x(3) < num.articoli(0) allora
    if x<ubound(carrello,2) then
    ultimo=ubound(carrello,2)
    carrello(0,x)=carrello(0,ultimo)
    carrello(1,x)=carrello(1,ultimo)
    end if
    'se il numero degli articoli e' uguale a 0
    if ubound(carrello,2)=0 then
    'Qui dovrebbe azzerarmi il carrello ma all'aggiornamento resta l'articolo selezionato nel carrello
    erase carrello
    presenti=false
    'ho provato ad aggiungere
    session("IDFILM") = ""
    else
    redim preserve carrello(1,ubound(carrello,2)-1)
    end if
    exit do
    else
    x=x+1
    end if

    loop
    next

    end sub

    Cosi' funziona, facendomi il refresh della pagina con il carrello vuoto!!!

    Ma se provo a rifare io il refresh, in seguito a questa condizione mia appare:
    Errore di run-time di Microsoft VBScript (0x800A0009)
    Indice non incluso nell'intervallo: 'carrello'
    /sexydvd/carrelloprova.asp, line 113

    Ho inserito dopo la scritta:
    sub cancellaArticoli()
    il comando
    IF session("IDFILM") <> "" THEN
    tutta la routine

    e subito prima dell'end sub
    il comando END IF

    Vorrei sapere se questo metodo e' buono o ha delle controindicazioni

    grazie

  6. #6
    Sono arrivato qui facendo una ricerca.
    Non ho letto tutte le discussioni, però l'attenzione mi è caduta su chi ha scritto le discussioni. Povero dreaman74, praticamente sono tutte sue, il thread è suo completamente

    Però c'è sempre una bella soddisfazione a risolvere i problemi da soli. Non fraintendete, non ho detto "mai chiedere".

    Buona giornata.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    684
    Era un trhead, da me dimenticato!!! Ho risolto, una settimana di duro lavoro!

    Ed ho preparato un pagina che mi gestisce il carrello, on-line, senza recordset disconessi o altro, tramite una variabile session che mi tiene solo gli ID degli articoli. Tramite questa faccio conteggi, quantità, ecc... si hai ragione e' una bella soddisfazione... ma questo e' dovuto, in questo caso non cisono risposte, all'aiuto della community in modo "implicito"... grazie ai vari post ho potuto risolvere. Molte volte ho ricevuto anche risposte celeri...

    Calcola che programmo da AGOSTO-SETTEMBRE, e tra vari siti FLASH, PHOTOSHOP, LIGHTWAVE ora posso dire di capire un po di ASP. Ultimo ho realizzato un e-commerce bello complesso ed il mio obiettivo ora è usare My SQL...

    Grazie nuovamente a tutti...

  8. #8
    Beh praticamente, sostituisci la stringa di connessione al tuo db Access con quella al db MySql ed hai praticamente finito.
    Consiglio non usare ADO per aggiungere, cancellare o modificare i record, usa esclusivamente stringhe sql, quindi i classici "INSERT INTO...", "DELETE FROM..." e "UPDATE SET...".

  9. #9
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    684
    Si infatti, ho letto che sono piu' prestanti...

    esempio pratico...

    per avviare l'SQl con una connessione, senza recordset?
    E' la prima volta che uso solo l'SQL

    grazie

  10. #10
    Inserisce il record:
    codice:
    Set objConn = connessione al db
    sqlstring = "INSERT INTO tabella (nome_campo1, nome_campo2)Values('" & nome_campo1 & "', '" & nome_campo2 & "');"
    ObjConn.Execute (sqlstring)
    Cancella il record:
    codice:
    Set objConn = connessione al db
    sqlstring = "DELETE FROM tabella WHERE id = 1"
    ObjConn.Execute (sqlstring)
    Aggiorna il record:
    codice:
    Set objConn = connessione al db
    sqlstring = "UPDATE tabella SET campo1 = 'pippo'"
    ObjConn.Execute (sqlstring)
    Come vedi solo sql, niente ADO.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.