Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2017
    Messaggi
    56

    gestire stringa in formato JSON

    salve devo realizzare una simulazione di un "carrello degli acquisti" tramite i cookie, mi è stato consigliato di aggiungere all'interno di una variabile cookie una stringa aggiornata in formato JSON contenente il codice del prodotto e la quantita' desiderata, questo ogni volta che voglio aggiungere un nuovo prodotto a carrello.

    ho fatto delle prove:
    codice:
    $IDprod= rand(10, 100);    
    $IDprod1= rand(1, 300);    
    $IDprod2= rand(15, 177);    
    $qta= rand(10, 130);    
    $qta2= rand(10, 500);    
    $qta1= rand(1, 180);    
    $prodottiJS= '[{"IDprodotto":'.$IDprod.',"quantita":'.$qta.'},{"IDprodotto":'.$IDprod1.',"quantita":'.$qta1.'},{"IDprodotto":'.$IDprod2.',"quantita":'.$qta2.'}]';
    echo'formato JSON<br>';    
    echo $prodottiJS.'<br><br>';
    $user = json_decode($prodottiJS, true);    
    echo'formato array<br>';    
    print_r($user);
    cosi come è adesso ho simulato 3 prodotti, tramite una rand, ma come faccio invece a passarli ogni volta tramite $_POST? mi spiego meglio, in questa stringa JSON non ci saranno mai lo stesso numero di record (numero di prodotti a carrello), come devo fare per aggiungerne altri?

    chiaramente una volta che ho la stringa pronta vado a settare un cookie facendo cosi:
    Codice PHP:
    setcookie("acquisto"$prodottiJStime()+360000); 
    chiaramente facendo prima un controllo per vedere se il cookie era già stato settato (se ci sono gia' articoli nel carrello)

    Vi ringrazio in anticipo, spero che riuscirò a risolvere il problema prima che dovro' portare il progetto agli esami di stato.
    Ultima modifica di cosmo98; 29-05-2018 a 15:36

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    Lato PHP non lavorerai davvero con JSON.
    Prendi la stringa JSON, la passi alla funzione json_decode() ed avrai un normale array PHP, è su questo che opererai le modifiche.
    Una volta modificato l'array PHP, lo passerai alla funzione json_encode() che lo trasformerà di nuovo in una stringa JSON.
    Codice PHP:
    // array PHP
    $prodottiPHP = [];
    for( 
    $i=0$i<3$i++ )
    {
        
    // inserisco 3 prodotti a caso nell'array PHP
        
    $prodotti[] = ['IDprodotto' => rand(10,300), 'quantita' => rand(1,100)];
    }

    // adesso mi serve l'array JSON
    $prodottiJS json_encode($prodottiPHP);

    echo 
    $prodottiJS "<br>";

    // ad un certo punto devo aggiungere un prodotto
    // cambio variabile solo per farti capire, in questo caso non sarebbe necessario
    $prodottiPHPnew json_decode($prodottiJStrue);

    $prodottiPHPnew[] = ['IDprodotto' => rand(10,300), 'quantita' => rand(1,100)];

    // aggiorno l'array JSON
    $prodottiJS json_encode($prodottiPHPnew);

    echo 
    $prodottiJS "<br>"

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2017
    Messaggi
    56
    innanzitutto ti ringrazio..
    ho modificato cosi lo script:
    codice:
    if(isset($_POST['IDprodotto'])&&isset($_POST['quantita']))
    {
        $IDprod= $_POST['IDprodotto'];
        $qta= $_POST['quantita'];
        if(isset($_COOKIE['acquisto'])) 
        {
    
    
            // ad un certo punto devo aggiungere un prodotto
            // cambio variabile solo per farti capire, in questo caso non sarebbe necessario
            $prodottiPHPnew = json_decode($_COOKIE['acquisto'], true);
    
    
            $prodottiPHPnew[] = ['IDprodotto' => $IDprod, 'quantita' => $qta];
            echo'array aggiornato<br>';
            print_r($prodottiPHPnew);
            
    
    
            // aggiorno l'array JSON
            $prodottiJS = json_encode($prodottiPHPnew);
            echo'<br><br>JSON aggiornato<br>';
            echo $prodottiJS; 
            setcookie("acquisto", $prodottiJS, time()+360000);
        }
    
    
        
        else 
        {
            /*$prodottiPHP = [];
            for( $i=0; $i<3; $i++ )
            {*/
                // inserisco 3 prodotti a caso nell'array PHP
                $prodottiPHP[] = ['IDprodotto' => $IDprod, 'quantita' => $qta];
            //}
    
    
            // adesso mi serve l'array JSON
            $prodottiJS = json_encode($prodottiPHP);
            echo $prodottiJS . "<br>";
            
            setcookie("acquisto", $prodottiJS, time()+360000); 
        }  
    }
    sembra funzioni correttamente, adesso se voglio accedere ad esempio al prodotto con id=10 devo fare un json_decode della variabile cookie e poi accedere tramite array giusto?

  4. #4
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    Esatto.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2017
    Messaggi
    56
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    Esatto.
    il problema è che non riesco a ciclare correttamente l'array, essendo esso multidimensionale non riesco con un normale foreach ad accedere alle singole righe. Ho provato a fare cosi:
    codice:
    if(isset($_COOKIE['acquisto'])) 
    {
        echo 'cookie settato';
        $prodotti = json_decode($_COOKIE['acquisto'], true);
        print_r($prodotti);
        
        
        echo "<br>";
        for ($row = 0; $row < 4; $row++) {
          echo "<p><b>Row number $row</b></p>";
          echo "<ul>";
          for ($col = 0; $col <= 2; $col++) {
            echo "<li>".$prodotti[$row][$col]."</li>";
          }
          echo "</ul>";
        }
        
    }
    
    
    else echo 'cookie non settato';
    fin quando stampo con print_r tutto ok ma se voglio ottenere lo stesso risultato con quei due for annidati mi da una serie di errori. Dove sbaglio?
    inoltre ho messo come numero di row < 4 (numero di prodotti), nella reata' pero' non so quante righe sono, come faccio a dire che si deve fermare quando esse finiscono? Sara' pure una domanda stupida ma sono abituato a stampare gli array con la funzione foreach()

  6. #6
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    Ma perché devi usare for e gli indici numerici? Usa un foreach e i nomi delle chiavi.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2017
    Messaggi
    56
    ho provato ma mi restituisce lo stesso una serie di errori

  8. #8
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    Magari se dici gli errori che ottieni si capisce qualcosa.

  9. #9
    Utente di HTML.it
    Registrato dal
    Jun 2017
    Messaggi
    56
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    Magari se dici gli errori che ottieni si capisce qualcosa.
    ho provato cosi:
    codice:
        foreach ($prodotti as $idprodotto => $id) {
          foreach ($quantita as  $qta) {
            echo  $id;
            echo  $qta;
          }
        }
    questi sono gli errori che mi restituisce:
    Notice: Undefined variable: quantita in C:\Users\Cosmo\Documents\ceramica_ultimo_sito\ques toeilcarrello.php on line 45

    Warning: Invalid argument supplied for foreach() in C:\Users\Cosmo\Documents\ceramica_ultimo_sito\ques toeilcarrello.php on line 45

    Notice: Undefined variable: quantita in C:\Users\Cosmo\Documents\ceramica_ultimo_sito\ques toeilcarrello.php on line 45

    Warning: Invalid argument supplied for foreach() in C:\Users\Cosmo\Documents\ceramica_ultimo_sito\ques toeilcarrello.php on line 45

    Notice: Undefined variable: quantita in C:\Users\Cosmo\Documents\ceramica_ultimo_sito\ques toeilcarrello.php on line 45

    Warning: Invalid argument supplied for foreach() in C:\Users\Cosmo\Documents\ceramica_ultimo_sito\ques toeilcarrello.php on line 45

    Notice: Undefined variable: quantita in C:\Users\Cosmo\Documents\ceramica_ultimo_sito\ques toeilcarrello.php on line 45

    Warning: Invalid argument supplied for foreach() in C:\Users\Cosmo\Documents\ceramica_ultimo_sito\ques toeilcarrello.php on line 45

    Notice: Undefined variable: quantita in C:\Users\Cosmo\Documents\ceramica_ultimo_sito\ques toeilcarrello.php on line 45

    Warning: Invalid argument supplied for foreach() in C:\Users\Cosmo\Documents\ceramica_ultimo_sito\ques toeilcarrello.php on line 45

    Notice: Undefined variable: quantita in C:\Users\Cosmo\Documents\ceramica_ultimo_sito\ques toeilcarrello.php on line 45

    Warning: Invalid argument supplied for foreach() in C:\Users\Cosmo\Documents\ceramica_ultimo_sito\ques toeilcarrello.php on line 45

  10. #10
    Utente di HTML.it
    Registrato dal
    Jun 2017
    Messaggi
    56
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    Magari se dici gli errori che ottieni si capisce qualcosa.
    ho modificato cosi:
    codice:
        echo 'cookie settato';
        $prodotti = json_decode($_COOKIE['acquisto'], true);
        print_r($prodotti);    
        echo "<br>";
    
    
        foreach ($prodotti as $id => $prodotto) {
            echo  'prodotto: '.$id.'</br>';
            foreach ($prodotto as  $valore) {
                echo  $valore.' ';
            }
            echo '</br>';
        }
    adesso funziona, ma non è ancora abbastanza, ovvero non riesco ad accedere solo al codice prodotto o alla quantita' per poter fare la query.
    ti riporto cio' che mi stampa:
    prodotto: 0
    10 1
    prodotto: 1
    1 1
    prodotto: 2
    9 3
    prodotto: 3
    17 2
    prodotto: 4
    1 1
    prodotto: 5
    10 1

    sotto prodotto, la prima cifra rappresenta il codice del prodotto mentre la seconda la quantita'

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.