Buscador


En todo Internet
En Uterra.Com

Contenidos


La primera forma de interacción entre un usuario y el sitio Web es a través del algún tipo de formulario, ya sea para identificarse, para registrarse o para hacer una publicación en un foro. Estos formularios no tienen ningún problema en el sentido, basta con agregar tantos $variable = $_POST["campo"]; como campos tengamos. No obstante, algunos tipos de formularios, como aquellos que se emplean para recogidas de información, como cuestionarios, tienen una particularidad, y es que hay un gran número de campos que deben ser procesados. Y es precisamente a este último caso particular al que nos referiremos.

Si tenemos un cuestionario que nos recoge tres o cuatro datos personales, como por ejemplo: edad, sexo, nacionalidad, lugar de residencia…; y tenemos además, digamos 50, 70 o 100 preguntas que tenemos que responder, entonces tendríamos que crear tantas recepciones de valor como preguntas tuviera el cuestionario, validarlas una a una… lo cual puede ser una labor tediosa. En un caso como este, resultaría interesante poder recibir todos lo valores de una vez.

Dicho esto, veremos como enfrentarnos a esta tarea. El procesamiento de variables una a una es mas sencillo que la recepción de todas las variables juntas, pero hay que repetirlo, por tanto, su uso estará condicionado por el número de campos que tenga el formulario que deseamos procesar.

El siguiente código muestra tanto el formulario como la página de procesamiento, donde unas variables se reciben de una en una, y otras se reciben como resultado de un bucle for. Por motivos de simplicidad, el formulario solo tiene unos pocos campos, no tantos como aquel en el que seria verdaderamente útil este código.

<!DOCTYPE html>  
<html lang="es">  
<head>  
    <meta charset="UTF-8" />   
<title>Formulario de pruebas.</title>  
</head>  
    <body> 

        <table border="1"> 
            <tr> 
                <td colspan="2"><H3 align="center">Formulario de pruebas.</H3></td>  
            </tr> 
            <tr> 
                <td width="50%" rowspan="2"><form method="POST" action="procesa.php" target="procesa" enctype="multipart/form-data">

            <p>Nombre: <input type="text" name="nombre" size="30"></p> 
            <p>E-mail: <input type="text" name="email" size="40"></p>
            
            <p>Sexo: <input type="text" name="sexo" size="40"></p>
            
            <p>Me gusta 1 - <input type="text" name="me_gusta[]" size="4"></p> 
            <p>Me gusta 2 - <input type="text" name="me_gusta[]" size="4"></p> 
            <p>Me gusta 3 - <input type="text" name="me_gusta[]" size="4"></p> 
            <p>Me gusta 4 - <input type="text" name="me_gusta[]" size="4"></p> 
            <p>Me gusta 5 - <input type="text" name="me_gusta[]" size="4"></p> 
            <p>Me gusta 6 - <input type="text" name="me_gusta[]" size="4"></p>
            <p>Me gusta 7 - <input type="text" name="me_gusta[]" size="4"></p>
    
            <p>Texto: <br /><textarea rows="6" name="texto" cols="40"></textarea></p>  
          
        <p align="left"><input type="reset" value="Restablecer" name="B2">  
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  
        <input type="submit" value="Enviar"></p> 
         
        </form></td>  
            </tr> 
            <tr> 
                <td rowspan="2"><iframe src="estadis_bl.htm"    
            marginwidth="0" marginheight="0" name="procesa" scrolling="yes" border="0" frameborder="0"   
            width="650" height="600">   
            </iframe></td> 
            </tr>
        </table> 

    </body> 
</html>
-------------------- procesa.php
<!DOCTYPE html>  
<html lang="es">  
<head>  
    <meta charset="UTF-8" />   
<title>Recibimos todos los campos en un array.</title>  
</head>  

<body>  
<?php  
error_reporting
(-1); 
ini_set("display_errors"1); 

// Recibimos todas las variables de una vez sin necesidad  
// de introducir $xxx = $_POST["xxx"]; repetidas veces 

// Asi recibimos los campos que contienen elementos de texto
// ---------------------------------------------------------

$array_campos array_keys($_POST);     // obtiene los nombres de las campos 
$array_valores array_values($_POST);    // obtiene los valores de las variables 

$n_campos count($array_campos); 
$n_valores count($array_valores); 

// echo "<p>Numero de campos: $n_campos</p>";

    // Obtenemos los nombres de los campos y valores de contienen
    
for($txt 0$txt $n_campos; ++$txt) { 

        $
$array_campos[$txt] = $array_valores[$txt]; 
        
$campos $array_campos[$txt];
        
$valores $array_valores[$txt]; 
        
        
// echo "<p>$campos --- $valores</p>";
        
        
$array_campos[$txt] = $campos;        // Creamos array con los campos
        
$array_valores[$txt] = $valores;    // Creamos array con los valores
        
    
}
            
    
// Procesamos el nombre desde el bucle
    
$clave_array_campos array_search('nombre'$array_campos);          // Asi recogemos y validamos el nombre
    
$c_nombre $array_campos[$clave_array_campos];
    
$men_nombre "Nombre no valido";

        if (!
preg_match("/^[a-zá-ú ]{4,50}$/i"$nombre)) die ("$men_nombre");
    
    
// Procesamos el email de la forma habitual
    
$email $_POST["email"];
    
$men_email "<b>$email</b> es un E-mail NO valido";

        if (!
preg_match("/^[a-z0-9._-]+@[a-z0-9._-]+.[a-z]{2,6}$/i"$email)) die ("$men_email");
    
    
// Procesamos el sexo de la forma habitual
    
$sexo $_POST["sexo"];
    
$men_sexo "Sexo no valido, solo admite H ó M, en mayusculas o minusculas.";

        if (!
preg_match("/^[hm]{1}$/i"$sexo)) die ("$men_sexo");
    
    
// Procesamos el grupo -me gusta- desde el bucle
    
    
$clave_array_campos array_search('me_gusta'$array_campos);          // Asi recogemos y validamos los -me gusta-
    
$c_me_gusta $array_campos[$clave_array_campos];
    
    
$n_me_gusta count($me_gusta); 
    
        for(
$vld 0$vld $n_me_gusta; ++$vld) { 
        
            
$men_me_gusta "<b>$me_gusta[$vld]</b> es un valor NO valido, solo adminte Si ó No, en mayusculas o minusculas.";
            
            if (!
preg_match("/^[sino]{2}$/i"$me_gusta[$vld])) die ("$men_me_gusta");
            
        }
        
        
$array_me_gusta[$vld] = $me_gusta;    // Creamos array con los valores
        
    // Procesamos el texto de la forma habitual
    
$texto $_POST["texto"];

        
// Eliminamos las posibles etiquetas
        
$texto_ok strip_tags($texto);
        
// Debe haber un minimo de 5 caracteres
        
$men_texto "Texto no valido";
        
        if (!
preg_match("/^[^.]{5,}|[[:punct:]]$/"$texto_ok)) die ("$men_texto");
        
    
// ----------------------------------------------------
    // Mostramos el contenido del array
    
        
echo '» <big>Array con los - me gusta -.</big>';
    
        echo 
'<pre>';   
        
print_r($array_me_gusta);   
        echo 
'</pre>'
        
    
// Imprimimos algunos valores de manera ordinario
    // echo "<p>$clave_array_campos -- $c_email -- $email";
    
    
echo "<p>» Nombre: $nombre <br />
    » E-mail: 
$email  <br />
    » Sexo: 
$sexo  <br />
    » Numero de 'me gusta': 
$n_me_gusta <br />
    » Texto limpio de etiequetas: <br />
$texto_ok</p>";

?>
</body>  

</html>

Código PHP