Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    Modificare un cookie contenente più variabili

    Salve, vorrei chiedere come è possibile fare una operazione con i cookie;
    mettiamo conto che ho questo cookie:
    Codice PHP:
    $valore "a=1&b=1&c=1";
    setcookie("cookie""$valore"time() + 60); 
    Adesso con un explode() posso estrapolare i valori di ogni singola lettera, ma come faccio a modificare solo il valore della lettera b(ad esempio in b=2)?
    Se faccio prima explode con '&' e poi un'altro con '=' ottengo il suo valore, ma poi anche se estrapolo il valore non capisco come posso riscriverlo.
    Esiste un modo per modificare il valore di un cookie solo in un determinato punto, oppure devo per forza ricrearlo da capo con il nuovo valore?
    Ultima precisazione: la varibile da modificare la faccio coincidere con un filtro della pagina che viene richiamata, in questo caso fate conto che sia b.

  2. #2
    Utente di HTML.it L'avatar di IAL32
    Registrato dal
    Aug 2011
    Messaggi
    88
    Devi ricrearlo da capo mi sa(probabilmente mi sbaglio, ma credo che quello che ti sto per proporre è un metodo molto più semplice).
    Potresti usare un preg_replace, usando un pattern per i parametri degli URL
    Oppure, usando appunto explode(), potresti fare nel seguente modo:

    Codice PHP:
    $cook "a=1&b=2&c=3";
    $arr = array();
    foreach(
    explode('&'$cook) as $value) {
        
    //il valore così ottenuto avrà:
        /*
        a=1
        b=2
        c=3
        */
        //è sufficente che questi valori li
        //"explodi" di nuovo e li metti ancora
        //in un array
        
    $temp explode('='$value);
        
    //l'array così creato avrà valori:
        /*
        a=1 diventa -> array( 0 => 'a' , 1 => '1' )
        b=2 diventa -> array( 0 => 'b' , 1 => '2' )
        c=3 diventa -> array( 0 => 'c' , 1 => '3' )
        */
        //quindi assegnamo alla chiave il valore 0
        //mentre al valore il valore 1
        
    $arr[$temp[0]] = $temp[1];
    }
    //alla fine del procedimento ci sarà un array così:
    /*
    $arr = array(
        'a' => '1',
        'b' => '2',
        'c' => '3'
    )
    */
    //e in questo array puoi togliere, mettere, modificare
    //valori come vuoi. 

  3. #3
    Ottimo metodo, adesso ho capito come fare, grazie.
    Comunque non stò usando preg_replace, in quanto non la reputo necessaria nel mio caso, utilizzo piuttosto preg_match per trovare subito l'array di cui ho bisogno nel cookie, e se non esiste crearlo. Scriverò ancora se magari troverò eventuali problemi che ancora non ho notato. Grazie!


    P.S. avevo usato un metodo simile al tuo, mi mancava solo questo:
    Codice PHP:
        $arr[$temp[0]] = $temp[1]; 

  4. #4
    Utente di HTML.it L'avatar di Secta
    Registrato dal
    May 2002
    Messaggi
    365
    Guardando come è formattato il tuo cookie, potresti semplicemente fare cosi:

    Codice PHP:
    parse_str('a=1&b=1&c=1'$tmp);

    $tmp['b'] = 2;    

    echo 
    http_build_query($tmp); 
    "Dai diamanti non nasce niente, dal letame nascon fiori."
    Fabrizio De Andrè

  5. #5
    Ottimo anche questo metodo, ho notato che risparmio 1-2 righe di codice e non ho più bisogno di fare lo split.
    Adesso chiedo un'ultima cosa che mi è venuta in mente dopo, ma di cui non posso farne a meno, perchè se non riesco dovrò creare 3 cookie differenti anzichè uno.
    Devo creare diversi valori e separarili da uno slash, esempio:
    codice:
    lettera=a-d&a=1/lettera=b&b=1/lettera=c&c=1
    Nel crearlo non c'è problema, ma ho bisogno di modificarlo, aggiungendo e levando valori un un punto specifico:
    codice:
    lettera=a-d&a=1&d=1/lettera=b&b=1/lettera=c&c=1
    Al momento riesco ad aggiungere il nuovo valore soltanto sopo "c=1", ma come faccio se volessi aggiungerlo sopo "a=1"?

  6. #6
    Utente di HTML.it L'avatar di IAL32
    Registrato dal
    Aug 2011
    Messaggi
    88
    Sempre una cosa basilare con gli array.
    Usi explode() o split() per lo slash, ottieni quindi 3 array contenenti:
    lettera=a-d&a=1
    lettera=b&b=1
    lettera=c&c=1
    Poi per ognuno di questi tre usi la soluzione di Secta, modifichi e per rimettere insieme le parti, usi implode() o join()

  7. #7
    Ottima risposta, grazie. Adesso mi rimarrebbe un solo problema di cui non mi sono accorto sbito perchè si manifesta solo nel caso in cui il dato che prendo non sia il primo in assoluto nella "lista" dopo lo split:
    Codice PHP:
    $splitta explode('&'$cookie);
    $cerca array_search($variabile_get$splitta);
    $stampa $splitta[$cerca];
    echo 
    $stampa
    Il problema è questo: se dopo lo split mi ritrovo con: $splitta[0]=($b=1); & $splitta[1]=($c=1);
    ma la variabile della pagina da modificare è c=1, viene sempre stampato b=1.
    Semplicemente: se $variabile_get ha valore c=1, $stampa ha sempre valore b=1.
    Credo di usare la funzione in maniera sbagliata: qualcuno può illuminarmi?

    P.S. Ho stampato tutte le variabili che agiscono prima e i valori sono corretti, perfino dopo questo codice non ci dovrebbero essere errori, visto che si riunisce tutto e riscrive con il nuovo valore(solo che è sempre b ad essere modificato).


  8. #8
    Scusate dimenticavo di aggiornare: problema risolto con uno "switch".
    Grazie a tutti per l'auto.

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.