problema con mantenere valorizzato il valore di $_POST[]

ciao,

ho un problema con tenere sempre valorizzato il valore di $_POST che ricevo da un form.

in pratica questo form mi serve per impostare la lingua di tutte le pagine di un pannello di amministrazione:

  if(isset($_POST['lingua'])){
          
          switch ($_POST['lingua']) {
            case 'it':
               echo'<img src="../immagini/italy.gif" title="Italiano" />' ;
            break;
            case 'en':
               echo'<img src="immagini/uk.gif" title="Inglese" />' ;
            break;
            case 'fr':
               echo'<img src="immagini/france.gif" title="Francese" />' ;    
            break;
            case 'es':
               echo'<img src="immagini/spain.gif" title="Spagnolo" />' ;
            break;
            case 'de':
               echo'<img src="immagini/germany.gif" title="Tedesco" />' ;
            break;
            default :
       // if action is not defined or unknown move to main product page
                 header('Location: index.php');   
          }
          
          $_SESSION['lingua'] = $_POST['lingua'];
         
          } else { 
             echo"<p>Impostare una lingua</p>";
             }
       

oltre al form, ho un menu di navigazione. il problema è proprio lì, cioè quando clicco su un opzione e quindi apro un altra pagina, perdo il valore che passo dal form.

ho provato anche a mettere tutto in sessione ma giustamente è il $_POST['lingua'] e l' if che condiziona il funzionamento.

soluzioni?

Grazie

inviato 9 anni fa
iTek
iTek
1
X 0 X

Puoi creare un cookie una volta inviato il valore di post, oppure puoi far uso delle sessioni, in entrambi i casi trovi tutto sulle sessioni e cookie nelle guide di phpnews.

risposto 9 anni fa
DaD
DaD
1
X 0 X

ma infatti io sto usando le sessioni ( se vedi nello script che ho postato)

il problema è che non posso settare le sessioni se non passo nulla dal form.

ho sempre la condizione if(isset($_POST['lingua'])) che mi "condiziona" il funzionamento.

risposto 9 anni fa
iTek
iTek
1
X 0 X

ok , ho risolto con un elseif:

if(isset($_POST['lingua'])){
          
         $_SESSION['lingua'] = $_POST['lingua'];
         
          switch ($_POST['lingua']) {
            case 'it':
               echo'<img src="../immagini/italy.gif" title="Italiano" />' ;
            break;
            case 'en':
               echo'<img src="../immagini/uk.gif" title="Inglese" />' ;
            break;
            case 'fr':
               echo'<img src="../immagini/france.gif" title="Francese" />' ;    
            break;
            case 'es':
               echo'<img src="../immagini/spain.gif" title="Spagnolo" />' ;
            break;
            case 'de':
               echo'<img src="../immagini/germany.gif" title="Tedesco" />' ;
            break;
            default :
       // if action is not defined or unknown move to main product page
                 header('Location: index.php');   
          }
          
             
  } elseif (isset($_SESSION['lingua'])){
          
          switch ($_SESSION['lingua']) {
            case 'it':
               echo'<img src="../immagini/italy.gif" title="Italiano" />' ;
            break;
            case 'en':
               echo'<img src="../immagini/uk.gif" title="Inglese" />' ;
            break;
            case 'fr':
               echo'<img src="../immagini/france.gif" title="Francese" />' ;    
            break;
            case 'es':
               echo'<img src="../immagini/spain.gif" title="Spagnolo" />' ;
            break;
            case 'de':
               echo'<img src="../immagini/germany.gif" title="Tedesco" />' ;
            break;
            default :
       // if action is not defined or unknown move to main product page
                 header('Location: index.php');   
          }
          
        
  } else {
             echo"<p>Impostare una lingua</p>";
             }
          
          ?>
risposto 9 anni fa
iTek
iTek
1
X 0 X

Naturalmente per poter usare la sessione inizializzata con $_POST devi fra partire la sessione nella pagina interessata.

Questo puoi farlo benissimo con session_start(), e poi verifichi che la sessione sia effetivamente registrata con funzione apposite come session_is_registered(), qui trovi tutto ciò che riguarda questo argomento.

risposto 9 anni fa
DaD
DaD
1
X 0 X

PHP ngli anni è cambiato parecchio e molte pratiche, seppur ancora praticabili, sono adesso deprecate. E' il caso della gestione della sessione. Sul manuale ufficiale di PHP in italiano vengono ancora riportate vecchie pratiche ormai obsolete e a rischio sicurezza. Consiglio quindi di leggere sempre la versione in inglese del manuale, che per le sessioni si trova qui:

http://www.php.net/manual/en/ref.session.php

Riporto un passaggio:

Use of $_SESSION (or $HTTP_SESSION_VARS with PHP 4.0.6 or less) is recommended for improved security and code readability. With $_SESSION, there is no need to use the session_register(), session_unregister(), session_is_registered() functions. Session variables are accessible like any other variables.

Le funzioni session_register(), session_unregister(), session_is_registered() sono quindi da evitare a favore dell'utilizzo del solo array $_SESSION

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda