Controles en formulariosCuando se envía un formulario, PHP almacena la información recibida en una matriz llamada $_REQUEST. El número de valores recibidos y los valores recibidos dependen tanto del formulario como de la acción del usuario.
Cualquier control se envía solamente si está establecido su atributo name. El atributo name del control puede contener cualquier carácter (números, acentos, guiones, etc), pero si contiene espacios, los espacios se sustituyen por guiones bajos (_). Cada control crea un elemento de la matriz $_REQUEST, que se identifica como $_REQUEST[valor_del_atributo_name] y que contiene el valor entregado por el formulario (en su caso).
| <form action="ejemplo.php"> <p><input type="text" name="texto" /></p> <p><input type="submit" value="Enviar" /></p> </form> |
| <?php print_r ($_REQUEST); print "<p>Texto recibido: $_REQUEST[texto]</p>"; ?> |
Array ( [texto] => Pepito Conejo) Texto recibido: Pepito Conejo |
Este control se envía siempre. El valor enviado es el contenido de la caja o área.
| Código fuente | Control | $_REQUEST |
|---|---|---|
| <input type="text" name="cajatexto1" /> | Array ( [cajatexto1] => ) | |
| <input type="text" name="cajatexto2" value="Cualquier cosa" /> | Array ( [cajatexto2] => Cualquier cosa ) |
Falta caja de contraseña y área de texto
Este control se envía solamente si se marca la casilla. El valor enviado es "on" si la casilla no tiene definido el atributo value o el valor del aributo value si éste está definido.
| Código fuente | Control | $_REQUEST |
|---|---|---|
| <input type="checkbox" name="casilla1" /> | (sin marcar) | Array ( ) |
| <input type="checkbox" name="casilla2" /> | (marcada) | Array ( [casilla2] => on ) |
| <input type="checkbox" name="casilla3" value="Tres" /> | (marcada) | Array ( [casilla3] => Tres ) |
Este control se envía solamente si se marca alguno de los botones radio que forman el control. El valor enviado es "on" si el botón marcado no tiene definido el atributo value o el valor del atributo value si éste está definido.
| Código fuente | Control | $_REQUEST |
|---|---|---|
| <input type="radio" name="radio1" /> <input type="radio" name="radio1" /> |
(sin marcar) | Array ( ) |
| <input type="radio" name="radio2" /> <input type="radio" name="radio2" /> |
(marcado uno) | Array ( [radio2] => on ) |
| <input type="radio" name="radio3" /> <input type="radio" name="radio3" /> |
(marcado otro) | Array ( [radio3] => on ) |
| <input type="radio" name="radio4" value="Uno" /> <input type="radio" name="radio4" value="Dos" /> |
(marcado uno) | Array ( [radio4] => Uno ) |
| <input type="radio" name="radio5" value="Uno" /> <input type="radio" name="radio5" value="Dos" /> |
(marcado otro) | Array ( [radio5] => Dos ) |
Este control envía siempre la opción elegida. El valor enviado es el contenido de la etiqueta option elegida si la opción elegida no tiene definido el atributo value o el valor del aributo value si éste está definido.
Si el menú admite selección múltiple, entonces el nombre del menú debe acabar con corchetes ([]) y se envía como una matriz, de tantos elementos como opciones se hayan elegido.
| Código fuente | Control | $_REQUEST |
|---|---|---|
| <select name="menu1"> <option selected="selected"></option> <option></option> </select> |
Array ( [menu1] => ) | |
| <select name="menu2"> <option selected="selected">Opción 1</option> <option>Opción 2</option> </select> |
Array ( [menu2] => Opción 1 ) | |
| <select name="menu3"> <option selected="selected" value="Uno">Opción 1</option> <option value="Dos">Opción 2</option> </select> |
Array ( [menu3] => Uno ) | |
| <select name="menu4[]" size="3" multiple="multiple"> <option selected="selected">Opción 1</option> <option>Opción 2</option> <option>Opción 3</option> </select> |
(Marcados 1 y 3) |
Array ( [menu4] => Array ( [0] => Opción 1 [1] => Opción 3 ) ) |
Nota: Amaya 8.7.1/9.0, al insertar un menú y guardar el documento, dice que falta el atributo name.
Este control se envía siempre y el valor enviado es el valor del atributo value.
| Código fuente | Control | $_REQUEST |
|---|---|---|
| <input type="hidden" name="oculto1" /> | Array ( [oculto1] => ) | |
| <input type="hidden" name="oculto2" value="Cualquier cosa" /> | Array ( [oculto2] => Cualquier cosa ) |
Este control se envía solamente si está establecido el atributo name y el valor enviado es el valor del atributo value.
| Código fuente | Control | $_REQUEST |
|---|---|---|
| <input type="submit" value="Submit" /> | Array ( ) | |
| <input type="submit" value="Submit" name="boton2" /> | Array ( [boton2] => Submit ) |
Nota: Amaya 8.7.1/9.0 no permite establecer el atributo name, salvo editando el código fuente.
Por completar
Por completar
Hay varias maneras de hacer referencia a los datos recibidos de un formulario. La más inmediata es utilizar la matriz $_REQUEST, pero también se pueden almacenar los valores de la matriz $_REQUEST en variables auxiliares.
En el caso de los controles que siempre aparecen en la matriz $_REQUEST (por ejemplo, un control de tipo texto):
| <?php print "<p>El texto es $_REQUEST['texto']</p>"; ?> |
Parse error: parse error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in ejemplo.php on line 2 |
| <?php print "<p>El texto es $_REQUEST[texto]</p>"; ?> |
El texto es |
| <?php print "<p>El texto es ".$_REQUEST[texto]."</p>"; ?> |
Notice: Use of undefined
constant texto - assumed 'texto' in ejemplo.php
on line 2 El texto es |
| <?php print "<p>El texto es ".$_REQUEST['texto']."</p>"; ?> |
El texto es |
En el caso de los controles que no aparecen en la matriz $_REQUEST (por ejemplo, una casilla de verificación que no haya sido marcada):
| <?php print "<p>La casilla está $_REQUEST['casilla']</p>"; ?> |
Parse error: parse error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in ejemplo.php on line 2 |
| <?php print "<p>La casilla está $_REQUEST[casilla]</p>"; ?> |
Notice: Undefined index: casilla
in ejemplo.php on line
2 La casilla está |
| <?php print "<p>La casilla está ".$_REQUEST[casilla]."</p>"; ?> |
Notice: Use of undefined
constant casilla - assumed 'casilla' in
ejemplo.php on line 2 Notice: Undefined index: casilla in ejemplo.php on line 2 La casilla está |
| <?php print "<p>La casilla está ".$_REQUEST['casilla']."</p>"; ?> |
Notice: Undefined index: casilla
in ejemplo.php on line
2 La casilla está |
Independientemente de que se utilicen o no comillas, PHP avisa de que el índice casilla no está definido. La única solución para este problema es comprobar que el índice está definido antes de hacer referencia a él, como se explica en el apartado siguiente.
Para no tener que estar escribiendo $_REQUEST cada vez que se quiere utilizar el valor del control, se puede utilizar una variable. Al definir la variable, se deben utilizar comillas para evitar el aviso de constante no definida.
| <?php $texto = $_REQUEST['texto']; print "<p>El texto es $texto</p>"; ?> |
El texto es |
| <?php $casilla = $_REQUEST['casilla']; print "<p>La casilla está $casilla</p>"; ?> |
Notice: Undefined index: casilla
in ejemplo.php on line
2 La casilla está |
| <?php if (isset($_REQUEST['casilla'])) $casilla = $_REQUEST['casilla']; else $casilla = ""; print "<p>La casilla está $casilla</p>"; ?> |
La casilla está |
La asignación de la variable se puede realizar en una sola línea, utilizando la notación abreviada: (condición) ? verdadero : falso;:
| <?php $casilla = (isset($_REQUEST['casilla'])) ? $_REQUEST['casilla'] : ""; print "<p>La casilla está $casilla</p>"; ?> |
La casilla está |