PHP Pase variable a la página siguiente


196

Parece bastante simple, pero no puedo encontrar una buena manera de hacerlo.

Digamos que en la primera página creo una variable

$myVariable = "Some text";

Y la acción del formulario para esa página es "Page2.php". Entonces, en Page2.php, ¿cómo puedo tener acceso a esa variable? Sé que puedo hacerlo con sesiones, pero creo que es demasiado para una cadena simple, y solo necesito pasar una cadena simple (un nombre de archivo).

¿Cómo puedo conseguir esto?

¡Gracias!


Lo mejor y más fácil de pasar variables es cómo lo expliqué aquí: stackoverflow.com/questions/14465464/…
Jaro

Respuestas:


450

HTML / HTTP no tiene estado, en otras palabras, lo que hiciste / viste en la página anterior, está completamente desconectado de la página actual. Excepto si usa algo como sesiones, cookies o variables GET / POST. Las sesiones y las cookies son bastante fáciles de usar, y las sesiones son mucho más seguras que las cookies. Más seguro, pero no completamente seguro.

Sesión:

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

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

Recuerde ejecutar la session_start();declaración en ambas páginas antes de intentar acceder a la $_SESSIONmatriz, y también antes de enviar cualquier salida al navegador.

Galleta:

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

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

La gran diferencia entre sesiones y cookies es que el valor de la variable se almacenará en el servidor si está usando sesiones, y en el cliente si está usando cookies. No se me ocurre ninguna buena razón para usar cookies en lugar de sesiones, excepto si desea que los datos persistan entre sesiones, pero incluso así es mejor almacenarlos en una base de datos y recuperarlos en función de un nombre de usuario o id.

OBTENER Y PUBLICAR

Puede agregar la variable en el enlace a la página siguiente:

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

Esto creará una variable GET.

Otra forma es incluir un campo oculto en un formulario que se envíe a la página dos:

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

Y luego en la página dos:

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

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

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

Simplemente cambie el método para el formulario a postsi desea hacerlo por correo. Ambos son igualmente inseguros, aunque GET es más fácil de hackear.

El hecho de que cada nueva solicitud es, a excepción de los datos de la sesión, una instancia totalmente nueva del script me sorprendió cuando comencé a codificar en PHP. Una vez que te acostumbras, es bastante simple.


2
Gracias a que esto ayudó, el problema fue que tenía un montón de variables en la primera página, así que lo que hice fue crear una matriz con todas esas variables y enviarla a la siguiente página usando sesiones.
Carlo

Schweet :) Me alegro de poder ayudar.
Jrgns

44
Nitpick: las sesiones en PHP generalmente también son manejadas por cookies. La cookie de sesión no es una cookie persistente y, por lo general, solo contiene la identificación de la sesión. Pero sigue siendo una galleta.
Dabbler decente

Para elaborar mi propio comentario. La razón es que, porque, como dijiste, HTTP no tiene estado. Por lo tanto, PHP todavía necesita una forma de identificar la sesión. Esto se hace almacenando una cookie en el cliente con una identificación de sesión. Si las cookies están deshabilitadas en el lado del cliente, PHP a veces utiliza $ _GET vars para agregar la identificación de la sesión a enlaces entre páginas. Pero esto generalmente se considera inseguro y, por lo tanto, generalmente está deshabilitado por la mayoría de los servidores web (php.ini).
Dabbler decente

Las sesiones PHP de @fireeyedboy también se pueden propagar usando variables GET y POST. Al final del día, la sesión simplifica el paso de variables de una página a la siguiente al tener solo una pieza de datos para transferir: la identificación de la sesión. Ese ID de sesión se utiliza para recuperar los datos guardados previamente.
Jrgns

30

Gracias por las respuestas anteriores. Así es como lo hice, espero que ayude a los que siguen. Estoy buscando pasar un número de registro de una página a otra, de ahí regName y regValue :

Crea tu primera página, llámala 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>

Cree su segunda página, llámela 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>

Aunque no es tan completo como la respuesta anterior, para mis propósitos esto ilustra de manera simple la relación entre los diversos elementos.


13
Su ejemplo también funciona sin sesiones y, de hecho, no obtiene los datos a través del mecanismo de sesiones (en get_reg.php). Está enviando regName a través de un formulario con el método get tal como lo explica Jrgns. Por lo tanto, se puede acceder a la variable en la página get_reg.php a través de la matriz $ _GET.
metatron

16

Pasando datos en la solicitud

Puede incrustarlo como un campo oculto en su formulario o agregarlo a su URL de acción de formularios

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

o

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

Tenga en cuenta que esto también ilustra el uso de htmlentities y urlencode al pasar datos.

Pasando datos en la sesión

Si no es necesario pasar los datos al lado del cliente, las sesiones pueden ser más apropiadas. Simplemente llame a session_start () al comienzo de cada página, y puede obtener y establecer datos en la matriz $ _SESSION.

Seguridad

Como usted indica que su valor es en realidad un nombre de archivo, debe conocer las ramificaciones de seguridad. Si el nombre de archivo ha llegado del lado del cliente, suponga que el usuario ha alterado el valor. ¡Verifíquelo para la validez! ¿Qué sucede cuando el usuario pasa la ruta a un archivo importante del sistema, o un archivo bajo su control? ¿Se puede usar su script para "sondear" el servidor en busca de archivos que existen o no?

Como claramente está comenzando aquí, vale la pena recordar que esto se aplica a cualquier dato que llegue en $ _GET, $ _POST o $ _COOKIE: ¡asuma que su peor enemigo creó el contenido de esos arreglos y codifique en consecuencia!


9

Hay tres métodos para pasar valor en php.

  • Por vía postal
  • Por obtener
  • Al hacer que la sesión sea variable

Estos tres métodos se usan para diferentes propósitos. Por ejemplo, si queremos recibir nuestro valor en la página siguiente, podemos usar el método 'post' ($ _POST) como: -

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

Si requerimos el valor de variable en más de una página, podemos usar variable de sesión como: -

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

Antes de usar esta sintaxis para crear la variable SESSION, primero debemos agregar esta etiqueta al comienzo de nuestra página php

session_start(); 

El método GET se usa generalmente para imprimir datos en la misma página que solía recibir información del usuario. Su sintaxis es como:

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

El método POST generalmente es más seguro que GET porque cuando usamos el método Get, puede mostrar los datos en la barra de URL. Si los datos son datos más confidenciales como la contraseña, pueden ser inggeris.


7

Las sesiones serían la única buena manera, también podría usar GET / POST pero eso sería potencialmente inseguro.


6

prueba este código

usando el campo oculto podemos pasar php varibale a otra página

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>

pase la variable php al valor del campo oculto para que pueda acceder a esta variable en otra página

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>`

página 2

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

1

Las sesiones serían la única buena manera, también podría usar GET / POST pero eso sería potencialmente inseguro.

Paso de datos en la sesión Si no es necesario pasar los datos al lado del cliente, las sesiones pueden ser más apropiadas. Simplemente llame a session_start () al comienzo de cada página, y puede obtener y establecer datos en la matriz $ _SESSION.

Seguridad Dado que declara que su valor es en realidad un nombre de archivo, debe tener en cuenta las ramificaciones de seguridad. Si el nombre de archivo ha llegado del lado del cliente, suponga que el usuario ha alterado el valor. ¡Verifíquelo para la validez! ¿Qué sucede cuando el usuario pasa la ruta a un archivo importante del sistema o un archivo bajo su control? ¿Se puede usar su script para "sondear" el servidor en busca de archivos que existen o no?

Como claramente está comenzando aquí, vale la pena recordar que esto se aplica a cualquier dato que llegue en $ _GET, $ _POST o $ _COOKIE: ¡asuma que su peor enemigo creó el contenido de esos arreglos y codifique en consecuencia!

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.