Visualizzazione dei risultati da 1 a 7 su 7

Discussione: Session lang

  1. #1
    Utente di HTML.it
    Registrato dal
    May 2017
    Messaggi
    52

    Session lang

    Salve, volevo mostrarvi il codice che sto implementando per dare la possibilità di scegliere e la lingua e chiedere ai più esperti se va bene o se devo modificare qualcosa.

    Codice PHP:
    if(isset($_GET['lang'])) {
                
    $lang $_GET['lang'];
                
    $_SESSION['lang'] = $lang;
                
    setcookie('lang'$langtime() + (3600 24 30));
                } else {
                if(!isset(
    $_COOKIE['lang'])) { 
                
    $http_lang substr($_SERVER["HTTP_ACCEPT_LANGUAGE"],0,2);
                
    $_SESSION['lang'] = $http_lang
                
    $lang $_SESSION['lang']; 
                }
                if(isset(
    $_SESSION['lang'])) {   
                
    $lang $_SESSION['lang'];
                
    setcookie('lang'$langtime() + (3600 24 30));
                }
                elseif(isset(
    $_COOKIE['lang'])) {  
                
    $lang $_COOKIE['lang'];
                
    $_SESSION['lang']= $lang
                }
                else {
                
    $lang $this->defaultLanguage
                }
           } 
    Che nè dite?

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    La variabile $lang ti serve da qualche altra parte all'interno dello stesso file php? Perché altrimenti è inutile.

    Penso che nella logica ci sia qualcosa che non va, secondo me nell'ultimo else non ci entrerai mai, almeno una $_SESSION'lang'] o $_COOKIE['lang'] a quel punto saranno sempre settate.
    Qual'ora, cambiando la logica, entrassi in quell'else vorrebbe dire che nessuna tra $_SESSION'lang'] e $_COOKIE['lang'] è settata e lì dentro non le setti, quindi non le avrai disponibili nelle altre pagine.

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2017
    Messaggi
    52
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    La variabile $lang ti serve da qualche altra parte all'interno dello stesso file php? Perché altrimenti è inutile.

    Penso che nella logica ci sia qualcosa che non va, secondo me nell'ultimo else non ci entrerai mai, almeno una $_SESSION'lang'] o $_COOKIE['lang'] a quel punto saranno sempre settate.
    Qual'ora, cambiando la logica, entrassi in quell'else vorrebbe dire che nessuna tra $_SESSION'lang'] e $_COOKIE['lang'] è settata e lì dentro non le setti, quindi non le avrai disponibili nelle altre pagine.
    Ho modificato così. In pratica se la lingua del device non esiste tra le traduzioni viene impostata quella di default. Ma non ho ben chiaro quando impostare il setcookie, se solo dopo il GET oppure anche in altri punti

    Codice PHP:
    if(isset($_GET['lang'])) {
                
    $lang $_GET['lang'];
                
    $_SESSION['lang'] = $lang;
                
    setcookie('lang'$langtime() + (3600 24 30));
                } else {
                if(!isset(
    $_COOKIE['lang']) && !isset($_SESSION['lang'])) { 
                
    $http_lang substr($_SERVER["HTTP_ACCEPT_LANGUAGE"],0,2);
                if (
    file_exists('../applicazioni/lingue/' $http_lang)) {
                
    $lang $http_lang
                } else {
                    
    $lang $this->defaultLanguage
                }
                
    $_SESSION['lang'] = $lang
                }
                if(isset(
    $_SESSION['lang'])) {   
                
    $lang $_SESSION['lang'];
                
    $_SESSION['lang'] = $lang;
                } elseif (isset(
    $_COOKIE['lang'])) {
                    
    $lang $_COOKIE['lang'];
                
    $_SESSION['lang']= $lang;
                }
                
           } 

  4. #4
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    Se alla fine dei giochi il cookie deve essere necessariamente impostato, lo devi mettere in un posto in modo che sicuramente l'assegnazione venga eseguita.

    Non mi hai risposto alla prima domanda: La variabile $lang ti serve da qualche altra parte all'interno dello stesso file php?

    Poi un'altra cosa, mi sa che sei un po' confuso, perché questa porzione di codice è abbastanza singolare
    Codice PHP:
    if(isset($_SESSION['lang'])) {   
        
    $lang $_SESSION['lang'];
        
    $_SESSION['lang'] = $lang

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2017
    Messaggi
    52
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    Se alla fine dei giochi il cookie deve essere necessariamente impostato, lo devi mettere in un posto in modo che sicuramente l'assegnazione venga eseguita.

    Non mi hai risposto alla prima domanda: La variabile $lang ti serve da qualche altra parte all'interno dello stesso file php?

    Poi un'altra cosa, mi sa che sei un po' confuso, perché questa porzione di codice è abbastanza singolare
    Codice PHP:
    if(isset($_SESSION['lang'])) {   
        
    $lang $_SESSION['lang'];
        
    $_SESSION['lang'] = $lang
    In effetti era fine a se stesso quel controllo. La variabile $lang non serve all'interno del file, perchè il controllo sulla lingua è all'interno della class controller che carica le varie pagine. Poi la lingua la richiamo con la sessione.
    Questo è il codice ultimato che sembra funzionare bene.
    Codice PHP:
    if(isset($_GET['lang'])) {
                
    $lang $_GET['lang'];
                
    $_SESSION['lang'] = $lang;
                
    setcookie('lang'$langtime() + (3600 24 30));
                } else {
                if(!isset(
    $_COOKIE['lang']) && !isset($_SESSION['lang'])) { 
                
    $http_lang substr($_SERVER["HTTP_ACCEPT_LANGUAGE"],0,2);
                if (
    file_exists('../applicazioni/lingue/' $http_lang)) {
                
    $lang $http_lang
                } else {
                    
    $lang $this->defaultLanguage
                }
                
    $_SESSION['lang'] = $lang
                } elseif (isset(
    $_COOKIE['lang']) && !isset($_SESSION['lang'])) {
                    
    $lang $_COOKIE['lang'];
                
    $_SESSION['lang']= $lang;
                }
                
           } 
    Ultima modifica di carlos84; 20-05-2019 a 11:44

  6. #6
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    Se $lang non ti serve altrove allora è inutile, a che serve assegnare ad una variabile qualcosa che hai già disponibile in un'altra? Sprechi solo memoria per mantenere quella variabile.
    Perché usi array_shift()? Quell'array poi non lo usi più, quindi usare una funzione per tirare fuori il primo valore ed eliminarlo da quell'array è tutto lavoro sprecato. Il valore prendilo direttamente come fai nell'if.

    Codice PHP:
    if($url != NULL && file_exists('../app/languages/' $url[0]))
    {
        
    $_SESSION['lang'] = $url[0];
        
    setcookie('lang'$url[0], time() + (3600 24 30));

    else 
    {
        if(!isset(
    $_COOKIE['lang']) && !isset($_SESSION['lang'])) 
        { 
            if (
    file_exists('../app/languages/' $http_lang)) 
            {
                
    $_SESSION['lang'] = substr($_SERVER["HTTP_ACCEPT_LANGUAGE"],0,2);
            } 
            else 
            {
                
    $_SESSION['lang'] = $this->defaultLanguage
            }
        } 
        elseif (isset(
    $_COOKIE['lang']) && !isset($_SESSION['lang'])) 
        {
            
    $_SESSION['lang']= $_COOKIE['lang'];
        }


  7. #7
    Utente di HTML.it
    Registrato dal
    May 2017
    Messaggi
    52
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    Se $lang non ti serve altrove allora è inutile, a che serve assegnare ad una variabile qualcosa che hai già disponibile in un'altra? Sprechi solo memoria per mantenere quella variabile.
    Perché usi array_shift()? Quell'array poi non lo usi più, quindi usare una funzione per tirare fuori il primo valore ed eliminarlo da quell'array è tutto lavoro sprecato. Il valore prendilo direttamente come fai nell'if.

    Codice PHP:
    if($url != NULL && file_exists('../app/languages/' $url[0]))
    {
        
    $_SESSION['lang'] = $url[0];
        
    setcookie('lang'$url[0], time() + (3600 24 30));

    else 
    {
        if(!isset(
    $_COOKIE['lang']) && !isset($_SESSION['lang'])) 
        { 
            if (
    file_exists('../app/languages/' $http_lang)) 
            {
                
    $_SESSION['lang'] = substr($_SERVER["HTTP_ACCEPT_LANGUAGE"],0,2);
            } 
            else 
            {
                
    $_SESSION['lang'] = $this->defaultLanguage
            }
        } 
        elseif (isset(
    $_COOKIE['lang']) && !isset($_SESSION['lang'])) 
        {
            
    $_SESSION['lang']= $_COOKIE['lang'];
        }

    Bene allora, grazie per gli aiuti molto disponibile

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.