Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2022
    Messaggi
    75

    Memorizzazione cookie tramite checkbox e lettura con PHP

    Buongiorno,

    ho un problema con la memorizzazione dei cookie (o almeno credo che il problema stia li, ma potrebbe anche non essere questo il problema). Dato che ci sto smanettando da diverse ore ed attualmente sono in una situazione di stallo, chiedo aiuto a Voi.

    Vi spiego prima cosa devo fare... In una pagina php leggo un file excel ed estrapolo i dati. Non sempre mi servono tutti i dati e quindi vorrei filtrarli prima della stampa a video. Per fare questo utilizzo dei checkbox presi da un array in php. Quindi dovrebbe accadere questo:

    1) al primo caricamento non c'� nessun checkbox selezionato e quindi non verr� stampato nulla dei dati.
    2) seleziono solo i checkbox che mi interessano.
    3) ricarico la pagina, leggo i cookie, rendo 'checked' i checkbox selezionati, memorizzo quelli da mostrare in un altro array php e stampo solo i dati che mi interessano.
    4) la volta successiva che ricarico la pagina, ovviamente dovrebbe tener conto dei checkbox selezionati l'ultima volta.


    Ho questa funzione javascript e premetto anche che l'alert mi restituisce correttamente il nome (che poi � anche l'id) del checkbox ed il valore true o false in base al fatto che sia stato selezionato o meno.
    codice:
    function saveCookie_DS (cb) {        //alert(cb.value + " - " + cb.checked);
            if (cb.checked == 1) {
                document.cookie = true;
                document.getElementById(cb.value).checked = true;
            } else {
                document.cookie = false;
                document.getElementById(cb.value).checked = false;
            }
        }

    Invece per quanto riguarda il codice php ho questo:
    codice:
    foreach ($array_distretti_sigla as $key => $value) {   if (isset($_COOKIE[$key])) {        
          print("_COOKIE ".$key." - ".$_COOKIE[$key]."</br>");        
          $tabella_errori_HTML .= "<pre align='center'>"."Cookie per ".$key." trovato</br>"."\r\n"."</pre>";
          $cb_DS_HTML .= "<input type='checkbox' name='".$key."' id='".$key."' value='".$key."' checked onChange='saveCookie_DS(this)' /><label>".$array_distretti_sigla[$key]."&nbsp;&nbsp;</label>";        
    	  array_push($array_DS_show, $key);    
       } else {        
          $cb_DS_HTML .= "<input type='checkbox' name='".$key."' id='".$key."' value='".$key."' onChange='saveCookie_DS(this)' /><label>".$array_distretti_sigla[$key]."&nbsp;&nbsp;</label>";    
       }
    }
    Grazie
    Ultima modifica di jip77; 24-11-2024 a 10:30

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,493
    Da quanto capisco, il cookie lo vuoi generare con JS e non si fa così. Devi dargli una chiave ed un valore, tipo
    codice:
    document.cookie = "username=pippo";
    
    // Nel tuo caso probabilmente
    document.cookie = cb.value + "=" + cb.checked;
    non solo true o false.
    Quando con PHP vai a cercare il cookie, non ha una chiave da usare
    Se necessario chiedi aiuto nella sezione JS su come procedere per generarlo correttamente.
    Ultima modifica di Alhazred; 24-11-2024 a 12:19

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2022
    Messaggi
    75
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    Da quanto capisco, il cookie lo vuoi generare con JS e non si fa così. Devi dargli una chiave ed un valore, tipo
    codice:
    document.cookie = "username=pippo";
    
    // Nel tuo caso probabilmente
    document.cookie = cb.value + "=" + cb.checked;
    non solo true o false.
    Quando con PHP vai a cercare il cookie, non ha una chiave da usare
    Se necessario chiedi aiuto nella sezione JS su come procedere per generarlo correttamente.
    Io sinceramente avrei fatto tutto in PHP, ma non ho idea di come si faccia

  4. #4
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,493
    Dipende tutto da come vuoi che avvengano le cose.
    Se vuoi che il cookie si salvi alla sola selezione/deselezione del checkbox senza inviare dati al server, devi usare JS come fai adesso, ma lo devi fare nel modo giusto, leggi qui per tutte le spiegazioni su creazione/lettura/modifica/eliminazione, comprese funzioni già scritte per gestire il tutto.
    Tieni presente però che in questo modo sovrascrivi il cookie ad ogni pressione dei checkbox.
    Avendo un cookie che deve contenere più dati devi decidere un nome per il cookie, tipo "distretti", e come valore usare un array JSON contenente coppie chiave/valore "cb.value/cb.checked", poi quando generi i vari checkbox dovrai ciclare su questo array per impostarne lo stato.
    Alla modifica del cookie dovrai ciclare su tutti i checkbox presenti sulla pagina per rigenerare l'array JSON.
    Nell'array JSON potresti anche metterci solo i nomi dei checkbox selezionati invece di tutti col relativo stato, quelli non presenti li puoi considerare come non selezionati.

    Se vuoi farlo in PHP hai 2 strade, semplice usando un form classico per inviare i dati al server ed elaborarli, più complicato, ma senza necessità di ricaricare la pagina, con chiamate asincrone AJAX ogni volta che clicchi su un checkbox.
    I cookie in PHP si gestiscono così.
    Anche in questo caso valgono le stesse cose del caso JS riguardo al contenuto del cookie.
    Ultima modifica di Alhazred; 24-11-2024 a 13:14

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2022
    Messaggi
    75
    In effetti la strada più semplice penso sia quella che sto usando ora, anche se continua a non funzionare. Ho modificato il codice così, giusto per capire dove sbaglio:

    codice:
    function saveCookie_DS (cb) {		//alert(cb.value + " - " + cb.checked);
    		if (cb.checked == true) {
    			document.cookie = cb.value + "=OK";
    		} else {
    			document.cookie = cb.value + "=KO";
    		}
    	}
    L'alert in javascript mi restituisce valori corretti

    codice:
    foreach ($array_distretti_sigla as $key => $value) {	if (isset($_COOKIE[$key]) == "OK") {
    		print("_COOKIE ".$key." - ".$_COOKIE[$key]." -</br>");
    		//.......
    		$cb_DS_HTML .= "<input type='checkbox' name='".$key."' id='".$key."' value='".$key."' checked onChange='saveCookie_DS(this)' /><label>".$array_distretti_sigla[$key]."&nbsp;&nbsp;</label>";
    		array_push($array_DS_show, $key);
    	} else {
    		print("_COOKIE non trovato per ".$key."</br>");
    		//.......
    		$cb_DS_HTML .= "<input type='checkbox' name='".$key."' id='".$key."' value='".$key."' onChange='saveCookie_DS(this)' /><label>".$array_distretti_sigla[$key]."&nbsp;&nbsp;</label>";
    	}
    }
    Magari il problema è in php, perché di questi cookie
    codice:
    if (isset($_COOKIE[$key]) == "OK") {
    non ne arriva nessuno e di conseguenza i vari checkbox (quelli spuntati in precedenza) non vengono rispuntati, come neppure viene riempito il nuovo array in php.

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2022
    Messaggi
    75
    Ho provato anche così ma non arriva nulla:
    codice:
    foreach ($array_distretti_sigla as $key => $value) {   
        if (isset($_COOKIE[$key])) {
            if ($_COOKIE[$key] == "OK") {
                print("_COOKIE ".$key." - ".$_COOKIE[$key]." -</br>");

  7. #7
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,493
    Ti ripeto una cosa importante che forse hai mancato:
    Salvando il cookie semplicemente come
    codice:
    document.cookie = cb.value + "=OK";
    ad ogni click su un checkbox andrai a sovrascrivere il cookie, che quindi conterrà sempre e solo l'informazione dell'ultimo checkbox con cui hai interagito.
    Se leggi il post che ti ho scritto prima trovi anche un modo per ovviare, l'array JSON.
    Ricorda anche di impostare una data di scadenza per il cookie, oppure verrà cancellato alla chiusura del browser. Leggi il link che ti ho indicato in precedenza.

    Comunque, visto che hai scelto la strada JS per i cookie, se ti serve aiuto sulla loro gestione, apri un nuovo post nella sezione JS.

  8. #8
    Utente di HTML.it
    Registrato dal
    Oct 2022
    Messaggi
    75
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    Ti ripeto una cosa importante che forse hai mancato:
    Salvando il cookie semplicemente come
    codice:
    document.cookie = cb.value + "=OK";
    ad ogni click su un checkbox andrai a sovrascrivere il cookie, che quindi conterrà sempre e solo l'informazione dell'ultimo checkbox con cui hai interagito.
    scusami ma cb.value coincide sempre con il nome del checkbox e quindi è come se avesse un id univoco, quindi è giusto che il nuovo valore sostituisca quello precedente (trattandosi sempre dello stesso checkbox).

    Intanto ho trovato un errore. L'ho scoperto facendo un print sui cookie:
    codice:
    print_r($_COOKIE);
    Il nome (e credo anche l'ID) del checkbox non può contenere spazi vuoti e quindi di defaut veniva messo l'underscore. Ho risolto così nel ciclo in php:
    codice:
    foreach ($array_distretti_sigla as $key => $value) {
        $key_cb = str_replace(" ", "_", $key);
        if (isset($_COOKIE[$key_cb])) {
            if ($_COOKIE[$key_cb] == "OK") {
    Ora funziona ma solo in parte, dato che i checkbox si selezionano a caso, anche se poi non sarà così perché un motivo ci deve sempre essere.
    Ultima modifica di jip77; 24-11-2024 a 17:09

  9. #9
    Utente di HTML.it
    Registrato dal
    Oct 2022
    Messaggi
    75
    Ho risolto.
    Mi sa che anche il punto dà problemi nel nome del checkbox. Da quando ho sostituito spazio vuoto e punto funziona regolarmente.

    Grazie di tutto

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