PHP Passa la variabile alla pagina successiva


196

Sembra piuttosto semplice ma non riesco a trovare un buon modo per farlo.

Di 'nella prima pagina che creo una variabile

$myVariable = "Some text";

E l'azione del modulo per quella pagina è "Pagina2.php". Quindi in Page2.php, come posso accedere a quella variabile? So di poterlo fare con le sessioni ma penso che sia troppo per una stringa semplice e ho solo bisogno di passare una stringa semplice (un nome di file).

Come posso raggiungere questo obiettivo?

Grazie!


La cosa migliore e più semplice per passare le variabili è come l'ho spiegato qui: stackoverflow.com/questions/14465464/…
Jaro

Risposte:


450

HTML / HTTP è apolide, in altre parole, ciò che hai fatto / visto nella pagina precedente, è completamente scollegato dalla pagina corrente. Tranne se utilizzi qualcosa come sessioni, cookie o variabili GET / POST. Sessioni e cookie sono abbastanza facili da usare, con una sessione molto più sicura dei cookie. Più sicuro, ma non completamente sicuro.

Sessione:

//On page 1
$_SESSION['varname'] = $var_value;

//On page 2
$var_value = $_SESSION['varname'];

Ricordarsi di eseguire l' session_start();istruzione su entrambe queste pagine prima di provare ad accedere $_SESSIONall'array e anche prima di inviare qualsiasi output al browser.

Cookie:

//One page 1
$_COOKIE['varname'] = $var_value;

//On page 2
$var_value = $_COOKIE['varname'];

La grande differenza tra sessioni e cookie è che il valore della variabile verrà archiviato sul server se si utilizzano sessioni e sul client se si utilizzano cookie. Non riesco a pensare a nessun buon motivo per utilizzare i cookie anziché le sessioni, tranne se si desidera che i dati persistano tra le sessioni, ma anche in questo caso è forse meglio archiviarli in un DB e recuperarli in base a un nome utente o ID.

OTTIENI e POST

È possibile aggiungere la variabile nel collegamento alla pagina successiva:

<a href="page2.php?varname=<?php echo $var_value ?>">Page2</a>

Questo creerà una variabile GET.

Un altro modo è includere un campo nascosto in un modulo che invia alla seconda pagina:

<form method="get" action="page2.php">
    <input type="hidden" name="varname" value="var_value">
    <input type="submit">
</form>

E poi a pagina due:

//Using GET
$var_value = $_GET['varname'];

//Using POST
$var_value = $_POST['varname'];

//Using GET, POST or COOKIE.
$var_value = $_REQUEST['varname'];

Basta cambiare il metodo per il modulo postse si desidera farlo tramite posta. Entrambi sono ugualmente insicuri, sebbene GET sia più facile da hackerare.

Il fatto che ogni nuova richiesta sia, ad eccezione dei dati di sessione, un'istanza totalmente nuova dello script mi ​​ha colto quando ho iniziato a scrivere codice in PHP. Una volta che ti ci abitui, è abbastanza semplice però.


2
Grazie a questo ha aiutato, il problema era che avevo un sacco di variabili nella prima pagina, quindi quello che ho fatto è stato creare un array con tutte quelle variabili e inviarlo alla pagina successiva usando le sessioni.
Carlo,

Schweet :) Sono contento di aver potuto aiutare.
Jrgns,

4
Nitpick: le sessioni in PHP sono generalmente gestite anche dai cookie. Il cookie di sessione non è un cookie persistente e di solito contiene solo l'ID di sessione. Ma è ancora un biscotto.
Dabbler decente il

Elaborare il mio commento. Il motivo è che, come hai detto, HTTP è apolide. Pertanto PHP ha ancora bisogno di un modo per identificare la sessione. Questo viene fatto memorizzando un cookie sul client con un ID di sessione. Se i cookie sono disabilitati sul lato client, a volte PHP utilizza $ _GET var per aggiungere l'id di sessione ai collegamenti tra le pagine. Ma questo è generalmente considerato insicuro ed è quindi generalmente disabilitato per la maggior parte dei server web (php.ini).
Dabbler decente il

Le sessioni PHP di @fireeyedboy possono essere propagate anche usando le variabili GET e POST. Alla fine della giornata, la sessione semplifica il passaggio delle variabili da una pagina all'altra avendo solo un pezzo di dati da trasferire: l'id della sessione. L'id di sessione viene quindi utilizzato per recuperare i dati salvati in precedenza.
Jrgns,

30

Grazie per le risposte sopra. Ecco come l'ho fatto, spero che aiuti quelli che seguono. Sto cercando di passare un numero di registrazione da una pagina all'altra, quindi regName e regValue :

Crea la tua prima pagina, chiamala set_reg.php :

<?php

session_start();

$_SESSION['regName'] = $regValue;

?>

<form method="get" action="get_reg.php">
    <input type="text" name="regName" value="">
    <input type="submit">
</form>

Crea la tua seconda pagina, chiamala get_reg.php :

<?php

session_start();

$regValue = $_GET['regName'];

echo "Your registration is: ".$regValue.".";

?>

<p><a href="set_reg.php">Back to set_reg.php</a>

Sebbene non esaustivo come la risposta di cui sopra, ai miei scopi ciò illustra in modo semplice la relazione tra i vari elementi.


13
Il tuo esempio funziona anche senza sessioni e in realtà non sta ottenendo i dati tramite il meccanismo di sessioni (in get_reg.php). Stai inviando regName tramite un modulo con il metodo get come spiegato da Jrgns. La variabile è quindi accessibile nella pagina get_reg.php tramite l'array $ _GET.
Metatron,

16

Passando i dati nella richiesta

È possibile incorporarlo come campo nascosto nel modulo o aggiungerlo all'URL di azione dei moduli

 echo '<input type="hidden" name="myVariable" value="'.
     htmlentities($myVariable).'">';

o

echo '<form method="POST" action="Page2.php?myVariable='.
    urlencode($myVariable).'">";

Nota che questo illustra anche l'uso di htmlentities e urlencode durante il passaggio dei dati.

Passando i dati nella sessione

Se i dati non devono essere passati al lato client, le sessioni potrebbero essere più appropriate. È sufficiente chiamare session_start () all'inizio di ogni pagina e sarà possibile ottenere e impostare i dati nell'array $ _SESSION.

Sicurezza

Poiché affermi che il tuo valore è in realtà un nome file, devi essere consapevole delle implicazioni di sicurezza. Se il nome file è arrivato dal lato client, supponiamo che l'utente abbia manomesso il valore. Verifica la validità! Cosa succede quando l'utente passa il percorso a un file di sistema importante o a un file sotto il suo controllo? Il tuo script può essere utilizzato per "sondare" il server alla ricerca di file che esistono o non esistono?

Dato che hai appena iniziato qui, vale la pena ricordare che questo vale per tutti i dati che arrivano in $ _GET, $ _POST o $ _COOKIE - presumi che il tuo peggior nemico abbia creato il contenuto di tali array e codifica di conseguenza!


9

Esistono tre metodi per passare il valore in php.

  • Per posta
  • Per ottenere
  • Rendendo variabile la sessione

Questi tre metodi sono usati per scopi diversi. Ad esempio, se vogliamo ricevere il nostro valore nella pagina successiva, possiamo usare il metodo 'post' ($ _POST) come: -

$a=$_POST['field-name'];

Se richiediamo il valore della variabile su più di una pagina, possiamo usare la variabile di sessione come: -

$a=$_SESSION['field-name];

Prima di usare questa sintassi per creare la variabile SESSION, dobbiamo prima aggiungere questo tag all'inizio della nostra pagina php

session_start(); 

Il metodo GET viene generalmente utilizzato per stampare i dati sulla stessa pagina utilizzata per ricevere input dall'utente. La sua sintassi è come:

$a=$_GET['field-name'];

I metodi POST sono generalmente più sicuri di GET perché quando utilizziamo il metodo Get di quanto sia possibile visualizzare i dati nella barra degli URL. Se i dati sono dati più sensibili come la password, allora possono essere disabilitati.


7

Le sessioni sarebbero l'unico modo buono, potresti anche usare GET / POST ma sarebbe potenzialmente insicuro.


6

prova questo codice

usando il campo nascosto possiamo passare php varibale ad un'altra pagina

page1.php

<?php $myVariable = "Some text";?>
<form method="post" action="page2.php">
 <input type="hidden" name="text" value="<?php echo $myVariable; ?>">
 <button type="submit">Submit</button>
</form>

passa la variabile php al valore del campo nascosto in modo da poter accedere a questa variabile in un'altra pagina

page2.php

<?php
 $text=$_POST['text'];
 echo $text;
?>

1
**page 1**
<form action="exapmple.php?variable_name=$value" method="POST"> 
    <button>
        <input  type="hidden" name="x">
    </button>
</form>`

pagina 2

if(isset($_POST['x'])) {
    $new_value=$_GET['variable_name'];
}

1

Le sessioni sarebbero l'unico modo buono, potresti anche usare GET / POST ma sarebbe potenzialmente insicuro.

Passaggio dei dati nella sessione Se i dati non devono essere passati al lato client, le sessioni potrebbero essere più appropriate. È sufficiente chiamare session_start () all'inizio di ogni pagina e sarà possibile ottenere e impostare i dati nell'array $ _SESSION.

Sicurezza Dato che dichiari che il tuo valore è in realtà un nome file, devi essere consapevole delle implicazioni di sicurezza. Se il nome file è arrivato dal lato client, supponiamo che l'utente abbia manomesso il valore. Verifica la validità! Cosa succede quando l'utente passa il percorso a un file di sistema importante oa un file sotto il suo controllo? Il tuo script può essere utilizzato per "sondare" il server alla ricerca di file che esistono o non esistono?

Dato che hai appena iniziato qui, vale la pena ricordare che questo vale per tutti i dati che arrivano in $ _GET, $ _POST o $ _COOKIE - supponi che il tuo peggior nemico abbia creato il contenuto di tali array e codifica di conseguenza!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.