- 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&oacute;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&oacute;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&oacute;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&oacute;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&oacute;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&oacute;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&oacute;n de formulario</title>
</head>
<body bgcolor="#eceaf3">
Validaci&oacute;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> &iexcl;Ok! <br/>&iexcl;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 &iquest;?</font>";
                        }
            if($_POST["phone"] == "")
                                   {
                        $errors['phone']="<font color='blue'>
                        Su n&uacute;mero de tel&eacute;fono, por favor &iquest;?</font>";
                        }
            }
   function display_form()
            {
                        global $errors;

?>
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>"><br>

&iquest;Cual es su nombre? <br />
<input type="text" name="name" value="<?php echo $_POST[name]; ?>"> <br />
<?php
            echo $errors['name'];
?> <br />
&iquest;Cual es su n&uacute;mero de tel&eacute;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);
?>


previo
Imprimir..
Ultima actualisación: Tue, 24 ▪ May ▪ 2011
próximo