Estoy iniciándome en php y tengo el siguiente ejemplo sencillo de control de un formulario en un archivo llamado formu.php:
Código PHP:
<?PHP
function form(){
//Esta función muestra en pantalla el formulario
?><HTML>
<HEAD>
<TITLE>Formulario de Inscripción</TITLE>
</HEAD>
<BODY topmargin="0" leftmargin="0">
<FORM ACTION="formu.php" METHOD="POST">
<table width="550" cellpadding="0" cellspacing="0" height="80%" border="0" align="center">
<TR>
<TD colspan="4"><BR>FORMULARIO DE INSCRIPCIÓN</td>
</tr>
<TR>
<TD colspan="4">Introduce tus datos personales. * Los campos con asterisco son obligatorios</td>
</tr>
<TR>
<TD>Nombre*: </TD>
<TD colspan="3"><INPUT TYPE="text" NAME="nombre"></TD>
</TR>
<TR>
<TD>Apellidos*: </TD>
<TD colspan="3"><INPUT TYPE="text" NAME="apellidos" size="50"></TD>
</TR>
<TR>
<TD>Dirección*: </TD>
<TD colspan="3"><INPUT TYPE="text" NAME="direccion" size="50"></TD>
</TR>
<TR>
<TD width="30">Población*: </TD>
<TD><INPUT TYPE="text" NAME="poblacion"></TD>
<td align="right" width="30">Provincia:</td><td><select name="provincia">
<option value="Alava">Álava</option>
<option value="Burgos">Burgos</option>
<option value="La Rioja">La Rioja</option>
<option value="Madrid">Madrid</option>
</select></td>
</TR>
<TR>
<TD>C.P.: </TD>
<TD><INPUT TYPE="text" NAME="cp"></TD>
<TD>DNI*: </TD>
<TD colspan="3"><INPUT TYPE="text" NAME="dni"></TD>
</TR>
<tr>
<td width="30">Teléfono*:</td>
<td><input name="telefono" type="text"></td>
<td align="right" width="30">Email:</td>
<td><input name="email" type="text"></td>
</tr>
<tr>
<td colspan="4" align="center">
<INPUT TYPE="hidden" name="accion" value="validar">
<INPUT TYPE="submit" value="enviar">
</td>
</tr>
</TABLE>
</FORM>
</BODY>
</HTML><?PHP
}
function validar($nombre,$apellidos,$direccion,$poblacion,$cp,$dni,$telefono,$email){
$mensaje="Se han producido los siguientes errores:<br>";
//Si $nombre tiene una longitud menor que 3 se considera no válido
if(strlen($nombre)<3){
$error="1";
$mensaje.="Debes introducir un nombre válido.<br>";
}
//Si $apellidos tiene una longitud menor que 3 se considera no válido
if(strlen($apellidos)<3){
$error="1";
$mensaje.="Debes introducir apellidos válidos.<br>";
}
//Si $direccion tiene una longitud menor que 5 se considera no válido
if(strlen($direccion)<5){
$error="1";
$mensaje.="Debes introducir una dirección válida.<br>";
}
//Si $poblacion tiene una longitud menor que 2 se considera no válido
if(strlen($poblacion)<2){
$error="1";
$mensaje.="Debes introducir una población válida.<br>";
}
//Si $cp tiene una longitud distinta de 5 se considera no válido
if(strlen($cp)<>5){
$error="1";
$mensaje.="Debes introducir un C.P. válido.<br>";
}
//Si $dni tiene una longitud menor que 8 se considera no válido
if(strlen($dni)<8){
$error="1";
$mensaje.="Debes introducir un DNI válido.<br>";
}
//Si $telefono tiene una longitud menor que 9 se considera no válido
if(strlen($telefono)<9){
$error="1";
$mensaje.="Debes introducir un teléfono válido.<br>";
}
//Comprobamos el formato de $email
if($email!=""){
$ext_mail=strrchr($email,'.');
$num_mail=substr_count($email,'@');
if((strlen($ext_mail)!=4 && strlen($ext_mail)!=3) || $num_mail!=1){
$error="1";
$mensaje.="Debes introducir un e-mail válido.";
}
}
if($error=="1") echo($mensaje);
else {
?><HTML>
<HEAD>
<TITLE>Formulario de inscripción</TITLE>
</HEAD>
<BODY topmargin="0" leftmargin="0">
<TABLE width="500" align="center">
<tr>
<td align="center" COLSPAN="2">
<BR><BR>SE HAN ENVIADO LOS SIGUIENTES DATOS:<BR><BR>
</td>
</tr>
<tr>
<td align="center" COLSPAN="2">Nombre: <?PHP echo $nombre ?></td>
</tr>
<tr>
<td align="center" COLSPAN="2">Apellidos: <?PHP echo $apellidos ?></td>
</tr>
<tr>
<td align="center" COLSPAN="2">Dirección: <?PHP echo $direccion ?></td>
</tr>
<tr>
<td align="center">Población: <?PHP echo $poblacion ?></td>
<td align="center">Provincia: <?PHP echo $provincia ?></td>
</tr>
<tr>
<td align="center">C.P.: <?PHP echo $cp ?></td>
<td align="center">DNI: <?PHP echo $dni ?></td>
</tr>
<tr>
<td align="center">Teléfono: <?PHP echo $telefono ?></td>
<td align="center">E-mail: <?PHP echo $email ?></td>
</tr>
</TABLE>
</BODY>
</HTML><?PHP
}
}
switch ($accion) {
case "validar":
if($nombre=='' || $apellidos=='' || $direccion=='' || $poblacion=='' || $dni=='' || $telefono=='') {
echo("Los siguientes campos son obligatorios: <br>Nombre Apellidos Dirección Población DNI Teléfono");
}
else{
validar($nombre,$apellidos,$direccion,$poblacion,$cp,$dni,$telefono,$email);
}
break;
default:
form();
break;
}
?>
"Notice: Undefined variable: accion in C:\xampp\htdocs\formu.php on line 150"
y justo debajo el formulario, el cual me acepta los datos, pero al pulsar enviar no entra en la opción validar del switch (supongo que tiene que ver con el error), sino que vuelve a recargar la página con el mismo error y el formulario vacío.
¿Cuál es el problema y cómo se arreglaría?
Gracias.