Visualizzazione dei risultati da 1 a 10 su 18

Hybrid View

  1. #1
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,509
    Vedi sempre e solo l'ultimo perché il cookie non lo modifichi, lo sovrascrivi ogni volta con l'ultimo articolo selezionato.
    Prima di salvare il cookie devi verificare se già esiste, se esiste prendi il suo contenuto (attualmente una stringa), ci aggiungi il nuovo articolo e risalvi tutto.

    Attualmente salvi 3 dati per il prodotto scelto: id, quantità e tipo utente (a che serve quest'ultimo dato visto che l'utente è sempre lo stesso?) e li dividi con un pipe |, ora se aggiungi un nuovo prodotto? Hai 2 strade, usi un nuovo separatore, tipo la virgola, per distinguerlo dal pipe e continuare ad usare explode (virgola divide i prodotti, pipe divide i dati di un prodotto), oppure più elegantemente e praticamente passi ad un array JSON che ti permette di salvare strutture complesse.

  2. #2
    Utente di HTML.it
    Registrato dal
    Jun 2017
    Messaggi
    56
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    Attualmente salvi 3 dati per il prodotto scelto: id, quantità e tipo utente (a che serve quest'ultimo dato visto che l'utente è sempre lo stesso?)
    Codice PHP:
    $tipoaccount= @$_SESSION['tipoaccount']; 
    mi serve per controllare il tipo di utente connesso, ovvero se esso e un rivenditore si va a prendere il rispettivo prezzo per i prodotto e così via..
    Codice PHP:
    $qta$_POST['quantita']; 
    ho aggiunto anche questo perche' rappresenta la quantita' di pezzi per quel prodotto che si vogliono inserire nel carrello

    per il resto ho capito cosa intendi che devo fare prima il controllo se il cookie è già settato, ho quindi modificato così il codice:
    codice:
     
    if(!isset($_COOKIE['acquisto'])) 
    {
        if(isset($_POST['IDprodotto'])&&isset($_POST['quantita']))
        {
            $tipoaccount= @$_SESSION['tipoaccount'];
            $IDprod= $_POST['IDprodotto'];
            $qta= $_POST['quantita'];
            echo 'ID PRODOTTO: '.$IDprod.'</br>';
            echo 'QUANTITA PRODOTTO: '.$qta.'</br>';
            echo 'TIPO DI UTENTE: '.$tipoaccount.'</br>';
    
    
            $stringa=$IDprod."|".$qta."|".$tipoaccount; 
            setcookie("acquisto", $stringa, time()+360000); 
        }
    }
    
    
    else {
        //accoda un nuovo prodotto
    }
    solo che non riesco a capire come devo tradurre quel blocco else per accodare un nuovo prodotto.

  3. #3
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,509
    Quote Originariamente inviata da cosmo98 Visualizza il messaggio
    Codice PHP:
    $tipoaccount= @$_SESSION['tipoaccount']; 
    mi serve per controllare il tipo di utente connesso, ovvero se esso e un rivenditore si va a prendere il rispettivo prezzo per i prodotto e così via..
    Ma è un'informazione ridondante, a che serve ripeterla per ogni prodotto? Già lo spazio a disposizione di un cookie è limitato, così sprechi un sacco di spazio.
    A questo punto direi che non puoi fare a meno di usare la notazione JSON per il contenuto del cookie, è diventato abbastanza complesso da rendere insensato l'uso della stringa con i divisori su cui fare l'explode.
    Devi salvarti un array JSON con le chiavi "tipoaccount" dove metti il tipo di utente una volta e basta, poi la chiave "prodotti" che conterrà a sua volta un array di prodotti e ogni prodotto sarà un array coi campi "id" e "quantità".
    Per ulteriori info su come usare JSON con PHP: http://php.net/manual/en/book.json.php
    per il resto ho capito cosa intendi che devo fare prima il controllo se il cookie è già settato [...]
    solo che non riesco a capire come devo tradurre quel blocco else per accodare un nuovo prodotto.
    Il cookie lo devi vedere come una variabile che contiene una stringa, lo leggi ed ottieni una stringa vera e propria.
    Ora, come fai ad aggiungere del testo ad una stringa? Concatenandolo con l'operatore . (punto), una volta concatenato il testo da aggiungere salvi di nuovo il cookie con la stringa aggiornata.
    Ad ogni modo, abbiamo detto che la stringa semplice non ha più senso nel tuo caso, quindi dovrai aggiornare l'array JSON (che in realtà è anch'esso una stringa, ma si gestisce diversamente, vedi il link sopra).

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2017
    Messaggi
    56
    ho seguito i tuoi consigli, ho modificato cosi il codice:
    codice:
    if(isset($_POST['IDprodotto'])&&isset($_POST['quantita']))
    {
        $IDprod= $_POST['IDprodotto'];
        $qta= $_POST['quantita'];
        $prodotti = array('IDprodotto' => $IDprod, 'quantita' => $qta);
        print_r($prodotti);
        
        $prodottiJS= json_encode($prodotti);
        echo '<br>'.$prodottiJS;
        
        if(!isset($_COOKIE['acquisto'])) 
        {
            setcookie("acquisto", $prodottiJS, time()+360000); 
        }
        
        else 
        {
            $_COOKIE['acquisto'].$prodottiJS;
        }   
    }
    qua vado a inizializzare il cookie se non è stato creato altrimenti accodo un nuovo elemento (come hai detto tu), mi sono reso conto che in realtà quel $_SESSION['tipoaccount'] non mi serve proprio, infatti essendo le variabili di sessioni superglobali posso in seguito vedere se l'utente è privato/rivenditore e vedere il corrispettivo prezzo tramite query ad database. Penso che questa prima parte non ce niente da modificare. Qualche problemino ce nel secondo script, quello dove vado a visualizzare:
    codice:
    if(isset($_COOKIE['acquisto'])) 
    {
        /*list($IDprod,$qta,$tipoaccount)=explode("|",$_COOKIE["acquisto"]);//[3]);
        echo 'ID PRODOTTO: '.$IDprod.'</br>';
        echo 'QUANTITA PRODOTTO: '.$qta.'</br>';
        echo 'TIPO DI UTENTE: '.$tipoaccount.'</br>';*/
        echo 'cookie settato';
        $prodotti = json_decode($_COOKIE['acquisto'], true);
        print_r($prodotti);
    }
    
    
    else echo 'cookie non settato';
    infatti cosi com'è adesso se ho più stringhe concatenate nel cookie non mi visualizza niente. Mi suggerisci come posso modificare?
    Grazie mille per i consigli che mi hai dato fino ad ora

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