- Home
- Categorie
- Coding e Sistemistica
- PHP
- carrello, array e session
-
carrello, array e session
ciao a tutti, ho una pagina contentente le categorie, ogni categoria rimanda alla pagina articoli, seleziono gli articoli, premo invia e mi compare una bella tabella riassuntiva con gli articoli selezionati.
Gli articoli sono messi all interno di una variabile $_SESSION['spesa'] = array ().La domanda è: seleziono un altra categoria > seleziono altri articoli > a questo punto devo inserire gli articoli 'nuovi' con quelli 'vecchi'.
:?:():
-
si non si capisce bene quello che vuoi fare....ma se vuoi semplicemente aggiungere articoli all'array $_SESSION['spesa']
basta fare $_SESSION['spesa'][] = $nuovoArticolo;
$nuovoArticolo sarà una variabile che potrà contenere l'iformazione che desideri
id di un prodotto
tutto l'array del prodotto
ecc...spero di aver capito bene il tuo problema...
-
si sì l hai capito perfettamente Melkor..
pagina articoli a.php (dove seleziono gli articoli)
while ($row = mysql_fetch_array($res,MYSQL_ASSOC)){ $id = $row['id']; $nome_art = $row['codparte']; $desestesa = $row['desestesa']; $pre_uni = $row['preuni']; $urlimg = $row['urlimg']; echo " <td $align_art > <div class='contenuto'> <center> ".$pre_uni." ".$euro." </center> </div> </td> <td $align_art width='12%' height='110px' > <div class='contenuto'> <center> n$pallino <input type='text' name='num_quant' value='' size='1' maxlength='2' $disable> </center> </div> </td> <td $align_art width='16%' > <div class='contenuto'> <center> Inserisci <input type='checkbox' name='carrello[]' value='$id'> <img src='../../img/carrello.gif'> </center> </div> </td> </tr> <tr bgcolor='yellow'> <td colspan='4' style='font-size:1px;'> </td> </tr>"; }
pagina riassunto r.php (dove viene visualizzata la bella tabella..)
if (!isset($_POST['carrello'])) { echo "non hai selezionato alcun articolo, torna indietro " ; } elseif(isset($_POST['carrello'])){ $spesa = $_SESSION['spesa']; $spesa = array ('art_id' => $value , 'art_nome' => $nome_art , 'art_prez' => $prez_art , 'art_quant' => $quantita ); elseif (isset($spesa)){ $spesa[] = array ('art_id' => $value , 'art_nome' => $nome_art , 'art_prez' => $prez_art , 'art_quant' => $quantita ); print_r($spesa); }
ho riportato solo parte del codice per non appesantire la spiegazione, se non si capisce posto il resto del codice..
In questa pagina controllo che se la sessione $spesa è settata inserisco i valori nell array $_SESSION['spesa']
ma mi sa che sbaglio..:?
grazie
-
sbagli...sempre se ho capito bene
tu hai questa pagina html dove l'utente seleziona questi prodotti poi preme un pulsante e questi prodotti dovrebbero finire dentro l'array
il codice allora è questo qua
[PHP]
if (!isset($_POST['carrello'])) {echo "non hai selezionato alcun articolo, torna indietro " ; } elseif(isset($_POST['carrello'])){ $spesa = is_array($_SESSION['spesa']) ? $_SESSION['spesa'] : array(); $spesa[] = array ('art_id' => $value , 'art_nome' => $nome_art , 'art_prez' => $prez_art , 'art_quant' => $quantita ); $_SESSION['spesa'] = &$spesa; print_r($spesa); }
[/PHP]
questo dovrebbe funzionare è da sottolineare che questo codice ha un bug....
se l'utente inserisce 2 o più volte lo stesso prodotto verrà inserito un elemento già presente nell'array e quindi ci saranno elementi duplicati che possono essere considerate inutili perchè basterebbe incrementare il contatore quantità
per fare questo basta fare una funzione che cerca il prodotto nell'array e se esiste incrementa il contatore...
oppure sistemi l'array in modo migliore, mettendo come indice ad esempio l'id del prodotto che ne so
$spesa[ $id_prodotto ] se l'elemento esiste icrementi solo il contatore 'quantità' altrimenti inserisci il nuovo elemento $spesa[ $id_prodotto ] = $prodottola differenza nelle due soluzioni sta nella complessità
la prima hai complessità di uan ricerca lineare quindi O(n)
nella seconda soluzione invece è hash quindi costante O(1)