• User Newbie

    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'.

    :?:():


  • User

    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...


  • User Newbie

    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;'> &nbsp; </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


  • User

    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 ] = $prodotto

    la 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)

    😉