Foros del Web » Programando para Internet » PHP »

Control formulario

Estas en el tema de Control formulario en el foro de PHP en Foros del Web. Hola, 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      ...
  #1 (permalink)  
Antiguo 24/06/2011, 12:55
prozaius
Invitado
 
Mensajes: n/a
Puntos:
Pregunta Control formulario

Hola,

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&oacute;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&Oacute;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">&Aacute;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&eacute;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)!=&& 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;
}
?>
El problema es que al ejecutar el archivo me aparece lo primero el siguiente mensaje de error:

"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.
  #2 (permalink)  
Antiguo 24/06/2011, 12:58
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Control formulario

Te invito a leer el siguiente tema:
http://www.forosdelweb.com/f18/undef...2/#post3904555

Ahí se explica el por que de este sencillo error.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 24/06/2011, 13:37
prozaius
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Control formulario

Cita:
Iniciado por pateketrueke Ver Mensaje
Te invito a leer el siguiente tema:
[url]http://www.forosdelweb.com/f18/undefined-index-undefined-variable-923992/#post3904555[/url]

Ahí se explica el por que de este sencillo error.
Muchas gracias por tu pronta respuesta. Según el tema que me envías:

"La solucion todo el tiempo es predefinir algun valor -en caso de variables definidas manualmente- o bien, asignar un valor por defecto en cualquier otra circunstancia".

Pero me surge otra duda: por lo que he leído, en php no es necesario inicializar variables, por lo que en mi ejemplo la primera vez que se ejecuta el script llega al switch, y al no tener la variable $accion ningún valor ejecuta la opción default (por eso se muestra el formulario), ¿es correcto? Si así fuese, sigo sin entender porque aparece el error.

Y si como dices es necesario inicializar $accion, ¿de qué me sirve la opción default? Estoy bastante perdido...
  #4 (permalink)  
Antiguo 24/06/2011, 13:48
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Control formulario

Mira, es correcto eso de que no es necesario inicializar las variables para asignarlas, pero no es igual cuando intentamos leer una variable, ¿que no existe?

Es verdaderamente sencillo el planteamiento, ¿de donde sale la variable $accion?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.

Etiquetas: formulario
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:13.