| |
|
|
| |
-
PHP - Elementos estructurales - Formularios
-
Ejemplo de formulario:
<html>
<head>
<title>Formulario simple</title>
</head>
<body bgcolor="#eceaf3">
<form action="ejem.php" method="post">
Introduzca su nombre: <br/>
<input type="text" name="nombre" size="20"><br/>
<input type="submit" name="submit" value="Enviar">
<input type="reset" value="borrar">
</form>
</body>
</html>
Los datos son enviados con dos metodos; "post" y "get".
"get" es utilizado para el tratamiento de documentos estaticos o la consulta de una base de datos. Es el método por defecto, si no se
indica otra cosa. Envia los datos al servidor, adjuntandolos al final del URL en la cadena de consulta.
Los datos enviados con el método "get" tienen un tamaño limitado, por lo que si se requiere enviar mucha información al
servidor, debe utilizarse el método "post".
El método "post" se utiliza cuando el procesamiento del formulario tiene efectos colaterales, como puede ser la modificación
de una base de datos. Este método no agrega los datos al final del URL en una cadena de consulta, sino que envia la información en un
mensage, en una cabecera HTTP.
Los formularios cuentan con los siguientes elementos de entrada:
| Elemento |
Atributo |
Descrpción |
| text |
name size maxlength |
Crea campo de texto para entrar datos. size indica el tamaño del campo y maxlength, el número máximo
permitido |
| textarea |
name size rows size colos |
Crea campo de datos de varias líneas. size rows y size cols indican el tamaño |
| password |
name value |
Es un campo de datos que esconde los datos tecleados. En lugar del texta apareceran asteriscos |
| checkbox |
name value |
Casillas. Crea par de valores nombre – valor a partir de la acción del usuario. De haber varias casillas, se
pueden marcar o no! |
| radio |
name value |
Radio. Crea par de valores nombre – valor a partir de la acción del usuario. Normalmente hay varios radios y
solo se puede escoger uno. |
| select |
name option size multiple |
Crea lista desplegable. Solo se puede escoger una opción. El atributo multiple hace posible que se pueda recorrer los
elementos de la lista. El atributo size=1 crea una lista desplegable que solo tiene una opción |
| file |
name |
Indica el archivo a subir al servidor. El tipo MIME debe ser multipart/form-data |
| hidden |
name value |
Crea un par de valores nombre – valor, el cual no se muestra en la pantalla |
| submit |
name value |
Al pulsarlo, se ejecuta el formulario |
| image |
src value align |
Al pursarlo, se ejecuta el formulario. Muestra una imagen, la cual está en la dirección indicada con src |
| reset |
name value |
Retorna el formulario a su estado inicial, borrando todos los campos |
Con la etiqueta "<form>" se da comienzo al formulario.
El atributo "method" de esta etiqueta, le indica al navegador como enviar los datos y "action", donde enviarlos.
Por su parte, PHP toma los datos del servidor y los asigna a variables, generalmente con el mismo nombre del elemento HTML correspondiente. En el ejemplo
anterior, el campo de texto se llama "nombre".
PHP cuenta con las matrices asociativas superglobales $_POST y $_GET, a las que se le asigna los nombres de los dispositivos y el valor que el usuario teclee.
El formato generalmente utilizado es:
$_GET['nombre'] o $_POST['nombre']
Además, existen las siguientes matrices superglobales:
| Matriz |
Alias |
Descripción |
| |
$GLOBALS |
Contiene una referencia a las variables disponibles dentro del alcance global del script. Las claves de esta matriz son
los nombres de las variable globales |
| $_HTTP_COOKIE_VARS |
$_COOKIE |
Valores que se proporcionan al script con cookies |
| $_HTTP_GET_VARS |
$_GET |
Variable que se pasa al script con el método GET |
| $_HTTP_POST_VARS |
$_POST |
Variable que se pasa al script con el método POST |
| $_HTTP_POST_FILE |
$_FILE |
Variable con información de los archivos de subida |
| $_HTTP_SERVER_VARS |
$_SERVER |
Variable del servidor WEB |
| $HTTP_ENV_VARS |
$_ENV |
Variables de entorno |
| |
$_REQUEST |
Variable con información de los métodos GET, POST y COOKIES |
| |
$_SESSION |
Variable con los vsalores de la sesión actual |
La matriz $_REQUEST
Los valores de esta matriz se pueden extraer y a continuación asignarse a las variables.
ejemplo formulario:
<html>
<head>
<title>Formulario simple</title>
</head>
<body bgcolor="#eceaf3">
<form action="ejem.php" method="post">
Introduzca su nombre: <br>
<input type="text" name="nombre" size="20"><br>
Introduzca su telefono: <br>
<input type="text" name="telefono" size="20"><br>
Introduzca su direccion de correo electr.: <br>
<input type="text" name="correo" size="20"><br>
<input type="submit" name="submit" value="Enviar">
<input type="reset" value="borrar">
</form>
</body>
</html>
Script PHP:
<html>
<head>
<title>Matriz $_REQUEST</title>
</head>
<body bgcolor="#eceaf3">
<font face = "verdana" size='+1'>
<pre>
Contenido de la matriz $_REQUEST
<?php
foreach($_REQUEST as $key=>$val)
{
echo"key=>$val<br/>";
}
?>
</pre>
</font>
</body>
</html>
Función extract( )
Esta función puede utilizarse para crear variables a partir de una matriz asociativa.
Las claves de la matriz $_REQUEST, determinan el nombre de las variables y los valores de las variables son los correspondientes de la matriz asociativa.
Ejemplo:
<html>
<head>
<title>Matriz $_REQUEST</title>
</head>
<body bgcolor="#eceaf3">
<font face = "verdana" size='+1'>
<pre>
Contenido de la matriz $_REQUEST
<hr>
<?php
extract($_REQUEST);
print"Saludos: \t\t\t$nombre <br/>";
print"con el Nr. telefonico: \t$telefono <br/>";
print"direccion email: \t\t$correo <br/>";
?>
</pre>
</font>
</body>
</html>
Formulario con listas y casillas de verificación
<html>
<head>
<title>Formulario simple</title>
</head>
<body bgcolor="#eceaf3">
<form action="ejem.php" method="post">
Indique su lugar de destino: <br>
<select name="lugar[]" multiple="multiple"><br>
<option>Paris</option><br>
<option>Berlin</option><br>
<option>Madrid</option><br>
<option>Lisboa</option><br>
</select><br>
Escoja un medio de locomocion:<br>
<input type="checkbox" name="medio[]" value="bicicleta">Bicicleta<br>
<input type="checkbox" name="medio[]" value="a pie">A pie<br>
<input type="checkbox" name="medio[]" value="omnibus">Omnibus<br>
<input type="checkbox" name="medio[]" value="auto">Auto<br>
<input type="submit" name="submit" value="Enviar"><br>
<input type="reset" value="borrar"><br>
</form>
</body>
</html>
Script PHP
<html>
<head>
<title>Matriz definida por el usuario</title>
</head>
<body bgcolor="#eceaf3">
<font face = "verdana" size='+1'>
<pre>
<fieldset><legend>Escojer el lugar de destino</legend>
<?php
//
if(is_array($_POST['lugar']))
{
print"<ul>";
foreach($_POST['lugar'] as $key=>$value)
{
print"$key=>$value";
}
print"</ul>";
}
?>
</fieldset>
<fieldset><legend>Medio de locomocion</legend>
<?php
extract($_POST);
if(is_array($medio))
{
print"<ul";
foreach($medio as $key=>$value)
{
print"<li>$key=>$value</li>";
}
print"</ul>";
}
?>
</fieldset>
</pre>
</font>
</body>
</html>
Formulario con botón de imagen
<html>
<head>
<title>Formulario simpleexplosión</title>
</head>
<body bgcolor="#eceaf3">
<form method="post" action="ejem.php" >
Escoja un medio de locomocion:<br>
<input type="checkbox" name="medio[]" value="bicicleta">Bicicleta<br>
<input type="checkbox" name="medio[]" value="a pie">A pie<br>
<input type="checkbox" name="medio[]" value="omnibus">Omnibus<br>
<input type="checkbox" name="medio[]" value="auto">Auto<br>
Pulse el icono para mandar el mensaje!<br>
<input type="image" name='explosion' src="explosion.jpg" alt="Enviar el
mensaje"><br><br>
<input type=reset value="borrar" />
</form>
</body>
</html>
Script PHP
<html>
<head>
<title>Determinar coordenadas del icono</title>
</head>
<body bgcolor="#eceaf3">
<font face = "verdana" size='+1'>
<pre>
<fieldset><legend>Explosión</legend>
<?php
if ($_POST['medio'])
{
print "<ul>";
foreach($_POST['medio']as$value)
{
print "<li>$value</li>";
}
print "</ul>";
}
print "Coordenadas de píxeles de la imagen: <br>";
$coord1=$_POST['explosion_x'];
$coord2=$_POST['explosion_y'];
print "$coord1, $coord2<br />";
?>
</fieldset>
</pre>
</font>
</body>
</html>
Pueden combinarse el formulario y el script en un mismo documento.
Para esto, puede asignarse la matriz $_SERVER['PHP_SELF'] al atributo action de la etiqueta <form>.
Dado que el formulario HTML y código PHP se encuentran en el mismo documento, debe comprobarse que el formulario haya sido enviado al servidor.
Esto se hace como muestra el siguiente ejemplo:
<?php
if(isset($_POST['submit']))
{
$nombre=$_POST[nombre];
$telefono=$_POST[telefono];
print"Su nombre es: $nombre<br/>";
print"Su nr. telefonico es: $telefono<br/>";
print"La direccion donde se encuentra el archivo es: ". $_SERVER['PHP_SELF'] . "<br/>";
}
else
{
?>
<html>
<head>
<title>Formulario y PHP script</title>
</head>
<pre>
<body bgcolor="#eceaf3">
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
Intrudusca su nombre: <br>
<input type="text" size="60" name="nombre"><br>
Introdusca su nr. telefonico: <br>
<input type="text" size="60" name="telefono"><br>
<input type="submit" name="submit" value="Mandas nuevamente">
<input type=reset value="borrar">
</form>
<hr>
</body>
</pre>
</html>
<?php } ?>
Campos ocultos
Son utilizados para identificar el formulario y determinar que debe ser procesado. Al comprobar la existencia y el valor de un campo oculto, se
determina que formulario debe ser mostrado en pantalla. Además pueden utilizarse para incluir informaciones que no deben ser mostrados al
visitante, como fecha de creación y el nombre del autor.
Ejemplo:
<html>
<head>
<title>Utilizar campos ocultos</title>
</head>
<body bgcolor="#eceaf3">
<font face = "verdana" size='+1'>
<pre>
<?php
if (isset($_POST['respuesta']) && ($_POST['respuesta'] == 'proceso'))
{
proceso();
}
else
{
pantalla();
}
function pantalla(){
echo <<<EOF
<form action="$_SERVER[PHP_SELF]" method="post">
Evaluacion del sitio
<br /><b /r>
<input type="radio" name="evaluar" value="excelente" />Excelente
<input type="radio" name="evaluar" value="promedio" />Promedio
<input type="radio" name="evaluar" value="pobre" />Pobre
<input type="radio" name="evaluar" value="desastroso" />Desastroso
<input type="hidden" name="respuesta" value="proceso">
<input type="hidden" name="creation_date" value="Feb. 2006" />
<br />
<input type="submit" value="submit evaluar" />
<input type="reset" value="clear" />
</form>
EOF;
}
function proceso()
{
echo "Concidero el sitio $_POST[evaluar]!";
}
?>
</pre>
</font>
</body>
</html>
Redireccionar usuarios
Esto puede implementarse con la función "header( )", la cual modifica la cabecera de respuesta http enviada por el servidor.
Ejemplo:
<?php
header('location: direccion');
?>
<html>
<head>
<title>Redirecionamiento</title>
</head>
<body bgcolor="#eceaf3">
<pre>
Este sitio redirecciona a los visitantes!!!!
</pre>
</body>
</html>
La información de la cabecera debe ser enviada al navegador antes que cualquier otra información, por lo que debe aparecer en el primer
lugar de la página (del código).
A "location" se le puede asignar una dirección absoluta (en otro o en el mismo sitio).
Otro ejemplo. Formulario:
<html>
<head>
<title>Formulario selección de sitio</title>
</head>
<body bgcolor="#eceaf3">
<form action="dirección absoluta de la página donde está el script PHP" method="post">
Selección del sitio donde ir:<br>
<select name="nueva_url">
<option value="http://www.google.com">Google</option>
<option value="http://www.yahoo.com"> Yahoo!</option>
<option value="http://www.netzweb.net"> Netzweb</option>
</select>
<input type="submit" value="Ir al sitio selecionado">
</form>
</body>
</html>
Script PHP:
<?php
if($_POST[nueva_url] == "")
{
exit;
}
else
{
header("location: $_POST[nueva_url]");
exit;
}
?>
Subir archivos
Los formulario HTML pueden ser utilizados para suber asrchivos del navegador al servidor Web. Para esto, la etiqueta "<form>" tiene el atributo
"enctype", el cual determina como el navegador codifica los datos del formulario.
Su valor por defecto es "application/x-www-form-urlencoded". Para enviar archivos, debe especificarse que los datos son "multipart/form-data".
El atributo "method" debe ser "post".
Debe agregarse un elemento "<input>" del tipo "file", con el que el navegador mostrará el nombre de los archivos a cargar.
Puede especificarse el tamaño del campo "MAX_FILE_SIZE", el cual limita el número de byte que se cargarán. Este valor no puede ser mayor que el
"upload_max_filesize", definido en el archivo "php.ini" (por defecto, 2MB).
El campo oculto (hidden), debe preceder al campo de entrada del archivo.
Ejemplo:
<html>
<head>
<title>Formulario selección de archivo</title>
</head>
<body bgcolor="#eceaf3">
<form enctype="multipart/form-data" action="plantilla.php" method="post">
<!-- MAX_FILE_SIZE es opcional y debe estar antes del <input> del archivo-->
<input type="hidden" name="MAX_FILE_SIZE" value="30000">
Seleccione al archivo a cargar:<br>
<input type="file" name="arch_subir" value="buscar!"><br>
<input type="submit" value="Cargar el archivo">
</form>
</body>
</html>
Los archivos se almacenarán en el directorio temporal predeterminado del servidor, a no ser que se especifique otra dirección, en la
directiva "upload_tmp_dir" del archivo "php.ini".
Puede utilizar la función "move_uploaded_file( )" para definir donde copiar el archivo en forma permanente.
Cuando un archivo se envía al servidor, PHP guarda la información del archivo en la matrz superglobal "$_FILES" que es una
matriz bidireccionasl que contiene la información relativa al envío del fichero. El primer índice de la matriz es el nombre del
archivo y el segundo, es uno de sus atributos.
Atributos de la matriz superglobal $_FILES
| Matriz |
Descripción |
| $_FILES['userfile']['name'] |
Nombre original del archivo en la máquina cliente |
| $_FILES['userfile']['type'] |
Typo MIME del archivo, si el navegador brinda esta información |
| $_FILES['userfile']['size'] |
Tamaño del archivo enviado |
| $_FILES['userfile']['tmp_name'] |
Nombre temporal del archivo que se ha gargado en el servidor |
| $_FILES['userfile']['error'] |
Código de error asociado al envío del archivo |
Ejemplo. Formulario para subir archivo:
<html>
<head>
<title>Formulario selección de archivo para cargarlo</title>
</head>
<body bgcolor="#eceaf3">
Cargar archivo
<form enctype="multipart/form-data" action="ejem.php" method="post">
Escriba el nombre del archivo para cargar: <br>
<input name="user_file" type="file"><br>
<input type="submit" value="Cargar el archivo!">
</form>
</body>
</html>
Script PHP
<?php
$var=fopen($_FILES['user_file']['tmp_name'], "r");
while(!feof($var))
{
$text=fgets($var);
echo $text,"<br />";
}
?>
La función "move_uploades_file( ) cambia de ubicación el archivo cargado.
El primer argumento representa el archivo cargado y el segundo argumento, indica donde debe moverse.
La función comprueba que se trata de un archivo valido (el primer argumento).
Si el nombre del archivo no es válido, no se ejecutará la acción y devolverá el valor booleano "FALSE", junto
con mensaje de error.
Ejemplo:
<html>
<head>
<title>Mover archivo cargado</title>
</head>
<body bgcolor="#eceaf3">
Mover archivo
<form enctype="multipart/form-data" action="/netzweb_/ejem.php" method="post">
Busque y seleccione la imagen que desee cargar: <br>
<input name="pictore_file" type="file"><br>
<input type="submit" value="Cargar el archivo">
</form>
</body>
</html>
Formulario con memoria
Para el visitante de un sitio, resulta confortable que los datos tecleados en los campos de un formulario, no sean olvidados. Piense por ejemplo, en el caso
que se haya cometido algún error y se tenga que reyenar el formulario. Sería ventajoso corregir los errores antes que llenar el formulario desde
el principio.
En el siguiente ejemplo, se comprueba sie el usuario ha dejado algún campo vacio y de ser así, muestra el formulario nuevamente con un mensaje
que indica que el usuario debe corregir los datos incompletos, sin olvidar los datos tecleados.
Ejemplo:
<html>
<head>
<title>Validación de formulario</title>
</head>
<body bgcolor="#eceaf3">
Validación de formulario.<br>
<?php
$errors=array();
// Si se envía el formulario
if(isset($_REQUEST['submit']))
{
// Verificación de campos vacíos
validate_input();
// Si hay errores,
if(count($errors) != 0)
{
// volver a mostrar el formulario
display_form();
}
else
{
echo "<b> ¡Ok! <br/>¡Adelante, a procesar el
formulario! </b> <br />";
}
}
else
{
// Mostrar el formulario por primera vez
display_form();
}
function validate_input()
{
global $errors;
if($_POST["name"] == "")
{
$errors['name']="<font color='blue'>
Su nombre, por favor ¿?</font>";
}
if($_POST["phone"] == "")
{
$errors['phone']="<font color='blue'>
Su número de teléfono, por favor ¿?</font>";
}
}
function display_form()
{
global $errors;
?>
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>"><br>
¿Cual es su nombre? <br />
<input type="text" name="name" value="<?php echo $_POST[name]; ?>"> <br />
<?php
echo $errors['name'];
?> <br />
¿Cual es su número de teléfono?<br />
<input type="text" name="phone" value="<?php echo $_POST[phone]; ?>"><br />
<?php
echo $errors['phone'];
?>
<br />
<input type="reset">
<input type="submit" name="submit"><br />
<form>
<?php
}
?>
</body>
</html>
Las matrices superglobales ($_GET y $_POST) están destinadas a guardar los datos de entrada de usuario que proceden de formularios HTML
Función phpinfo( )
Esta función visualiza las variables predefinidas del sistema que incluye la versión de PHP, el sistema operativo, el entorno,
las opciones de compilación, informaciones del servidor, cabeceras http, entre otras.
La tabla siguiente brinda información sobre las opciones de phpinfo( )
| Constante |
Valor |
Descripción |
| INFO_GENERAL |
1 |
La línea ded configuración, ubicación de php.ini, fecha de compilación,
servidor Web, sistema, etc. |
| INFO_CREDITS |
2 |
Créditos PHP, quiere esto decir diseño, conseptos del lenguaje, autores,etc. |
| INFO_CONFIGURATION |
4 |
Valores locales y maestros actuales de las directivas PHP |
| INFO_MODULES |
8 |
Módulos cargados y sus respectivos parámetros |
| INFO_ENVIRONMENT |
16 |
Información de las variables de entorno |
| INFO_VARIABLES |
32 |
Muestra todas las variables predefinidas (entorno, GET, POST, Cookie, Servidor) |
| INFO_LICENSE |
64 |
Información de la licencia PHP |
| INFO_ALL |
-1 |
Muestra toda la información |
Ejemplo:
<?php
phpinfo(INFO_ALL);
?>
Información del servidor
El servidor Web asigna valores a la matriz superglobal $_SERVER; cabecera, ruta, información de la versión, etc.
Visualizar informaciones del servidor
| Clave |
Descripción |
| PHP_SELF |
Es el nombre del archivo que está ejecutandose |
| GATEWAY_INTERFACE |
Especificación CGI que está usando el servidor |
| SERVER_NAME |
Nombre del servidor bajo el que se ejecuta PHP |
| SERVER_SOFTWARE |
Cadena de identificación del servidor |
| SERVER_PROTOCOL |
Nombre y revisión del protocolo utilizado para solicitar la página |
| REQUEST_METHOD |
Método de petición para acceder a la página (GET, HEAD, POST, PUT) |
| REQUEST_TIME |
Inicio de la petición |
| QUERY_STRING |
Cadena de consulta, mediante la cual se accede a la página |
| DOCUMENT_ROOT |
Directorio raiz de documentos bajo el que se ejecuta el script actual, como se define en el
archivo de configuración del servidor |
| HTTP_ACCEPT |
Contenido De Accept (cabecera de la petición actual) |
| HTTP_CONNECTION |
Contenido de Connection (cabecera de la petición actual) |
| HTTP_HOST |
Contenido de Host (cabecera de la petición actual) |
| HTTP_REFERER |
Dirección de la página que refirió al agente de usuario a la página
actual |
| HTTP_USER_AGENT |
Contenido de User-agent (cabecera de la petición actual) |
| REMOTE_ADDR |
Dirección IP de donde el usuario ve la página |
| REMOTE_HOST |
Nombre del host de donde el usuario ve la página |
| REMOTE_PORT |
Puerto utilizado en la maquina de usuario para comunicarse con el servidor |
| SCRIPT_FILENAME |
Ruta absoluta del script que se ejecuta |
| SERVER_PORT |
Puerto del servidor (predeterminado 80) |
| SERVER_SIGNATURE |
Cadena que contiene la versión del servidor y el nombre del host virtual que se agregan a
las páginas generadas por el servidor |
| PATH_TRANSLATED |
Ruta del sistema de archivos |
| SCRIPT_NAME |
Ruta del script |
| REQUEST_URI |
URI para acceder a la página |
Ejemplo:
<html>
<head>
<title> Informaciones sobre el servidor </title>
</head>
<body bgcolor="#eceaf3">
<table border="1">
<?php
foreach($_SERVER as $key=>$value)
{
echo"<tr/>";
echo"<td/>$key</td/><td/>$value</td/>";
echo"</tr/>";
}
?>
</table>
</body>
</html>
Otro ejemplo:
<html>
<head>
<title>Informaciones sobre el servidor</title>
</head>
<body bgcolor="#eceaf3">
<?php
echo "Mi servidor es: \"", $_SERVER["SERVER_NAME"], "\".\n\n<br />";
echo"<hr/>";
echo "La direccion IP de mi servidor es: \"", $_SERVER["REMOTE_ADDR"], "\".\n\n<br
/>";
echo"<hr/>";
echo "Mi navegador es: \"", $_SERVER["HTTP_USER_AGENT"], "\". \n<br />";
echo"<hr/>";
echo "El script PHP que se está ejecutando es: \"", $_SERVER["PHP_SELF"], "\".\n\n<br
/>";
?>
</body>
</html>
Informaciones sobre las variables de entorno
Las variables de entorno son valores predefinidos que contienen información sobre el sistema operativo,shell, ruta, variables CBI y el ordenador donde se ejecuta PHP.
La matriz $_ENV contiene las variables de entorno que tambien se puede visualizar con la función phpinfo( ).
Para determinar el nombre del host remoto, puede implementarse lo siguiente:
echo $_ENV['REMOTE_HOST'];
La función getenv( ), ofrece el valor de una variable de entorno. Por ejemplo
echo getenv('REMOTE_HOST);
La variable de entorno puede mostrarse con
<?php
phpinfo(16);
?>
 |
|
Ultima actualisación: Tue, 24 ▪ May ▪ 2011
|
|
|
|