Visualizzazione risultati 1 fino 20 di 20

Discussione: Problema con i cookies

  1. #1
    Guest

    Predefinito Problema con i cookies

    Buongiorno a tutti :)
    Nel mio sito ho bisogno che un variabile numerica acquisita dall'invio di tre form, rimanga anche dopo il refresh della pagina. Così ho deciso di usare i cookies, ma per qualche oscuro motivo non funzionano: quando si refresha la pagina la variante $totale si standardizza su 1 invece che sul numero ottenuto dai form. Vedete qualche mio errore? Codice del form:
    Codice HTML:
    <div id="ac_content" class="ac_content">
    			<h1>Oracolo del Web<span><br />Completa i campi e poi premi invio</span></h1>
    			<form name="campo" action="frase2.php" method="post">
    			<div class="ac_menu"> 
    				<ul>
    					<li>
    						<a href="images/galassia2.jpg">Giorno</a>
    						<div class="ac_subitem">
    							<span class="ac_close"></span>
    							<h2>Giorno</h2>
    							<ul>
    								<li>Che giorno è oggi? Inserisci il numero qui sotto e premi invio sulla tastiera.</li>
    								<li><br /></li>
    							</ul>
    							<input type="text" name="giorno" size="15" maxlength="4" onkeyup="char_consentiti(this)">
    						</div>
    					</li>
    					<li>
    						<a href="images/galassia3.jpg">Mese</a>
    						<div class="ac_subitem">
    							<span class="ac_close"></span>
    							<h2>Mese</h2>
    							<ul>
    								<li>In che mese siamo oggi? Inserisci il numero qui sotto e premi invio sulla tastiera.</li>
    								<li><br /></li>
    							</ul>
    							<input type="text" name="mese" size="15" maxlength="4" onkeyup="char_consentiti(this)">
    						</div>
    					</li>
    					<li>
    						<a href="images/galassia4.jpg">Nome</a>
    						<div class="ac_subitem">
    							<span class="ac_close"></span>
    							<h2>Nome</h2>
    							<ul>
    								<li>Come ti chiami? Inserisci il tuo nome qui sotto e premi invio sulla tastiera.</li>
    								<li><br /></li>
    							</ul>
    							<input type="text" name="nome" size="15" maxlength="15">
    						</div>
    					</li>
    					<li>
    						<a href="images/galassia5.jpg">Invio</a>
    						<div class="ac_subitem">
    							<span class="ac_close"></span>
    							<h2>Invio</h2>
    							<ul>
    								<li><p>Premi Invia per visualizzare il responso dell'oracolo.</p></li>
    								<li><br /></li>
    							</ul>
    							<input type="submit" name="Invia"  value="  Invia  " onclick="location.href='frase2.php'">
    						</div>
    					</li>
    				</ul>
    			</div>
    			</form>
    		</div>
    Cookies e codice PHP:
    Codice PHP:
    <?php
    if (isset($_POST['giorno']))
    {
    $giorno = htmlspecialchars($_POST['giorno']);
    }

    if (isset(
    $_POST['mese']))
    {
    $mese = htmlspecialchars($_POST['mese']);
    }

    if (isset(
    $_POST['nome']))
    {
    $nome = htmlspecialchars($_POST['nome']);
    }

    $lunghezzanome = strlen($nome);
    $numero = $giorno + $mese + $lunghezzanome;

    setcookie("cookie", $numero);
    ?>
    <?php
    if(isset($_COOKIE["cookie"]))
    {
    $totalee = $_COOKIE["cookie"];
    }

    $totale = $totalee;

    if(!
    $_GET)
    {
    switch(
    $totale)
    {
    case
    $totale == 0 || $totale == 10 || $totale == 20 || $totale == 30 || $totale == 40 || $totale == 50 || $totale == 60 || $totale == 70 || $totale == 80 || $totale == 90 || $totale == 100;
    $frasi = file('txt/frasi0.txt', FILE_IGNORE_NEW_LINES);
    $indice_random = array_rand($frasi);
    echo
    '<a href="condividi.php?id_frase='.$indice_random.'">' . $frasi[$indice_random] . '</a>';
    break;

    case
    $totale == 1 || $totale == 11 || $totale == 21 || $totale == 31 || $totale == 41 || $totale == 51 || $totale == 61 || $totale == 71 || $totale == 81 || $totale == 91 || $totale == 101;
    $frasi = file('txt/frasi1.txt', FILE_IGNORE_NEW_LINES);
    $indice_random = array_rand($frasi);
    echo
    '<a href="condividi.php?id_frase='.$indice_random.'">' . $frasi[$indice_random] . '</a>';
    break;

    case
    $totale == 2 || $totale == 12 || $totale == 22 || $totale == 32 || $totale == 42 || $totale == 52 || $totale == 62 || $totale == 72 || $totale == 82 || $totale == 92 || $totale == 102;
    $frasi = file('txt/frasi2.txt', FILE_IGNORE_NEW_LINES);
    $indice_random = array_rand($frasi);
    echo
    '<a href="condividi.php?id_frase='.$indice_random.'">' . $frasi[$indice_random] . '</a>';
    break;

    case
    $totale == 3 || $totale == 13 || $totale == 23 || $totale == 33 || $totale == 43 || $totale == 53 || $totale == 63 || $totale == 73 || $totale == 83 || $totale == 93 || $totale == 103;
    $frasi = file('txt/frasi3.txt', FILE_IGNORE_NEW_LINES);
    $indice_random = array_rand($frasi);
    echo
    '<a href="condividi.php?id_frase='.$indice_random.'">' . $frasi[$indice_random] . '</a>';
    break;

    case
    $totale == 4 || $totale == 14 || $totale == 24 || $totale == 34 || $totale == 44 || $totale == 54 || $totale == 64 || $totale == 74 || $totale == 84 || $totale == 94 || $totale == 104;
    $frasi = file('frasi4.txt', FILE_IGNORE_NEW_LINES);
    $indice_random = array_rand($frasi);
    echo
    '<a href="condividi.php?id_frase='.$indice_random.'">' . $frasi[$indice_random] . '</a>';
    break;

    case
    $totale == 5 || $totale == 15 || $totale == 25 || $totale == 35 || $totale == 45 || $totale == 55 || $totale == 65 || $totale == 75 || $totale == 85 || $totale == 95 || $totale == 105;
    $frasi = file('txt/frasi5.txt', FILE_IGNORE_NEW_LINES);
    $indice_random = array_rand($frasi);
    echo
    '<a href="condividi.php?id_frase='.$indice_random.'">' . $frasi[$indice_random] . '</a>';
    break;

    case
    $totale == 6 || $totale == 16 || $totale == 26 || $totale == 36 || $totale == 46 || $totale == 56 || $totale == 66 || $totale == 76 || $totale == 86 || $totale == 96 || $totale == 106;
    $frasi = file('txt/frasi6.txt', FILE_IGNORE_NEW_LINES);
    $indice_random = array_rand($frasi);
    echo
    '<a href="condividi.php?id_frase='.$indice_random.'">' . $frasi[$indice_random] . '</a>';
    break;

    case
    $totale == 7 || $totale == 17 || $totale == 27 || $totale == 37 || $totale == 47 || $totale == 57 || $totale == 67 || $totale == 77 || $totale == 87 || $totale == 97 || $totale == 107;
    $frasi = file('txt/frasi7.txt', FILE_IGNORE_NEW_LINES);
    $indice_random = array_rand($frasi);
    echo
    '<a href="condividi.php?id_frase='.$indice_random.'">' . $frasi[$indice_random] . '</a>';
    break;

    case
    $totale == 8 || $totale == 18 || $totale == 28 || $totale == 38 || $totale == 48 || $totale == 58 || $totale == 68 || $totale == 78 || $totale == 88 || $totale == 98 || $totale == 108;
    $frasi = file('txt/frasi8.txt', FILE_IGNORE_NEW_LINES);
    $indice_random = array_rand($frasi);
    echo
    '<a href="condividi.php?id_frase='.$indice_random.'">' . $frasi[$indice_random] . '</a>';
    break;

    case
    $totale == 9 || $totale == 19 || $totale == 29 || $totale == 39 || $totale == 49 || $totale == 59 || $totale == 69 || $totale == 79 || $totale == 89 || $totale == 99 || $totale == 109 || $totale == $totale >= 110;
    $frasi = file('txt/frasi9.txt', FILE_IGNORE_NEW_LINES);
    $indice_random = array_rand($frasi);
    echo
    '<a href="condividi.php?id_frase='.$indice_random.'">' . $frasi[$indice_random] . '</a>';
    break;
    }
    }
    else
    {
    $frasi = file('txt/frasi.txt', FILE_IGNORE_NEW_LINES);
    $indice_random = $_GET['id_frase'];
    echo
    $frasi[$indice_random];
    }
    ?>
    Scusate l'immane lunghezza, spero che qualche buon anima si prenda la briga di legger tutto
    Grazie mille e buona domenica :)

  2. #2
    L'avatar di saitfainder
    saitfainder non è connesso Sëniör Stäff
    Data registrazione
    06-12-2002
    Residenza
    Torino
    Messaggi
    8,715

    Predefinito

    Per via del funzionamento dei cookie se tu usi la setcookie il valore non è immediatamente disponibile in $_COOKIE, ma solo al ricaricamento della pagina.


    «È una mia peculiarità distorcere la verità e inventarne di nuove.»
    «I tuoi orientamenti hanno su di me un effetto prossimo allo zero.»


  3. #3
    Guest

    Predefinito

    E quindi come faccio?

  4. #4
    Guest

    Predefinito

    Potresti provare con una sessione...

  5. #5
    L'avatar di saitfainder
    saitfainder non è connesso Sëniör Stäff
    Data registrazione
    06-12-2002
    Residenza
    Torino
    Messaggi
    8,715

    Predefinito

    Citazione Originalmente inviato da oracolodelweb Visualizza messaggio
    E quindi come faccio?
    Il valore della variabile l'hai ottenuto prendendo i pezzi da $_POST. Quindi usa quello e lo salvi anche nel cookie. Alla prossima esecuzione se non c'è niente in $_POST provi a recuperarlo dal $_COOKIE.


    «È una mia peculiarità distorcere la verità e inventarne di nuove.»
    «I tuoi orientamenti hanno su di me un effetto prossimo allo zero.»


  6. #6
    Guest

    Predefinito

    Citazione Originalmente inviato da tampertools Visualizza messaggio
    Potresti provare con una sessione...
    In che modo?

  7. #7
    Guest

    Predefinito

    Nelle sessioni i dati si salvano con
    Codice PHP:
    $_SESSION["blablabla"] = bla1;
    e si recuperano con
    Codice PHP:
    $blablabla = $_SESSION["blablabla"]
    La sessione la devi iniziare sempre nella prima riga del file (mi sembra, ma potrei dire una cavolata) con
    Codice PHP:
    session_start()
    Comunque dai un occhiata qui
    http://www.html.it/articoli/sessioni...me-si-usano-1/

  8. #8
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,685

    Predefinito

    Non ha molto senso usare le sessioni se ti servono i cookie.
    La soluzione è quella scritta da saitfainder.

    Ciao!

  9. #9
    Guest

    Predefinito

    Citazione Originalmente inviato da alemoppo Visualizza messaggio
    Non ha molto senso usare le sessioni se ti servono i cookie.
    La soluzione è quella scritta da saitfainder.

    Ciao!
    Soluzione che però non ho capito tanto. Me la potete spiegare in termini di codice? grazie mille

  10. #10
    Guest

    Predefinito

    Basta che aggiungi un controllo del tipo:

    Codice PHP:
    if (isset($_POST["variabile"])) {
    $variabile = $_POST["variabile"];
    }
    else if (isset(
    $_COOKIE["variabile"])) {
    $variabile = $_POST["variabile"];
    }

  11. #11
    Guest

    Predefinito

    Il problema è che io ho tre variabili inviate con il metono POST, che si raggruppano (si sommano) e formano un cookie da già sommate

  12. #12
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,896

    Predefinito

    Il setcookie (famiglia header di risposta http) devi inserirlo come prima riga, solo nel caso di output html, (del browser).
    Ps. Crei il setcookie dal programma che riceve i dati via POST, rinvii ad una pagina diversa da frasi2.php (così se il browser ha i cookie abilitati, lo invia con un header di richiesta), cancelli la cache con php (sempre header).
    Ps.inserisci $_POST['Invia']; al programma post!
    Sessioni(cookie senza scadenza, a parte la validità di tot dal server).
    Em, scusate dove potrei postare per i controlli con gli operatori logici?
    Ultima modifica di darbula : 05-02-2014 alle ore 05.19.34

  13. #13
    Guest

    Predefinito

    Temo di non avere capito molto, non sono un grande esperto in questione. Me lo potresti scrivere sotto forma di codice? Grazie mille :)

  14. #14
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,896

    Predefinito

    aggiungi header("Location: http://user.host.org/eventuale_cartella/frasi2.php"); dopo il setcookie..
    In pratica fai effettuare un redirect al browser, (connessione GET).
    Credo che dovrebbe funzionare.
    http://is2.php.net/manual/it/function.header.php guarda il 2 es. per cancellare la cache.
    Ultima modifica di darbula : 05-02-2014 alle ore 13.45.41

  15. #15
    Guest

    Predefinito

    Ma così si genere un loop di reindirizzamenti! O sbaglio qualcosa?

  16. #16
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,896

    Predefinito

    Certo, devi valutare l'invio del form..
    if((isset($_POST['Invia'])===TRUE)(&&$_POST['Invia'])==='Invia'){
    altri controlli sul form e creazioni variabili,
    setcookie("COOKIE",$number);// il cookie sarà salvato per quella sessione.
    header('Location: bla.bla.txp');
    }
    codice del controllo cookie
    modificato..
    Se no ,sia che sia post o get, viene sempre creato e sovrascritto il cookie con redirect infinito.

  17. #17
    Guest

    Predefinito

    Quindi il risultato dovrebbe essere tipo questo? (Grazie infinite di tutto il tempo che mi stai dedicando)
    Codice PHP:
    if(isset($_POST['Invia'])===TRUE)(&&$_POST['Invia'])==='Invia') //Qui credo che ci sia un errore, forse hai scritto male?
    {
    if (isset(
    $_POST['giorno']))
    {
    $giorno = htmlspecialchars($_POST['giorno']);
    }

    if (isset(
    $_POST['mese']))
    {
    $mese = htmlspecialchars($_POST['mese']);
    }

    if (isset(
    $_POST['nome']))
    {
    $nome = htmlspecialchars($_POST['nome']);
    }

    $lunghezzanome = strlen($nome);
    $numero = $giorno + $mese + $lunghezzanome;

    $totale = $numero;

    setcookie("numero", $numero);
    header("Location: http://localhost/Prove/Oracolo_del_Web/AnimatedContentMenu/frase2.php")
    }
    else
    {
    if(isset(
    $_COOKIE["numero"]))
    {
    $numero = $_COOKIE["numero"];
    }

    $totale = $numero;
    }

  18. #18
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,896

    Predefinito

    Si, il risultato dovrebbe essere quello.. ricordati però, che il cookie sarà memorizzato per quella connessione, e fino un tot di inattività della validità della sessione.
    prova
    Codice PHP:
    if(isset($_POST['Invia']))
    {
    codice che hai scritto..
    }
    vedi se ti funziona?
    Ps. sarebbe buona norma verificare l'esistenza di tutti i dati, il valore restituito dal form (solo stringhe), ove ci siano valori statici è corretto confrontarli anch'essi.
    prego figurati ;)
    Ultima modifica di darbula : 05-02-2014 alle ore 19.58.38

  19. #19
    Guest

    Predefinito

    FUNZIONA!! Non so come ringraziarti, veramente, sei stato gentilissimo. Sei un grande, buona serata!

  20. #20
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,896

    Predefinito

    prego, però cambia else con
    Codice PHP:
    elseif(isset($_COOKIE['numero']))
    {
    $numero=$_COOKIE['numero'];
    $totale=$numero;
    }
    else
    {
    echo(
    'non esiste questo cookie');
    }

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •