Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2017
    Messaggi
    56

    gestione di un carrello degli acquisti

    salve, tramite un cookie gestisco un carrello degli acquisti.
    la variabile cookie, in questo caso � un array JSON, che per gestirlo tramite lo converto in un array multidimensionale, nella seguente forma:
    codice:
    $prodottiPHPnew[]= ['IDprodotto' => $IDprod, 'quantita' => $qta];
    supponiamo che nel mio carrello ci sono degli altri articoli, quando sto per aggiungere un nuovo articolo, se questo risulta gia' presente nel carrello, voglio che si sommino soltanto le quantita'. In caso negativo invece, questo prodotto si deve aggiungere agli altri.
    ho provato a fare in questo modo:
    codice:
        $IDprod= $_POST['IDprodotto'];
        $qta= $_POST['quantita'];
        $IDNonPresente= false;
        if(isset($_COOKIE['acquisto'])) //se sono gi� presenti articoli nel carrello
        {
            $prodottiPHPnew = json_decode($_COOKIE['acquisto'], true); //vado a prelevare l'array del carrello
            //l'array � cos� strutturato: $prodottiPHPnew[]= ['IDprodotto' => $IDprod, 'quantita' => $qta];
            for ($row = 0; $row <count($prodottiPHPnew); $row++)
            {
                if ($IDprod == $prodottiPHPnew[$row]["IDprodotto"]) //se � gi� presente un prodotto nel carrello con lo stesso codice..
                    $prodottiPHPnew[$row]["quantita"]+=$qta; //...vado solo a sommare le quantit�
    
    
                else {
                    $IDNonPresente= true; //altrimenti mi segno che quel prodotto non � gi� presente nell'array � forzo l'uscita dal ciclo con break
                    break;
                }
            }
            
            if($IDNonPresente) //se il prodotto non � gi� presente nell'array, lo vado ad accodare e ripongo $IDNonPresente= false;
            {
                $prodottiPHPnew[] = ['IDprodotto' => $IDprod, 'quantita' => $qta];
                $IDNonPresente= false;
            }
            
            echo'array aggiornato<br>';
            print_r($prodottiPHPnew);
    
    
            // aggiorno l'array JSON
            $prodottiJS = json_encode($prodottiPHPnew); //vado ad convertire l'array in un array json 
            echo'<br><br>JSON aggiornato<br>';
            echo $prodottiJS; 
            setcookie("acquisto", $prodottiJS, time()+360000); //qui vado ad aggionare il cookie del carrello con il nuovo array 
            header("location: infoprodotto_new.php");
        }
    Non funziona correttamente, infatti se ho un solo prodotto nel carrello e vado ad aggiungere sempre lo stesso prodotto, si sommano soltanto le quantit� (FINO A QUA TUTTO OK), quando aggiungo un altro prodotto (non presente) si aggiunge al carrello (ANCORA TUTTO OK), quando invece tento di aggiungere di nuovo lo stesso prodotto questo oltre a sommare le quantit� me ne accoda un altro nell'array.
    Mi spiego meglio, supponiamo che nel carrello ho i seguenti prodotti:
    CODPRODOTTO, QUANTITA'
    2, 5
    5, 3

    se voglio aggiungere un altro pezzo per il prodotto con codice 5, l'array mi diventa cosi:
    CODPRODOTTO, QUANTITA'
    2, 5
    5, 4
    5, 1
    ovvero mi aggiunge due volte lo stesso prezzo.


    Potete suggerirmi come posso sistemare la cosa? Grazie in anticipo.
    NB: e solo un progetto a scopo didattico, che presenter� agli esami di stato, quindi non sto creando un'applicazione da vendere!!

  2. #2
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,344
    Prova con for($row =0; $row <count($prodottiPHPnew)-1; $row++)
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  3. #3
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Direi che il tuo ciclo for è sbagliato: quando trovi il prodotto devi uscire dal ciclo, altrimenti se ci sono altri elementi al passo successivo ti ritroverai sempre con $IDnonpresente a true. Stesso discorso se il prodotto si trova nelle posizioni > 0: il primo ciclo mette la variabile ad true. Cambia così:
    Codice PHP:
    $nonPresente true;
    for(
    $row 0; ....){
       if (
    $IDprod == $prodottiPHPnew[$row]["IDprodotto"]) {
           
    $prodottiPHPnew[$row]["quantita"]+=$qta;
           
    $nonPresente false;
           break;
       }

    Una cosa carina, sarebbe di usare l'IDprodotto come chiave per il tuo array:
    Codice PHP:
    $prodottiPHPnew[$IDprod] = ['IDprodotto'=>$IDprod'qta'=>$qta]; 
    così, al posto del for, ti basta solo verificare se esiste la chiave:
    Codice PHP:
    $prodottiPHPnew json_decode($_COOKIE['acquisto'], true);
    if(isset(
    $prodottiPHPnew[$IDprod])){
       
    $prodottiPHPnew[$IDprod]['qta'] += $qta
    }else{
       
    $prodottiPHPnew[$IDprod] = ['IDprodotto'=>$IDprod'qta'=>$qta];
    }
    $prodottiJS json_encode($prodottiPHPnew); 
    Ultima modifica di boots; 09-06-2018 a 09:54

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2017
    Messaggi
    56
    Quote Originariamente inviata da boots Visualizza il messaggio
    Direi che il tuo ciclo for è sbagliato: quando trovi il prodotto devi uscire dal ciclo, altrimenti se ci sono altri elementi al passo successivo ti ritroverai sempre con $IDnonpresente a true. Stesso discorso se il prodotto si trova nelle posizioni > 0: il primo ciclo mette la variabile ad true. Cambia così:
    Codice PHP:
    $nonPresente true;
    for(
    $row 0; ....){
       if (
    $IDprod == $prodottiPHPnew[$row]["IDprodotto"]) {
           
    $prodottiPHPnew[$row]["quantita"]+=$qta;
           
    $nonPresente false;
           break;
       }

    Una cosa carina, sarebbe di usare l'IDprodotto come chiave per il tuo array:
    Codice PHP:
    $prodottiPHPnew[$IDprod] = ['IDprodotto'=>$IDprod'qta'=>$qta]; 
    così, al posto del for, ti basta solo verificare se esiste la chiave:
    Codice PHP:
    $prodottiPHPnew json_decode($_COOKIE['acquisto'], true);
    if(isset(
    $prodottiPHPnew[$IDprod])){
       
    $prodottiPHPnew[$IDprod]['qta'] += $qta
    }else{
       
    $prodottiPHPnew[$IDprod] = ['IDprodotto'=>$IDprod'qta'=>$qta];
    }
    $prodottiJS json_encode($prodottiPHPnew); 
    Ho seguito la tua logica adesso funziona.. Grazie mille

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 © 2024 vBulletin Solutions, Inc. All rights reserved.