Problema pulsant cancella ed aggiorna del carrello

navajo75

Utente Attivo
16 Mar 2012
103
1
18
Buongiorno a tutti,

sto sviluppando un ecommerce ed utilizzando un carrello preso su Mr. Webmaster (http://www.mrwebmaster.it/php/articoli/carrello-spesa-php-mysql_769.html).
Ho la necessità di mantenere le info di ciascun prodotto inserito nel carrello e per questo ho creato il seguente array:

PHP:
if (!isset($_SESSION['prodotti'])) $_SESSION['prodotti'] = array();
	$prodotti = $_SESSION['prodotti'];
	$prodotto = array('nomecart' => $f['nome'],
					  'colorecarta' => $_POST['colorecarta'],
	                  'colorestampa' => $_POST['colorestampa'],
					  'carattere' => $_POST['carattere'],
					  'quantita' => $_POST['quantita'],
					  '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;
Con questo metodo, però, ho un problema: se clicco sul pulsante cancella o su quello aggiorna del carrello, il prodotto viene si tolto od aggiornato nel carrello, ma le info ad esso relative rimangono nell'array.
Ho pensato di utilizzare la funzione unset del PHP nella parte dello script del carrello in cui è implementata la cancellazione, ma senza successo (sono una mezza sega in questo linguaggio).

Spero non si arrabbi nessuno, ma posto il seguente link: http://www.marcocristofari.it/immagineprofessionale
Ho creato un utente di test (email: [email protected] psw: test); credo serva a capire meglio il mio problema.
Nella pagina checkoutfs.php, ho stampato a video il subtotale, per far vedere che anche se un prodotto viene eliminato dal carrello, l'informazione del suo subtotale rimane nell'array.

Spero tanto possiate aiutarmi ad uscire da questo problema.
Grazie anticipatamente a tutto coloro che vorranno collaborare.

Saluti,
Marco
 

navajo75

Utente Attivo
16 Mar 2012
103
1
18
Come no, eccolo:

PHP:
$carrello = $_SESSION['carrello'];
    if(@isset($_GET['action'])) { 
      $action = $_GET['action'];
      switch ($action)
      {
        case 'aggiungi':
        if ($carrello) {
          $carrello .= ','.$_GET['id'];
        } else {
          $carrello = $_GET['id'];
      }
        break;		
        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;		 
	     case 'aggiorna':
           if ($carrello) {
      	     $acquisto = '';
      	     foreach ($_POST as $key=>$value) {
        	   if (@stristr($key,'quantita')) {
          	     $id = @str_replace('quantita','',$key);
          		 $prodotti = ($acquisto != '') ? 
          		 @explode(',',$acquisto) : @explode(',',$carrello);
          		 $acquisto = '';
				   foreach ($prodotti as $prodotto) {
            	     if ($id != $prodotto) {	
              		   if ($acquisto != '') {
                	     $acquisto .= ','.$prodotto;
              		   } else {
                		   $acquisto = $prodotto;
              			 }
            		   }
          		     }
  			         for ($i=1;$i<=$value;$i++) {
            	       if ($acquisto != '') {
              		     $acquisto .= ','.$id;
            		   } else {
              		       $acquisto = $id;
						 }
          		       }
        	         }
      		       }
    	        }
    		    $carrello = $acquisto;
    		    break;
  		      }
	        }
  $_SESSION['carrello'] = $carrello;
Grazie,
Marco
 

alessandro1997

Utente Attivo
6 Ott 2009
5.302
1
0
23
Roma
alessandro1997.netsons.org
Il problema è che usi due sessioni diverse per memorizzare i prodotti nel carrello e i dati sui prodotti, e tra di esse non c'è alcuna apparente relazione che puoi usare. L'ideale sarebbe modificare lo script in modo da usare solamente la sessione carrello, memorizzandoci l'array dei prodotti acquistati. In alternativa, potresti usare gli ID dei prodotti come chiavi nella sessione prodotti, così da poterlo usare per aggiornare entrambi gli array.
 

navajo75

Utente Attivo
16 Mar 2012
103
1
18
Grazie per quello che considero essere già un grosso aiuto.
Il problema, come dicevo nel primo post, è che sono una mezza sega con il PHP.
So che non puoi scrivermi tutto il codice, però ti sarei veramente grato se, supponendo di adottare la tua prima soluzione, cioè quella d'integrare tutto nella sessione del carrello, volessi darmi un aiuto più concreto.

Grazie,
Marco
 

navajo75

Utente Attivo
16 Mar 2012
103
1
18
Ma nel frattempo non ce la fai proprio a darmi una soluzione, scrivendo un pò di codice?
Devo completare questo sito.
 

navajo75

Utente Attivo
16 Mar 2012
103
1
18
Alessandro mi dai una mano per favore?
Non riesco proprio ad uscirne.

Grazie,
Marco