Código PHP:
<?php
if($_POST["oculto"]) {
if ($errores_formulario = validar_formilario()) {
}else {
procesar_formulario();
}
}else {
mostrar_formulario();
}
//Funciones
//La funcion de mostrar el formulario y si hay errores tambien
function mostrar_formulario($errores = "") {
//Si hay errores imprimirlos
if($errores) {
print "Porfavor corrige los siguientes errores: <ul><li>";
print implode("</li><li>", $errores);
print "</li></ul>";
}
print '<!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>Documento sin título</title>
</head>
<body>
<form id="form1" name="form1" method="post" action="Prueba_complicada.php">
<p>
<label for="nombre"></label>
Nombre*:
<input type="text" name="nombre" id="nombre" />
</p>
<p>
<label for="email"></label>
Email*:
<input type="text" name="email" id="email" />
</p>
<p>
<label for="mensaje"></label>
Mensaje*:
<input type="text" name="mensaje" id="mensaje" />
</p>
<p>
<label for="telefono"></label>
Telefono:
<input type="text" name="telefono" id="telefono" />
<input name="oculto" type="hidden" id="oculto" value="1" />
</p>
<p>
<input type="submit" name="button" id="button" value="Enviar" />
</p>
</form>
</body>
</html>
';
}
//La funcion de validar el formulario
function validar_formulario() {
//Empezar con un array vacio para añadir le luego si hay errores
$errores = array();
//Añadir mensaje de error si el nombre es muy corto
if(!empty($_POST["nombre"]) && isset($_POST["nombre"]) &&
!empty($_POST["email"]) && isset($_POST["email"]) &&
!empty($_POST["mensaje"]) && isset($_POST["mensaje"])) {
print '<!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>Documento sin título</title>
</head>
<body>
<form id="form1" name="form1" method="post" action="Prueba_complicada.php">
<p>
<label for="nombre"></label>
Nombre*:
<input type="text" name="nombre" id="nombre" />
</p>
<p>
<label for="email"></label>
Email*:
<input type="text" name="email" id="email" />
</p>
<p>
<label for="mensaje"></label>
Mensaje*:
<input type="text" name="mensaje" id="mensaje" />
</p>
<p>
<label for="telefono"></label>
Telefono:
<input type="text" name="telefono" id="telefono" />
<input name="oculto" type="hidden" id="oculto" value="1" />
</p>
<p>
<input type="submit" name="button" id="button" value="Enviar" />
</p>
</form>
</body>
</html>
';
print "<br />";
print 'Rellene los campos necesarios."El telefono no es oblitario."';
//Si el telefono esta vacio continuara validando los demas campos porque no es obligatorio.
//Validar el telefono
if(empty($_POST["telefono"])) {
if($_POST["nombre"] < 2) {
$errores[0] = "Nombre demasiado corto!";
}
//Validar el email con el patron para emails.
if(!preg_match("=^[^@\s]+@([-a-z0-9]+\.)+[a-z]{2,}$=")) {
$errores[1] = "Email no valido!";
}
//Validar el mensaje si es menos de 10 lineas.
if($_POST["mensaje"] < 10) {
$errores[2] = "El mensaje no puede ser menos de 10 caracteres!";
}
//Validar el mensaje si es mas de 600 lineas.
if($_POST["mensaje"] > 600) {
$errores[3] = "El mensaje no puede ser mas de 600 lineas!";
}
//Si el telefono tiene escrito validara el telefono con los demas campos.
} else {
if(preg_match("@^\d{9}$@", $_POST["telefono"])) {
$errores[4] = "Telefono no valido, aunque no es obligatorio.";
}
}
}
return $errores;
}
//Funcion para decir hola
function procesar_formulario() {
if($_POST["nombre"] && $_POST["email"] && $_POST["telefono"] && $_POST["mensaje"]) {
print "Hola " . $_POST["nombre"] . " con email: " . $_POST["email"] . " con telefono: " . $_POST["telefono"] . " ,creo el mensaje: <br />" . $_POST["mensaje"] ;
print "Gracias :)";
} elseif($_POST["nombre"] && $_POST["email"] && $_POST["mensaje"]) {
print "Hola " . $_POST["nombre"] . " con email: " . $_POST["email"] . " ,creo el mensaje: <br />" . $_POST["mensaje"] ;
print "Gracias :)";
}
}
?>
Por favor ayuden me a solucionar el problema.