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

    sessioni PHP e selezione lingue

    Ciao

    ho creato un sito multilingue (italiano,francese,inglese,tedesco). Nella pagina index.php ad inizio pagina ho inserito il seguente codice per creare una sessione e settare la lingua come italiano:

    <?php

    session_start();

    $lingua = "Italiano";
    $_SESSION['lingua'] = $lingua;

    include("include/check_session.php");

    ?>
    Come vedete, sempre nella stessa porzione di codice ho inserito anche il controllo della sessione (non so se ho fatto bene).

    Il cui codice é:

    <?php

    session_start();

    if(!isset($_SESSION['lingua']))
    {
    $_SESSION['lingua'] = "Italiano";
    }

    ?>
    Nella pagina, ho inserito delle bandierine con i link in modo che l'utente cliccando sulla bandierina possa cambiare lingua, in questo modo:

    <div id="it">[img]img/it.png[/img]</div>
    <div id="uk">[img]img/uk.png[/img]</div>
    <div id="fr">[img]img/fr.png[/img]</div>
    <div id="de">[img]img/de.png[/img]</div>
    Questo é il file changelanguate.php che prende le variabili tramite il GET e fa il redirect della pagina:

    <?php

    $lingua = $_GET['language'];
    $url = $_GET['url'];

    $_SESSION['lingua'] = "$lingua";

    header("Location: $url");

    ?>
    Il problema é che la lingua caricata é sempre l'italiano, quella che ho messo io all'inizio quando creo la sessione..

    questa invece é la query che carica la pagina:

    <?php

    include("include/connect.php");

    $html = array();

    $sql=mysql_query("SELECT scheda.id,
    scheda.testo,
    scheda.sezione_id,
    scheda.pagina_id,
    scheda.lingua_id,
    lingue.lingua AS lingua,
    sezione.nome AS sezione,
    pagina.genere AS pagina
    FROM scheda
    LEFT JOIN sezione ON sezione.id = scheda.sezione_id
    LEFT JOIN pagina ON pagina.id = scheda.pagina_id
    LEFT JOIN lingue ON lingue.id = scheda.lingua_id
    WHERE scheda.sezione_id = ('1')
    AND lingua = ('$lingua')
    ORDER BY scheda.id DESC")
    or die(mysql_error());

    while($row = mysql_fetch_array($sql))
    {
    $html[] = $row['id'];
    $html[] = $row['testo'];
    $html[] = $row['pagina_id'];
    $html[] = $row['sezione_id'];
    $html[] = $row['lingua_id'];
    }

    echo("$html[1]");

    ?>
    Credo, ovviamente, di aver sbagliato qualcosa nelle sessioni, o di dimenticare qualche passsaggio.. chiedo lumi, please :-)

  2. #2

    Re: sessioni PHP e selezione lingue

    Originariamente inviato da timberwolf
    Il problema é che la lingua caricata é sempre l'italiano, quella che ho messo io all'inizio quando creo la sessione..
    Se nella index metti:

    Codice PHP:
    ...
    $lingua "Italiano";
    ... 
    è ovvio che la lingua è sempre l'italiano!!!
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  3. #3
    ok, ma poi non dovrebbe cambiare grazie al file changelanguage.php che prende con il get la variabile della lingua e la setta?

  4. #4
    ho modificato il file changelanguage.php ma anche così non ottengo il risultato sperato, anche se credo che sia cmq corretto usare la funzione unset();

    quindi il file changelanguage.php diventa:

    <?php

    $lingua = $_GET['language'];
    $url = $_GET['url'];

    unset($_SESSION['lingua']);

    $_SESSION['lingua'] = "$lingua";

    header("Location: $url");

    ?>
    Penso che il problema stia proprio nell'inizializzazione della sessione situata nell'index..

  5. #5
    Ma se da changelanguage.php fai un redirect a index.php che all'inizio ha:

    Codice PHP:
    <?php

    session_start
    ();

    $lingua "Italiano";
    $_SESSION['lingua'] = $lingua;

    include(
    "include/check_session.php");

    ?>
    cosa credi che succeda?! Ovviamente la lingua viene REimpostata in italiano.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  6. #6
    ok, grazie al tuo consiglio ho risolto, credo nel modo correto, dimmi tu se come soluzione può andare bene (funzionare funziona)

    Ora la situazione é questa, nell'index all'inizio di tutto ho il seguente codice:

    <?php

    include("include/check_session.php");

    echo ($_SESSION['lingua']);

    ?>
    il file check_session.php rimane lo stesso, quindi é:

    <?php

    session_start();

    if(!isset($_SESSION['lingua']))
    {
    $_SESSION['lingua'] = "Italiano";
    }

    ?>
    Mentre il file changelanguage.php diventa:

    <?php

    $lingua = $_GET['language'];
    $url = $_GET['url'];

    session_start();

    if(!isset($_SESSION['lingua']))
    {
    $_SESSION['lingua'] = "Italiano";
    }else{
    unset($_SESSION['lingua']);

    $_SESSION['lingua'] = "$lingua";
    }

    header("Location: $url");

    ?>
    Ora ogni volta che premo su una bandierina, carica l'index e nella parte alta della pagina, grazie al comando echo stampa la variabile $_SESSION['lingua'] e quest'ultima é corretta perché visualizza la lingua della bandiera corrispondente (Italiano, Inglese, Francese e Tedesco) e carica, tramite la query, il contenuto nella lingua corrispondente.

  7. #7
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Mentre il file changelanguage.php diventa:

    Codice PHP:

    <?php

    $lingua 
    $_GET['language'];
    $url $_GET['url'];

    session_start();

    if(!isset(
    $_SESSION['lingua']))
    {
    $_SESSION['lingua'] = "Italiano";
    }else{
    unset(
    $_SESSION['lingua']);

    $_SESSION['lingua'] = "$lingua";
    }

    header("Location: $url");

    ?>
    Troppo codice inutile...basta:
    Codice PHP:

    <?php
    $lingua 
    $_GET['language'];
    $url $_GET['url'];

    session_start();

    $_SESSION['lingua'] = "$lingua";

    header("Location: $url");
    ?>
    Anche, se per evitare problemi, farei:

    Codice PHP:

    <?php

    $lingua 
    $_GET['language'];
    $url $_GET['url'];
    $lingue_disponibili = array("Italiano""Inglese""Tedesco""Francese"); // ad esempio
     
    session_start();

    if(
    in_array($lingua$lingue_disponibili))
    {
    $_SESSION['lingua'] = "$lingua";
    }
    header("Location: $url");
    ?>

  8. #8
    grazie mille a tutti e due per le dritte!

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.