Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    125

    Eliminazione prodotto carrello

    Buongiorno a tutti,

    ho implementato nel mio sito un carrello che, tra le altre cose, offre la possibilità di eliminare i prodotti scelti.

    codice:
    <a href="carrello.php?action=cancella&id='.$id.'" title="Elimina il prodotto dal carrello">
    Cancella
    </a>
    Il link sopra chiama una funzioncina all'interno di uno switch che riporto di seguito

    Codice PHP:
    case 'cancella':                   
    if (
    $carrello) {                       
    $prodotti = @explode(',',$carrello);                        
     
    $acquisto '';                        
     foreach (
    $prodotti as $prodotto) {                          
     if (
    $_GET['id'] != $prodotto) {                                
     if (
    $acquisto != '') {                                     
    $acquisto .= ','.$prodotto;                                     
    } else {                                     
     
    $acquisto $prodotto;                                       }                                       
    }                                  
    }                               
    $carrello $acquisto;                          
    }         
    break; 
    In effetti il prodotto viene si eliminato dal carrello, ma finisce comunque nella tabella ordini del mio DB.
    Questo accade perchè, prevedendo che gli utenti possano acquistare più di un prodotto, ho avuto la necessità di memorizzare le informazoni dei vari prodotti scelti in un array che sia anche una variabile di sessione e che qui di seguito riporto

    Codice PHP:
    if (!isset($_SESSION['prodotti'])) $_SESSION['prodotti'] = array();       
    $prodotti $_SESSION['prodotti'];      
    $prodotto = array('nomecart' => $f['nome'],                       
    'colorecostine' => $_POST['colorecostine'],                       
    'colorecarta' => $_POST['colorecarta'],                       
    'colorestampa' => $_POST['colorestampa'],                       
    'carattere' => $_POST['carattere'],                       
    'quantita' => $_POST['quantita'],                       
    'quantita_arch' => $_POST['quantita_arch'],                       
    'quantita_21297' => $_POST['quantita_21297'],                      
    'quantita_1521' => $_POST['quantita_1521'],                       
    'titolo' => $_POST['titolo'],                            
    'caratteretitolo' => $_POST['caratteretitolo'],                       
    'sottotitolo' => $_POST['sottotitolo'],                       
    'caratteresottotitolo' => $_POST['caratteresottotitolo'],                       'indirizzocart' => $_POST['indirizzocart'],                       
    'carattereindirizzocart' => $_POST['carattereindirizzocart'],                       'telfaxcell' => $_POST['telfaxcell'],                       
    'caratteretelfaxcell' => $_POST['caratteretelfaxcell'],                        'emailsito' => $_POST['emailsito'],                        
    'carattereemailsito' => $_POST['carattereemailsito'],                       
    'subtotaleco' => $f['prezzo'],                       
    'modello' => $_POST['modello'],                       
    'layout' => $_POST['layout']);       
    $prodotti[] = $prodotto;        
    $_SESSION['prodotti'] = $prodotti
    Deve esistere una maniera che mi consenta di eliminare il prodotto che non voglio più acquistare e nello stesso tempo far in modo che ciò che la sessione ha mantenuto in memoria, per quel prodotto stesso, venga cancellato; non riesco a farlo ed è molto tempo che ci sto sbattendo la testa.

    Per dovere di cronaca devo dire che già mesi fa avevo aperto un thread al riguardo e se decido di rifarlo oggi, sperando che nessuno si arrabbi, è per più di un motivo.
    Innanzitutto perchè devo risolvere per poter consegnare il sito al cliente.
    In secondo luogo perchè nonostante la collaborazione di alcune persone, la volta scorsa non sono comunque riuscito a risolvere.
    Infine perchè credo che in questo nuovo thread abbia spiegato meglio qual è il problema.

    Saluti a tutti,
    Marco

  2. #2
    Utente di HTML.it L'avatar di las
    Registrato dal
    Apr 2002
    Messaggi
    1,221
    sostituisci

    $prodotti[] = $prodotto;

    con

    $prodotti[$chiaveUnivocaProdotto] = $prodotto;

    e quando lo devi cancellare fai unset($_SESSION['prodotti'][$chiaveUnivocaProdotto]) e hai eliminato il prodotto
    Il calcolatore è straordinariamente veloce, accurato e stupido.
    L'uomo è incredibilmente lento, impreciso e creativo.
    L'insieme dei due costituisce una forza incalcolabile.
    (Albert Einstein)

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    125
    Innanzitutto grazie per la risposta.
    Ho testato la tua soluzione e succede che se metto un prodotto nel carrello e poi lo elimino, non viene scritto nulla nel DB.
    Se poi, rimanendo in sessione, ne metto due e ne cancello uno, nel DB si scrivono tre prodotti: il primo solitario che avevo cancellato e gli altri due.

    Codice PHP:
    if (!isset($_SESSION['prodotti'])) 
    $_SESSION['prodotti'] = array();       
    $prodotti $_SESSION['prodotti'];      
    $prodotto = array('nomecart' => $f['nome'],                       
    'colorecostine' => $_POST['colorecostine'],                       
    'colorecarta' => $_POST['colorecarta'],                       
    'colorestampa' => $_POST['colorestampa'],                      
    'carattere' => $_POST['carattere'],                       
    'quantita' => $_POST['quantita'],                       
    'quantita_arch' => $_POST['quantita_arch'],                       
    'quantita_21297' => $_POST['quantita_21297'],                      
    'quantita_1521' => $_POST['quantita_1521'],                       
    'titolo' => $_POST['titolo'],                           
    'caratteretitolo' => $_POST['caratteretitolo'],                      
    'sottotitolo' => $_POST['sottotitolo'],                       
    'caratteresottotitolo' => $_POST['caratteresottotitolo'],                       'indirizzocart' => $_POST['indirizzocart'],                       
    'carattereindirizzocart' => $_POST['carattereindirizzocart'],                       'telfaxcell' => $_POST['telfaxcell'],                       
    'caratteretelfaxcell' => $_POST['caratteretelfaxcell'],                        'emailsito' => $_POST['emailsito'],                        
    'carattereemailsito' => $_POST['carattereemailsito'], 
    'subtotaleco' => $f['prezzo'],                       
    'modello' => $_POST['modello'],                       
    'layout' => $_POST['layout']);       
    $prodotti[$id_prodotto] = $prodotto;        
    $_SESSION['prodotti'] = $prodotti
    Codice PHP:
    case 'cancella':          
    unset(
    $_SESSION['prodotti'][$id_prodotto]);                   
    if (
    $carrello) {                       
    $prodotti = @explode(',',$carrello);                     
    $acquisto '';                            
    foreach (
    $prodotti as $prodotto) {                  
    if (
    $_GET['id'] != $prodotto) {                                 
    if (
    $acquisto != '') {                                     
    $acquisto .= ','.$prodotto;                                     
    } else {                                      
    $acquisto $prodotto;                                                     }                                       
    }                                  
    }                               
    $carrello $acquisto;                           

    Dove sto sbagliando?
    Saluti

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    125
    Errore mio scusate.
    Così funziona:

    Codice PHP:
    $_SESSION['prodotti']['$id_prodotto'] = $prodotto
    Codice PHP:
    case 'cancella':          
    unset(
    $_SESSION['prodotti'][$id_prodotto]);            
    if (
    $carrello) {                       
    $prodotti = @explode(',',$carrello);                     
    $acquisto '';                             
    foreach (
    $prodotti as $prodotto) {                   
    if (
    $_GET['id'] != $prodotto) {                                 
    if (
    $acquisto != '') {                                     
    $acquisto .= ','.$prodotto;                                     
    } else {                                      
    $acquisto $prodotto;                                                     }                                       
    }                                  
    }                               
    $carrello $acquisto;                           
    }          
    break; 
    Grazie mille,
    Marco

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    125
    Mi spiace, ma ho cantato vittoria troppo presto.
    Avevo effettuato la prova di mettere due prodotti nel carrello e cancellarne uno ed effettivamente osì si scrivevav una sola riga del DB.
    Poi, facendo altre prove, mi sono accorto che se inserisco ad esempio 5 prodotti nel carrello e ne elimino 3, sempre una riga si scrive.
    Help me please.

    Saluti,
    Marco

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.