Problema pulsant cancella ed aggiorna del carrello

  • Creatore Discussione Creatore Discussione navajo75
  • Data di inizio Data di inizio

navajo75

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

sto sviluppando un ecommerce ed utilizzando un carrello preso su Mr. Webmaster (https://www.mrw.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: test@test.it 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
 
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
 
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.
 
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
 
Ma nel frattempo non ce la fai proprio a darmi una soluzione, scrivendo un pò di codice?
Devo completare questo sito.
 

Discussioni simili