Validar Textos - PHP

Cómo validar formularios correctamente

Validar Textos

Cuando un Usuario envía un formulario con datos es probable que omita llenar alguno de los campos de texto.

Para avisarle de esta situación hay varias maneras, una es con Java Script, (ver ejemplos en tabla), la otra es con PHP.

Los Scripts de PHP no se pueden colocar en cualquier parte del documento HTML pues aunque estén escritos correctamente, pueden no seguir una secuencia lógica con el resto de los elementos del HTML.

Código de Validación incorrecto - Ejemplo 1

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Formulario 1</title> </head> <?php $nombre = $_POST['nombre']; $apellido1 = $_POST['apellido1']; $apellido2 = $_POST['apellido2']; $x = $_POST['numero']; if (($nombre != NULL) and ($apellido1 != NULL) and ($apellido2 != NULL)) {//Estamos validando que los tres textos esten con informacion echo "<br>".$nombre." ".$apellido1."</br>";//arreglo para aparecer separado y abajo de la linea anterior $nombreCompleto = $nombre." ".$apellido1; $nombreCompleto .= " ".$apellido2; echo "<p>Nombre: ".$nombreCompleto."</p>"; // Usamos el operador ternario '?'. Devuelve: "El número es menor de 86" echo "<p>El número es ".($x >= 86) ? "mayor o igual de 86" : "menor de 86" )."</p>"; } else if(($nombre == "") or ($apellido1 == "") or ($apellido2 == "")) {//estamos diciendo que cualquiera de ellos que este vacio echo "<CENTER>"; echo "<br>";echo "<br/><h2>Por favor colocá tu nombre o tu Apellido 1° o tu Apellido 2°<h2> <br/><h2>No se puedeseguir sin esos datos.<h2>"; echo "</CENTER>"; exit; } else if (($nombre == "") and ($apellido1 == "") and ($apellido2 == "")) { echo "<CENTER>"; echo "<br>";echo "<br/><h2>Por favor colocá tu Nombre y tu tu Apellido 1° y tu Apellido 2°<h2> <br/><h2>No se puede seguir sin esos datos<h2>"; echo "</CENTER>"; exit; } /*En este caso el código PHP está antes del body */ ?> <body> <form method="post" action="validartextos.php"> Escriba Nombre completo: <input type="text" name="nombre" value="" size=10> <br> Escriba Apellido de Padre:<input type="text" name="apellido1" value="" size=10> <br> Escriba Apellido de Madre:<input type="text" name="apellido2" value="" size=10> <br> Escriba un número: <input type="text" name="numero" value="" size=10> <br /><br /> <input type="submit" name="sub" value="Enviar!"> </form> </body> </html>
Aquí termina el código de Ejemplo 1
Descargar código (NO funciona correctamente)

¿Por qué incorrecto?

Porque el Script PHP pone un condicional, (} else if(($nombre == "") or ($apellido1 == "") or ($apellido2 == "")) {)) que si los textos tienen valor vacio ( "") la página no se inicie (exit) y cuando la página se carga, por lógica los textos están vacíos.

Código de Validación con inconvenientes - Ejemplo 2

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Formulario 1</title> </head> <body> <form method="post" action="validartextosuno.php"> Escriba Nombre completo: <input type="text" name="nombre" value="" size=10> <br> Escriba Apellido de Padre:<input type="text" name="apellido1" value="" size=10> <br> Escriba Apellido de Madre:<input type="text" name="apellido2" value="" size=10> <br> Escriba un número: <input type="text" name="numero" value="" size=10> <br /><br /> <input type="submit" name="sub" value="Enviar!"> </form> <?php $nombre = $_POST['nombre']; $apellido1 = $_POST['apellido1']; $apellido2 = $_POST['apellido2']; $x = $_POST['numero']; if (($nombre != NULL) and ($apellido1 != NULL) and ($apellido2 != NULL)) {//Estamos validando que los tres textos esten con informacion echo "<br>".$nombre." ".$apellido1."</br>";//arreglo para aparecer separado y abajo de la linea anterior $nombreCompleto = $nombre." ".$apellido1; $nombreCompleto .= " ".$apellido2; echo "<p>Nombre: ".$nombreCompleto."</p>"; // Usamos el operador ternario '?'. Devuelve: "El número es menor de 86" echo "<p>El número es ".($x >= 86) ? "mayor o igual de 86" : "menor de 86" )."</p>"; } else if(($nombre == "") or ($apellido1 == "") or ($apellido2 == "")) {//estamos diciendo que cualquiera de ellos que este vacio echo "<CENTER>"; echo "<br>";echo "<br/><h2>Por favor colocá tu nombre o tu Apellido 1° o tu Apellido 2°<h2> <br/><h2>No se puedeseguir sin esos datos.<h2>"; echo "</CENTER>"; exit; } else if (($nombre == "") and ($apellido1 == "") and ($apellido2 == "")) { echo "<CENTER>"; echo "<br>";echo "<br/><h2>Por favor colocá tu Nombre y tu tu Apellido 1° y tu Apellido 2°<h2> <br/><h2>No se puede seguir sin esos datos<h2>"; echo "</CENTER>"; exit; } /*En este caso el código PHP está después del formulario. */ ?></body></html>
Aquí termina el código de Ejemplo 2
Descargar código (funciona con inconvenientes)

¿Por qué inconveniente nuevamente?

Porque al arrancar la página aparece el cartel de "Por favor colocá tu nombre o tu Apellido......", es poco estético, imperativo y estamos 'abriendo el paraguas antes que llueva...'

¿Y la solución...?

Volver y ver el próximo Link de la tabla