Cuando se envía un formulario a un script PHP, las variables de dicho formulario pasan a estar automáticamente disponibles en el script gracias a PHP. Por ejemplo, consideremos el siguiente formulario:
Ejemplo #1 Variables de formulario simples
<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>
Dependiendo de su configuración y preferencias personales, existen muchas maneras de acceder a los datos de formularios HTML. Algunos ejemplos:
Ejemplo #2 Acceso a datos de un formulario simple HTML POST
<?php // Disponible desde PHP 4.1.0 echo $_POST['username']; echo $_REQUEST['username']; import_request_variables('p', 'p_'); echo $p_username; // Desde PHP 5.0.0, las variables predefinidas largas se pueden // desactivar con la directiva register_long_arrays. echo $HTTP_POST_VARS['username']; // Disponible si la directiva de PHP register_globals = on. A partir de // PHP 4.2.0 el valor predeterminado de register_globals = off. // Usar o depender de este método no es recomendable. echo $username; ?>
Usar un formulario 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']. Vea también $_REQUEST e import_request_variables().
Nota:
Las matrices superglobales, como $_POST y $_GET, están disponibles desde PHP 4.1.0.
Nota:
Puntos y espacios en nombres de variable son convertidos a subguiones. Por ejemplo <input name="a.b" /> resulta $_REQUEST["a_b"].
Como hemos dicho, antes de PHP 4.2.0, el valor por omisión de register_globals era on (activado). La comunidad PHP recomienda no confiar en esta directiva ya que es preferible asumir que tiene el valor off (desactivada) y programar teniendo en cuenta esto.
Nota:
La directiva de configuración magic_quotes_gpc afecta a valores Get, Post y Cookie. Si está activada (on), el valor (It's "PHP!") será convertido automáticamente a (It\'s \"PHP!\"). Se consideró que esto era necesario para el escape de caracteres para su inserción en base de datos hace una década, pero actualmente es una característica obsoleta que debe ser desactivada. Ver también addslashes(), stripslashes() y magic_quotes_sybase.
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 #3 Variables de formulario más complejas
<?php
if ($_POST) {
echo '<pre>';
echo htmlspecialchars(print_r($_POST, true));
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>
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.
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 con datos de cookies apropiada, tal como $_COOKIE, $HTTP_COOKIE_VARS y también en $_REQUEST. Vea la función setcookie() 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 #4 Un ejemplo de setcookie()
<?php
if (isset($_COOKIE['conteo'])) {
$conteo = $_COOKIE['conteo'] + 1;
} else {
$conteo = 1;
}
setcookie('conteo', $conteo, time()+3600);
setcookie("Carrito[$conteo]", $item, time()+3600);
?>
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 */
?>
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).
Dado que PHP determina los tipos de las variables y los convierte (generalmente) según lo 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.