Variables desde fuentes externas

Formularios HTML (GET y POST)

Cuando se envía un formulario a un script de PHP, la información de dicho formulario pasa a estar automáticamente disponible en el script. Existen algunas formas de acceder a esta información, por ejemplo:

Ejemplo #1 Un formulario HTML sencillo

<form action="foo.php" method="post">
    Nombre usuario: <input type="text" name="username" /><br />
    Email:  <input type="text" name="email" /><br />
    <input type="submit" name="submit" value="¡Enviarme!" />
</form>

A partir de PHP 5.4.0, solamente existen dos maneras de acceder a datos desde formularios HTML. Los métodos disponibles actualmente se enumeran a continuación:

Ejemplo #2 Acceso a datos de un formulario HTML sencillo con POST

<?php
echo $_POST['username'];
echo $_REQUEST['username'];
?>

Habían otras formas de acceder a la entrada del usuario en versiones antiguas de PHP. Están enumeradas abajo. Véase el historial de cambios al final para más detalles.

Ejemplo #3 Old methods of accessing user input

<?php
// OJO: estos métodos ya NO ESTÁN soportados.
// Los válidos están descritos arriba.

// Usar import_request_variables() - esta función ha sido eliminada en PHP 5.4.0
   
import_request_variables('p''p_');
   echo 
$p_username;

// Estas variables predefinidas fueron eliminadas en PHP 5.4.0
   
echo $HTTP_POST_VARS['username'];

// Usar register_globals. Esta característica fue eliminada en PHP 5.4.0
   
echo $username;
?>

Usar un formulario con GET es similar excepto en el uso de variables predefinidas, que en este caso serán del tipo GET. GET también se usa con QUERY_STRING (la información despues del símbolo '?' en una URL). Por ejemplo http://www.example.com/test.php?id=3 contiene datos GET que son accesibles con $_GET['id']. Véase también $_REQUEST.

Nota:

Puntos y espacios en nombres de variables son convertidos a guiones bajos. Por ejemplo <input name="a.b" /> se convierte en $_REQUEST["a_b"].

PHP también entiende arrays en el contexto de variables de formularios (vea la faq relacionada). Se puede, por ejemplo, agrupar juntas variables relacionadas o usar esta característica para obtener valores de una entrada "select" múltiple. Por ejemplo, vamos a mandar un formulario a sí mismo y a presentar los datos cuando se reciban:

Ejemplo #4 Variables de formulario más complejas

<?php
if ($_POST) {
    echo 
'<pre>';
    echo 
htmlspecialchars(print_r($_POSTtrue));
    echo 
'</pre>';
}
?>
<form action="" method="post">
    Nombre:  <input type="text" name="personal[nombre]" /><br />
    Email:   <input type="text" name="personal[email]" /><br />
    Cerveza: <br />
    <select multiple name="cerveza[]">
        <option value="warthog">Warthog</option>
        <option value="guinness">Guinness</option>
        <option value="stuttgarter">Stuttgarter Schwabenbräu</option>
    </select><br />
    <input type="submit" value="¡enviarme!" />
</form>

Nombres de variables tipo IMAGE SUBMIT

Cuando se envía un formulario, es posible usar una imagen en vez del botón estándar "submit":

<input type="image" src="image.gif" name="sub" />

Cuando el usuario hace click en cualquier parte de la imagen, el formulario que la acompaña se transmitirá al servidor con dos variables adicionales, sub_x y sub_y. Éstas contienen las coordenadas del clic del usuario dentro de la imagen. Los más experimentados puede notar que los nombres de variable enviados por el navegador contienen un guión en vez de un subrayado (guión bajo), pero PHP convierte el guión en subrayado automáticamente.

Cookies HTTP

PHP soporta cookies de HTTP de forma transparente tal y como están definidas en » RFC 6265. Las cookies son un mecanismo para almacenar datos en el navegador y así rastrear o identificar a usuarios que vuelven. Se pueden crear cookies usando la función setcookie(). Las cookies son parte de la cabecera HTTP, así que se debe llamar a la función SetCookie antes de que se envíe cualquier salida al navegador. Es la misma restricción que para la función header(). Los datos de una cookie están disponibles en el array de datos de la cookies apropiada, tal como $_COOKIE y $_REQUEST. Véase la página de setcookie() del manual para más detalles y ejemplos.

Si se quieren asignar múltiples valores a una sola cookie, basta con asignarlo como un array. Por ejemplo:

<?php
  setcookie
("MiCookie[foo]"'Prueba 1'time()+3600);
  
setcookie("MiCookie[bar]"'Prueba 2'time()+3600);
?>

Esto creará dos cookies separadas aunque MiCookie será un array simple en el script. Si se quiere definir una sola cookie con valores múltiples, considere el uso de la función serialize() o explode() primero en el valor.

Nótese que una cookie reemplazará a una cookie anterior que tuviese el mismo nombre en el navegador a menos que la ruta o el dominio fuesen diferentes. Así, para una aplicación de carrito de compras se podría querer mantener un contador e ir pasándolo. Es decir:

Ejemplo #5 Un ejemplo de setcookie()

<?php
if (isset($_COOKIE['conteo'])) {
    
$conteo $_COOKIE['conteo'] + 1;
} else {
    
$conteo 1;
}
setcookie('conteo'$conteotime()+3600);
setcookie("Carrito[$conteo]"$itemtime()+3600);
?>

Puntos en los nombres de variables de entrada

Típicamente, PHP no altera los nombres de las variables cuando se pasan a un script. Sin embargo, hay que notar que el punto no es un carácter válido en el nombre de una variable PHP. Para conocer la razón, considere el siguiente ejemplo:

<?php
$varname
.ext;  /* nombre de variable inválido */
?>
Lo que el intérprete vé es el nombre de una variable $varname, seguido por el operador de concatenación, y seguido por la cadena pura (es decir, una cadena sin entrecomillar que no coincide con ninguna palabra clave o reservada conocida) 'ext'. Obviamente, no se pretendía que fuese éste el resultado.

Por esta razón, es importante hacer notar que PHP reemplazará automáticamente cualquier punto en los nombres de variables de entrada por guiones bajos (subrayados).

Determinación de los tipos de variables

Dado que PHP determina los tipos de las variables y los convierte (generalmente) según lo que necesita, no siempre resulta obvio de qué tipo es una variable dada en un momento concreto. PHP incluye varias funciones que descubren de qué tipo es una variable: gettype(), is_array(), is_float(), is_int(), is_object(), y is_string(). Vea también el capítulo sobre Tipos.

Historial de cambios

Versión Descripción
5.4.0 Se han eliminado Register Globals, Magic Quotes y register_long_arrays
5.3.0 Están obsoletos Register Globals, Magic Quotes y register_long_arrays
4.2.0 Ahora, el valor predeterminado de la directiva register_globals es off.
4.1.0 Están disponibles arrays superglobales, como $_POST y $_GET became.