Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    183

    sessioni e sito multilingua

    In questi giorni ho postato una serie di messaggi relativi al funzionamento di un 'dannato' sito multilingue, ma non ho trovato persone in grado di aiutarmi.
    Ora ho provato a 'semplificare' il sito originale con soli tre files per trovare meglio l'errore.
    La prima domanda è se questo modo di programmare è corretto...

    SPIEGAZIONE A SEGUIRE

    0.php
    codice:
    <?php
    session_start();
    if(!isset($_SESSION['lang'])){
    	$_SESSION['lang'] = 'it';
    }
    if(isset ($_POST['it'])){
    	$_SESSION['lang'] = 'it';
    }	
    if(isset ($_POST['gb'])){
        	$_SESSION['lang'] = 'gb';
    }
    if(isset ($_POST['from'])){
    	$from = $_POST['from'];
    header("Location: $from");
    die;
    }
    ?>
    1.php
    codice:
    <?php
    include '0.php';
    if($_SESSION['lang']== 'it')
    {
    echo'pagina 1
    ';
    }
    if($_SESSION['lang']== 'gb')
    {
    echo'page 1
    ';
    }
    $from = basename($_SERVER['PHP_SELF']);
    ?>
    <form method="post" action="0.php"> 
    <input type="hidden" name="from" value="<?php echo $from;?>">
    <button type="submit" name="it"
    <?php 
            if(($_SESSION['lang']) == 'it'){
              ?>disabled="disabled" ><?php	
            }
    	else{
              ?> ><?php
    	}	
    ?>it
    </button>
    
    <button type="submit" name="gb"
    <?php 
            if(($_SESSION['lang']) == 'gb'){
              ?>disabled="disabled" ><?php	
            }
    	else{
              ?>><?php
    	}	
    ?>gb
    </button>
    </form>
    <form method="post" action="2.php"> 
    <input type="submit" name="invio1" value="pag.2">
    </form>
    2.php ((praticamente uguale a 1.php))
    codice:
    <?php
    include '0.php';
    if($_SESSION['lang']== 'it')
    {
    echo'pagina 2
    ';
    }
    if($_SESSION['lang']== 'gb')
    {
    echo'page 2
    ';
    }
    $from = basename($_SERVER['PHP_SELF']);
    ?>
    <form method="post" action="0.php"> 
    <input type="hidden" name="from" value="
    <?php echo $from;?>
    ">
    <button type="submit" name="it"
    <?php 
            if(($_SESSION['lang']) == 'it'){
              ?>disabled="disabled" ><?php	
            }
    	else{
              ?>><?php
    	}	
    ?>it
    </button>
    <button type="submit" name="gb"
    <?php 
            if(($_SESSION['lang']) == 'gb'){
              ?>disabled="disabled" ><?php	
            }
    	else{
              ?>><?php
    	}	
    ?>gb
    </button>
    </form>
    <form method="post" action="1.php"> 
    <input type="submit" name="invio1" value="pag.1">
    </form>
    SPIEGAZIONE:

    Le pagine del sito: 1.php e 2.php contengono tre pulsanti.
    un pulsante serve semplicemente da passare da una pagina all'altra.
    gli altri per selezionare la lingua.
    se è selezionata la lingua 'it' compare il titolo in italiano e il pulsante 'it' è disattivato.
    se si preme il pulsante 'gb' viene visualizzato il testo in inglese.
    la pagina 0.php è inclusa in ogni file e serve alla gestione della sessione $_SESSION['lang'].

    Ora,con questi tre files che 'racchiudono' il principio di funzionamento del mio sito, sembra funzionare tutto alla perfezione ma dopo qualche salto da una pagina all'altra e da una lingua all'altra il funzionamento si blocca e viene mostrato il messaggio:

    Warning: Header may not contain more than a single header, new line detected. in 0.php on line 14

    Nella versione 'completa' del sito (parte del codice postato nei miei messaggi di ieri), funzionava tutto alla perfezione in locale (localhost), mentre in rete non funzionava (anche se non venivano visualizzati messaggi di errore).

    Grazie per l'aiuto

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    La struttura è un po' contorta... sarebbe per esempio opportuno inserire tutta la gestione delle lingue in un unico script da richiamare poi in tutte le pagine (non "ripetendo" pezzi di codice in varie pagine!).

    Per l'errore in sè verifica bene che non vi siano caratteri prima dei tag di apertura del php e poi che le variabili usati negli header (in particolare nel tuo caso "$location") non contenga caratteri non validi (in particolare il "new line"), magari codificandole prima.

    Anche l'uso di una variabile "$from" via POST per il redirect non è molto "pulito" dato che non c'è alcun controllo su tale variabile...

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    183
    il codice originale non sarebbe quello... ho inserito un sunto facendo in effetti un errore.

    Ecco l'originale:
    una pagina è index.php
    codice:
    <?php
    include 'classi/session.php';
    include 'testi/testi.php';
    include 'classi/main.class.php';
    $page = new main();
    #------------------------------#
    if(($_SESSION['lang']) == 'it'){
            $page->menu = 'configurazioni/it_menu.ini';
        } 
    if(($_SESSION['lang']) == 'gb'){
            $page->menu = 'configurazioni/gb_menu.ini';
        } 
    #------------------------------#
    $page->content .= '<h1>'.$titolo_1[$idioma].'</h1>
    
    ';
    #------------------------------#	
        $page->message = '';
    #------------------------------#
    include 'template/' . TEMPLATE_NAME . '/template.php';
    ?>
    la pagina due del sito è praticamente uguale alla prima nella struttura

    i files che richiamano sono:
    session.php:

    codice:
    <?php
    session_start();
    if(!isset($_SESSION['lang'])){
    	$_SESSION['lang'] = 'it';
    }
    if(isset ($_POST['it'])){
    	$_SESSION['lang'] = 'it';
    }	
    if(isset ($_POST['gb'])){
        	$_SESSION['lang'] = 'gb';
    }
    #------------------------------#
    # gestore multilingua testi    #
    #------------------------------#
    $lingua = $_SESSION['lang'];
    switch($lingua){
    	case 'it':
    		$idioma = 0;
    		break;
            
    	case 'gb':
    		$idioma = 1;
    		break;
    }
    #------------------------------#
    ?>
    e main.class.php:

    codice:
    <?php
    
    class Main{
        public function __construct(){
        }
        public function _menu_principale($menu_file){
        $nav = file($menu_file);
        $page = basename($_SERVER['PHP_SELF']);
        foreach($nav as $line){
            $link = explode(":", $line);
    	echo '
            <div id="menu"> 
    	<form method="post" action="'.$link[1].'"> 
    	<button type="submit"'; 
            if(trim($link[1]) == $page){
                echo' disabled="disabled" >';
    	}
    	else{
                echo '>';
    	}
    	echo ''.$link[0].'
    	</button>
    	</form>
    	</div>
    	';
    	}
        }
        public function _menu_lingua(){
            $nav = file('configurazioni/lingue.ini');
            echo '<form method="post">';
            foreach($nav as $line){	
                $link = explode(":", $line);
                echo '
                <div id="menu">
                <button name='.$link[1].' type="submit"';
                if(trim($link[1]) == ($_SESSION['lang'])){
                    echo' disabled="disabled" >';
                }
                else{
    		echo '>';
                }
                echo ''.$link[0].'
                [img]immagini/'.$link[1].'.png[/img]
                </button>
                </div>';
            }
            echo '</form>';
        }
    }
    ?>
    altro file che richiama è testi.php che è una semplice raccolta di array dove nel termine 0 c'è il testo in italiano e nel termine 1 la traduzione inglese...

    Il sito funziona PERFETTAMENTE in locale .... anche se sicuramente è migliorabile essendo realizzato da un principiante e non da un professionista.

    IL PROBLEMA è quando sposto il sito dal locale al host Aruba.
    Su Aruba la variabile $_SESSION['lang'] assume valore = 0 e non riesco a capire il motivo.
    Ovviamente con quel valore di $SESSION il sito non funziona!

    GRAZIE infinite!

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    mmmh... se è "solo" un problema della sessione vedi se il provider ha delle limitazioni e/o prova a settare altre variabili di sessione e vedi se funzionano (con altri script di prova)...

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    183
    eiyen, in questi giorni ho provato varie 'modifiche' al mio codice e il problema nasce sempre e solo in rete e non in locale.
    su aruba in certe parti dello script le variabili di sessione sembrano essere settate correttamente e in altre parti vengono improvvisamente settate a 0.

    Non saprei come e dove controllare se il provider ha delle limitazioni.
    E ovviamente non saprei cosa fare in caso ci siano.

    Hai uno script rapido di controllo da consigliarmi ?

    grazie ancora

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    mah... ci sono dei parametri, vedi però anche sessioni su off (ultimo post) e controlla... non si sa mai

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    183
    su sessioni su off (ultimo post) il problema è esattamente come il mio ma anche lì nessuno ha dato spiegazione o soluzione.

    la cosa buffa è questa:
    ieri sera il mio sito (codice sopra riportato) sul host aruba non funzionava
    in questo momento funziona perfettamente (non ho fatto modifiche).

    intanto ho mandato ovviamente anche un messaggio all'assistenza aruba (chissà se e quando risponderanno)

    mi viene un dubbio:
    se visualizzo sullo stesso browser (firefox), in due cartelle vicine, il mio sito in localhost e lo stesso su aruba, possono esserci 'interferenze' sulle variabili di sessione visto che lo script e il nome delle variabili sono uguali?

  8. #8
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    per l'ultimo dubbio: no... per altro: senti l'assistenza (soprattutto se ora funziona senza modifiche!)

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.