Tal y como hemos visto en los anteriores cursos, usaremos el lenguaje HTML para crear formularios y JavaScript para validarlos localmente en el ordenador del usuario antes de enviar los datos al servidor web.
Cuando el servidor web recibe los datos, estos deben ser validados nuevamente en él para asegurarnos de que han llegado todos y que son correctos (por ejemplo: si esperamos un texto, que no hayamos recibido un valor numérico o nulo).
Dado que PHP es un lenguaje de programación que se ejecuta en el servidor web podemos utilizarlo para realizar dicha validación, como te explicaremos a continuación.

Relacionado: [ Formularios en HTML ] - [ Formularios en JavaScript ]
Cuando un usuario envía un formulario los datos contenidos en cada componente (definidos mediante las etiquetas HTML <input>, <select> y <textarea>) llegan al servidor web y son almacenados en un array asociativo ($_POST o $_GET, dependiendo de si el formulario está definido con el atributo HTML method="post" o method="get"): por cada componente del formulario se insertará un elemento en el array cuya clave será el atributo HTML name de dicho componente, y el valor el contenido en su atributo HTML value.
Sin embargo, debes tener en cuenta que tras enviarse el formulario no se guardará nada en dicho array asociativo si:
- Una casilla de verificación (creada con <input type="checkbox" />) o un botón radio (creado con <input type="radio" />) no estuviesen seleccionados.
Otras consideraciones:
- Si un cuadro de texto (creado con <input type="text" ... /> o <textarea>) se ha enviado sin contenido alguno, se insertará un elemento en el array asociativo pero su valor será el de una cadena vacía.
- Si una casilla de verificación o botón de tipo radio estaban marcados pero no tenían definido el atributo HTML value, su valor en el array asociativo será on.
- Si en un cuadro de lista (creado con <select>) se encontraba seleccionado un elemento (creado con <option>) que no tenía definido el atributo HTML value, su valor en el array asociativo sería el texto que estuviese indicado entre (<option> y </option>).
Por último, si un formulario que contiene un componente para seleccionar un archivo creado con <input type="file" ... /> (usado para subir archivos al servidor) no contiene el atributo HTML enctype="multipart/form-data", no quedará registrado en el array asociativo $_FILES (lo explicaremos más adelante) sino en $_GET o $_POST (aunque sólo el nombre del archivo).

Vea también: [ Arrays asociativos en PHP ]
En primer lugar debemos saber que para acceder a los valores recibidos tras enviar un formulario HTML usaremos uno de los siguientes arrays asociativos:
- $_GET: si el formulario contiene el atributo HTML method="get".
- $_POST: si el formulario contiene el atributo HTML method="post" (recomendado por cuestiones de seguridad).
- $_FILE: si el formulario contiene el atributo HTML enctype="multipart/form-data" y una etiqueta HTML <input type="file" ... /> (usados cuando necesitamos subir archivos (hacer upload para guardarlos en el servidor web o enviarlos por EMail).
Con lo visto hasta ahora, estudia el siguiente código fuente de ejemplo (tanto el código PHP como el código HTML estarán en el mismo archivo .php):
Código PHP:
<?php
// Comprobar si el formulario fue enviado (si el array asociativo '$_POST' no está vacío)
if( empty($_POST ) == true )
{
// El formulario no ha sido enviado
}
else
{
echo "<p>Contenido del array asociativo con la información del formulario:</p>";
print_r( $_POST );
echo "<p/>";
echo "Fecha: [".$_POST['txtFecha']."]<br/>";
echo "Numero: [".$_POST['txtNumero']."]<br/>";
echo "<hr/>";
}
?>
Código HTML:
<html>
<head>
<title>Curso de PHP - ejemplo de formulario | informaticapc.com</title>
</head>
<body>
<form name="frmPrueba" method="post" action="form1.php" >
<input type="text" name="txtFecha" id="txt1" />
<input type="text" name="txtNumero" id="txt2" value="texto predefinido" />
<input type="submit" name="btnEnviar" value="Enviar Formulario" />
</form>
</body>
</html>
Al cargarse la página web en primer lugar se procesará el código PHP, en el que se comprobará con la función empty() si el array asociativo $_POST (en el formulario hemos definido el atributo HTML method="post") está vacío (si no se ha enviado el formulario) o no. Por lo tanto, al cargarse la página web por primera veremos:
Si depués hacemos clic en el botón para enviar el formulario se recargará la página web, y puesto que $_POST ya no estará vacío se mostrará la información contenida en el mismo (y se volverá a mostrar el formulario):
Observa que el array asociativo contiene tres claves: txtFecha (una cadena vacía como valor), txtNumero y btnEnviar.
Fíjate también cómo se accede al valor de cada elemento, indicando la clave entre corchetes.

Cuando estés practicando no recargues la página usando el icono de la barra de herramientas ni usando alguna combinación de teclado después de que se haya enviado el formulario, ya que se mostrará un cuadro de diálogo informándonos de que se reenviarán los datos, y si pulsas en Aceptar puede que no obtengas el resultado deseado): en vez de ello haz clic en la barra de direcciones del navegador web y pulsa la tecla Enter, para que se vuelva a cargar la página web.

También se puede acceder a los elementos de un formulario usando el array asociativo superglobal $_REQUEST, que aparte de contener los datos de $_POST y $_GET puede contener también los de $_COOKIES y $_SERVER dependiendo del valor de la opción de configuración variables_order en el archivo php.ini.

No es nada recomendable (dentro de lo posible) mezclar código fuente de diferentes lenguajes de programación en un único archivo (como en el anterior ejemplo).
En nuestro caso sería más óptimo tener un archivo .html con el código HTML del formulario, y otro archivo .php (que indicaríamos en el atributo HTML action del formulario) con el código PHP necesario para procesarlo.

Vea también: [ Arrays asociativos en PHP ] - [ empty() ] - [ $_GET ] - [ $_POST ] - [ $_REQUEST ]

Vea también: [ Configurar PHP ] - [ variables_order ]
Si bien en el punto anterior hemos usado empty() para comprobar desde PHP si había sido enviado un formulario, ello no nos garantiza que hayamos recibido todos los campos requeridos: para ello usaremos la función isset().
A continuación te mostramos un ejemplo en el que nos aseguramos de haber recibido al menos el nombre y los apellidos (tanto el código PHP como el código HTML estarán en el mismo archivo .php):
Código PHP:
<?php
if( ! empty($_POST) )
{
if( isset($_POST['txtNombre']) && isset($_POST['txtApellidos']) )
{
echo "Nombre: [".$_POST['txtNombre']."]<br/>";
echo "Apellidos: [".$_POST['txtApellidos']."]<br/>";
echo "Edad: [".$_POST['txtEdad']."]<br/>";
if( isset($_POST['chkActivo']) == true )
echo "Activo: [".$_POST['chkActivo']."]<br/>";
}
else
{
echo "Introduzca todos los datos requeridos";
}
echo "<hr/>";
}
?>
Código HTML:
<html>
<head>
<title>Curso de PHP - ejemplo de formulario | informaticapc.com</title>
</head>
<body>
<form name="frmPrueba" method="post" action="02_form2.php" >
Nombre(*): <input type="text" name="txtNombre" id="txt1" />
Apellidos(*): <input type="text" name="txtApellidos" id="txt2" value="Mena Perdomo" />
Edad: <input type="text" name="txtEdad" id="txt3" size="3" maxlength="2" /><p/>
<input type="checkbox" name="chkActivo" value="1" />Activo<p/>
<input type="submit" name="btnEnviar" value="Enviar Formulario" />
</form>
</body>
</html>
EXPLICACIÓN: al cargarse la página usamos empty() para comprobar si se ha enviado el formulario, y en tal caso mediante isset() comprobamos si hemos recibido todos los datos requeridos (marcados con asterisco, para informar al usuario de que lo son).
Recuerda que el signo de exclamación es usado en PHP como operador de negación, por lo tanto con el código if( ! empty($_POST) ) estamos comprobando "si $_POST NO está vacío".
Observa que también usamos isset() con la casilla de verificación, ya que si no estaba marcada al enviarse el formulario no se encontrará definida en el array asociativo (al igual que sucede con los botones de tipo radio).
Al cargar la página web por primera vez veremos lo siguiente:
Al hacer clic en el botón del formulario se mostrarán los valores enviados (si marcamos la casilla de verificación y editamos los cuadros de texto se mostrarán también sus valores):

Vea también: [ empty() ] - [ isset() ] - [ $_GET ] - [ $_POST ] - [ Operadores en PHP ]