Good morning, I am creating a form in HTML and PHP, and when sending it I want you to show me an error message if any of the fields does not meet the requirement. My problem is that it only stays in the first field name if I give Send if fill nothing should show me errors in all fields, and if I have filled some field and still gives error, those fields should be filled with the entered value, until there my tests have gone well, and what is my problem?
- Do not validate birthdate or password
- The name is always painted on the form
- If I write in all the fields, name, key and dateBirth are painted on the form.
My PHP code:
<head>
<?php
error_reporting (0);
$partesFecha=explode("/",$_POST['fechaNacimiento']);
$diaActual=$partesFecha[0];
$mesActual=$partesFecha[1];
$anyoActual=$partesFecha[2];
if(isset($_POST['Enviar'])){
$errores = array();
if (!isset($_POST['nombre'])) {
$errores[1] = '<span class="error">Introduce un nombre</span>';
}
if ((strlen($_POST['clave'] < 6)) && (strlen($_POST['clave']) > 12)) {
$errores[2] = '<span class="error">La clave debe ser mayor de 6 y menor de 12 caracteres</span>';
}
if (!isset($_POST['genero'])) {
$errores[3] = '<span class="error">Debes elegir un género</span>';
}
if ((!checkdate($mesActual, $diaActual, $anyoActual)) && (comprobarMayoriaEdad($diaActual, $mesActual, $anyoActual) < 18)) {
$errores[4] = '<span class="error">La fecha debe ser dd/mm/yyyy y debes ser mayor de edad</span>';
}
if (!isset($_POST['pais'])) {
$errores[5] = '<span class="error">Debes elegir un pais</span>';
}
if (!isset($_POST['acept'])) {
$errores[6] = '<span class="error">Debes aceptar las condiciones</span>';
} else {
$nombre = $_POST['nombre'];
$clave = $_POST['clave'];
$genero = $_POST['genero'];
$pais = $_POST['pais'];
$acepto = $_POST['acept'];
}
}
function comprobarMayoriaEdad($dia, $mes, $anyo){
/*Fecha actual*/
$diaAct=date("d");
$mesAct=date("m");
$anyoAct=date("Y");
/*Fecha nacimiento*/
$diaNac=$dia;
$mesNac=$mes;
$anyoNac=$anyo;
/*Si el mes es el mismo pero el dia actual es inferior al que cumple años, no ha cumplido años, y restamos un año*/
if(($mesNac==$mesAct)&&($diaNac>$diaAct)){
$anyoAct=($anyoAct-1);
}
/*Si el mes actual es menor que el de nacimiento, no ha cumplido años y restamos un año*/
if($mesNac>$mesAct){
$anyoAct=($anyoAct-1);
}
/*Restamos los años para obtener la edad*/
$edad=($anyoAct-$anyoNac);
return $edad;
}
?>
</head>
My HTML form:
<form name="Formulario" method="post" action=''>
Nombre:
<input type="text" name="nombre" value="<?php if(isset($_POST['nombre'])){echo $_POST['nombre'];}?>" />
<?php if(isset($errores)){echo $errores[1];}?>
<br/>
<br/> Contraseña:
<input type="password" name="clave" value="<?php if(isset($_POST['clave'])){echo $_POST['clave'];}?>" />
<?php if(isset($errores)){echo $errores[2];}?>
<br>
<br/>
<input type="radio" name="genero" value="H" />H
<input type="radio" name="genero" value="M" />M
<?php if(isset($errores)){echo $errores[3];}?>
<br/>
<br/> Fecha de nacimiento:
<input type="text" name="fechaNacimiento" value="<?php if(isset($_POST['fechaNacimiento'])){echo $_POST['fechaNacimiento'];}?>" />
<?php if(isset($errores)){echo $errores[4];}?>
<br/>
<br/>
<select name="pais[]" multiple="multiple">
<option value="España">España</option>
<option value="Francia">Francia</option>
<option value="Italia">Italia</option>
</select>
<?php if(isset($errores)){echo $errores[5];}?>
<br/>
<br/> Acepto las condiciones:
<input type="checkbox" name="acept" value="OK" />
<?php if(isset($errores)){echo $errores[6];}?>
<br>
<br/> Comentarios:
<textarea name="comentarios" rows="10" cols="30" value=""></textarea>
<br>
<br/> Foto:
<input type="file" name="foto" />
<br/>
<br/>
<br/>
<input type="submit" name="Enviar" value="Enviar" />
</form>