• User Attivo

    scelta lingua con variabili di sessione

    Ciao a tutti.
    Mi è stato consigliato per un sito multi-lingua di usare le sessioni per la scelta della lingua.

    Dalla pagina scelta lingua, che sarà index.php, controlla se c'è una sessione memorizzata precedentemente, la cancella e passa alla scelta della lingua
    [PHP]<?

    if (isset($_SESSION['lingua_teile']))
    {
    session_destroy();

    ?>
    

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>Documento senza titolo</title>
    </head>

    <body>
    <p><a href="scelta.php?lingua=ita">italiano</a></p>
    <p><a href="scelta.php?lingua=ing">inglese</a></p>

    </body>
    </html>

    <?
    }

    else
    {
    ?>

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>Documento senza titolo</title>
    </head>

    <body>
    <p><a href="scelta.php?lingua=ita">italiano</a></p>
    <p><a href="scelta.php?lingua=ing">inglese</a></p>

    </body>
    </html>

    <?

    }

    ?>[/PHP]

    invio la variabile alla pagina scelta.php
    [PHP]
    <?

    session_start();
    $_SESSION['lingua_teile'] = $_GET['lingua'];
    $_SESSION['lingua_teile'] = $lingua_scelta;

    header ("location: prodotti.php?id=1");

    ?>[/PHP]

    la pagina prodotti.php deve prendersi la variabile memorizzata nella sessione e quindi da questo mi seleziona la tabella

    [PHP]$query_lingua = "SELECT * FROM tabella_lingua_$lingua_scelta WHERE id_articolo='$id'";[/PHP]

    ....A me non funziona!


  • Super User

    addirittura distruggi la sessione o.O

    avresti potuto fare un unset($_SESSION['lingua_teile']);

    ma non ne vedo la necessità, in quanto puoi semplicemente sovrascriverlo.

    hai il register_globals on? Anche se si, ti sconsiglio di tenerlo attivato.

    nella tua query presupponi l'esistenza delle variabili $lingua_scelta e $id, che io non vedo settate.

    Ti consiglio VIVAMENTE di fare un controllo sulle suddette variabili, così il tuo script è vulnerabile.

    ( Se ho scritto cose che hai già fatto, posta il tuo codice per intero, mi sto basando solo su quello che vedo )


  • User Attivo

    Si , ti ringrazio per il consiglio della sicurezza ma per ora non è importante!
    Diciamo che io vorrei -solo- settare la sessione tramite un menu di scelta come da post precedente, nel momento in cui setto la sessione, in questo caso da quello che ho capito
    [PHP]session_start();

    $_SESSION['lingua_teile'] = $_GET['lingua']; [/PHP]

    vorrei che la pagina dopo prendesse il contenuto della sessione che nel mio caso sarà ```
    ita

    
    e quando eseguo la mia query che seleziona la tabella in base alla lingua scelta nel mio caso la variabile $lingua_scelta mi restituisca il valore memorizzato nella sessione....
    Pero' tutto questo non avviene, nel momento in cui richiamo il valore della sessione [PHP]$lingua_scelta = $_SESSION['lingua_teile'];[/PHP]
    
    non mi stampa nulla e quindi la query non viene eseguita....
    Suggerimenti ???
    
    Ps. register_globals è Off

  • Super User

    [PHP]
    $_SESSION['lingua_teile'] = $_GET['lingua'];
    $_SESSION['lingua_teile'] = $lingua_scelta;
    [/PHP]

    La seconda riga così ti sovrascrive la prima... con un valore non definito ( $lingua_scelta )


  • User Attivo

    Ok, è stato eliminato quindi mi rimane
    [php]session_start();

    $_SESSION['lingua_teile'] = $_GET['lingua']; [/php]che mi setta la sessione, ora per richiamarla
    [php]<?

    $lingua_scelta = $_SESSION['lingua_teile'];

    ?>[/php]ma non mi visualizza nulla .....


  • Super User

    Hai fatto ripartire la sessione? ( session_start(); )


  • User Attivo

    Si, pero' passando da una pagina all'altra non viene presa...quindi penso di sbagliare qualcosa ma non capisco cosa


  • Super User

    Guarda prova intanto a fare semplici prove...

    pagina1.php
    [php]
    <? session_start(); $_SESSION['ciao'] = 'mamma'; ?>
    <a href="pagina2.php">ciao a chi?</a>
    [/php]

    pagina2.php
    [php]
    a <? session_start(); print $_SESSION['ciao']; ?>
    [/php]


  • User Attivo

    Ciao,
    da quello che sono riuscito a capire, nella pagina in cui mi serve recuperare il nome della sessione deve esserci

    [PHP]
    session_start();
    $lingua_scelta = $_SESSION['lingua_teile'];
    [/PHP]

    Io pensavo che session_start() cancellasse la sessione creata, invece riprende la sessione creata precedentemente , giusto ?


  • Super User

    Esattamente, quando l'avevo scritto nel messaggio di prima mi riferivo alla seconda pagina, in cui, per l'appunto, non vedevo il secondo session_start().

    Hai provato a vedere se va? ( Dovrebbe andare XD )


  • User Attivo

    Funziona tutto!
    Grazie!
    Stavo diventando matto a capire perchè non funzionava!
    Ho provato a cambiare register_globals ma alla fine era solo da ricordare il session_start() all'inizio di ogni pagina che utilizza la sessione!!