Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Validación de formularios

Estas en el tema de Validación de formularios en el foro de PHP en Foros del Web. Hola gente. La validación la hago primero al lado del cliente, y si el cliente no tiene activado Javascript, utilizo PHP, el código es el ...
  #1 (permalink)  
Antiguo 02/09/2014, 15:53
 
Fecha de Ingreso: agosto-2014
Mensajes: 31
Antigüedad: 9 años, 8 meses
Puntos: 0
Validación de formularios

Hola gente.
La validación la hago primero al lado del cliente, y si el cliente no tiene activado Javascript, utilizo PHP, el código es el siguiente:

Código PHP:
$usuario=trim(htmlentities(mysql_real_escape_string($_REQUEST['usuario'])));
                        
$contrasena=trim(htmlentities(mysql_real_escape_string($_REQUEST["contrasena"])));
                        
$email=trim(htmlentities(mysql_real_escape_string($_REQUEST["email"])));
                        
$nombre=trim(htmlentities(mysql_real_escape_string($_REQUEST["nombre"])));
                        
$apellidos=trim(htmlentities(mysql_real_escape_string($_REQUEST["apellidos"])));
                        
$direccion=trim(htmlentities(mysql_real_escape_string($_REQUEST["direccion"])));
                        
$provincia=trim(htmlentities(mysql_real_escape_string($_REQUEST["provincia"])));
                        
$poblacion=trim(htmlentities(mysql_real_escape_string($_REQUEST["poblacion"])));
                        
$cp=trim(htmlentities(mysql_real_escape_string($_REQUEST["cp"])));
                        
$telefono=trim(htmlentities(mysql_real_escape_string($_REQUEST["telefono"])));

//Declaramos un array que recoja los errores
$recoger_errores=array();

echo 
"<noscript>";
                        
//Ejecutamos la función validar con sus parámetros
validar($usuario$contrasena$email$nombre$apellidos$direccion$poblacion$cp$telefono);

                        
function 
validar($usuario$contrasena$email$nombre$apellidos$direccion$poblacion$cp$telefono){
/*Si algún usuario está en blanco, se añade el error al array*/
if($usuario=="" || $contrasena=="" || $email=="" || $nombre=="" || $apellidos="" || $direccion=="" || $poblacion="" || $cp="" || $telefono){
$recoger_errores[]="Debes completar todos los campos";
                            }

/*Esto mide la longitud de los números*/
if(strlen($cp)!=5){
$recoger_errores[]="El código postal deben ser 5 caracteres";
                            }

if(
strlen($telefono)!=9){
    
$recoger_errores[]="El teléfono deben ser 9 caracteres";
                            }

/*Esto se encarga de ver si se trata de un número entero*/
if(filter_var($cpFILTER_VALIDATE_INT)===false){
    
$recoger_errores[]="El codigo postal debe ser un número";
                            }

if(
filter_var($telefonoFILTER_VALIDATE_INT)===false){
    
$recoger_errores[]="El teléfono debe ser un número";
                            }

/*Finalemte le mostramos al usuario los errores recorriendo el array*/
                            
var_dump($recoger_errores);
                        }
echo 
"</noscript>"
Por supuesto, éste código no funciona, me da el error: "Fatal error: Call to undefined function validar() in C:\xampp\htdocs\Mi proyecto\registro.php on line 344
"
pero si llamo a la función antes de la última línea directamente no me la ejecuta y el usuario puede introducir datos erróneos tan campante.
¿Qué está fallando?.
Un saludo.
  #2 (permalink)  
Antiguo 02/09/2014, 16:27
Avatar de juan_14nob  
Fecha de Ingreso: abril-2010
Mensajes: 552
Antigüedad: 14 años
Puntos: 6
Respuesta: Validación de formularios

¿Por qué haz puesto el echo "<noscript>" ?
Como mejora hace lo siguiente: (Suponiendo que la validación la haces cuando completas el form y usas POST)

Código PHP:
Ver original
  1. if(isset($_POST)) {
  2.  
  3. //Ejecutamos la función validar con sus parámetros
  4. validar($usuario, $contrasena, $email, $nombre, $apellidos, $direccion, $poblacion, $cp, $telefono);
  5.  
  6. }

Mostrá un poco mas de código, porque aparentemente tenés bien la llamada a la función. Quizas el error viene de atrás. ¿Está todo en el mismo archivo?


Saludos

  #3 (permalink)  
Antiguo 03/09/2014, 17:48
 
Fecha de Ingreso: agosto-2014
Mensajes: 31
Antigüedad: 9 años, 8 meses
Puntos: 0
Respuesta: Validación de formularios

Hola.
He puesto el echo "<noscript>" por que ésta función sólo se ejecutaría si el navegador del usuario no tuviera Javascript activado, en el caso de tenerlo activado se valida con Javascript y lo hace bien, el problema es cuando lo debe validar con PHP, he cambiado cosas del código, aunque sigue dando el mismo problema e incluso probé con quitarle la función y que éso sólo se ejecutara entre las etiquetas "<noscript>", también he probado poniendo esas etiquetas en html y tampoco, aquí mi nuevo código:
Código PHP:
Ver original
  1. <?php
  2.                     /*Se recogen los datos del formulario y se comprueba que no tengan espacios en blanco ni fallos de seguridad en mysql y xss*/
  3.                     if(isset($_POST['envio'])){
  4.                         //var_dump($validacion);
  5.                         $usuario=trim(htmlentities(mysql_real_escape_string($_POST['usuario'])));
  6.                         $contrasena=trim(htmlentities(mysql_real_escape_string($_POST["contrasena"])));
  7.                         $email=trim(htmlentities(mysql_real_escape_string($_POST["email"])));
  8.                         $nombre=trim(htmlentities(mysql_real_escape_string($_POST["nombre"])));
  9.                         $apellidos=trim(htmlentities(mysql_real_escape_string($_POST["apellidos"])));
  10.                         $direccion=trim(htmlentities(mysql_real_escape_string($_POST["direccion"])));
  11.                         $provincia=trim(htmlentities(mysql_real_escape_string($_POST["provincia"])));
  12.                         $poblacion=trim(htmlentities(mysql_real_escape_string($_POST["poblacion"])));
  13.                         $cp=trim(htmlentities(mysql_real_escape_string($_POST["cp"])));
  14.                         $telefono=trim(htmlentities(mysql_real_escape_string($_POST["telefono"])));
  15.                         //var_dump($telefono);
  16.  
  17.                         //Declaramos un array que recoja los errores
  18.                         $recoger_errores=array();
  19.                         $validacion=true;
  20.                        
  21.  
  22.                        
  23.                         /*Normalmente comprobamos mediante Javascript que se han introducido los datos correctos, pero si el usuario no tiene activado Javascript, lo comprobaremos mediante PHP*/
  24.                         echo "<noscript>";
  25.                         //Ejecutamos la función validar con sus parámetros
  26.                         validar($usuario, $contrasena, $email, $nombre, $apellidos, $direccion, $poblacion, $cp, $telefono);
  27.                        
  28.                         echo "</noscript>";
  29.                        
  30.                         function validar($usuario, $contrasena, $email, $nombre, $apellidos, $direccion, $poblacion, $cp, $telefono){
  31.                             /*Si algún usuario está en blanco, se añade el error al array*/
  32.                             var_dump($validacion);
  33.                            
  34.  
  35.                             if($usuario=="" || $contrasena=="" || $email=="" || $nombre=="" || $apellidos="" || $direccion=="" || $poblacion="" || $cp="" || $telefono=""){
  36.                                 /*echo "Debes completar todos los campos";
  37.                                 return false;*/
  38.                                 //$recoger_errores[]="Debes completar todos los campos";
  39.                                 array_push($recoger_errores, "Debes completar todos los campos");
  40.                                 $validacion=false;
  41.                             }
  42.  
  43.                             /*Esto mide la longitud de los números*/
  44.                             if(strlen($cp)!=5){
  45.                                 //$recoger_errores[]="El código postal deben ser 5 caracteres";
  46.                                 array_push($recoger_errores, "El código postal deben ser 5 caracteres");
  47.                                 $validacion=false;
  48.                             }
  49.  
  50.                             if(strlen($telefono)!=9){
  51.                                 //$recoger_errores[]="El teléfono deben ser 9 caracteres";
  52.                                 array_push($recoger_errores, "El teléfono deben ser 9 caracteres");
  53.                                 $validacion=false;
  54.                             }
  55.  
  56.                             /*Esto se encarga de ver si se trata de un número entero*/
  57.                             if(filter_var($cp, FILTER_VALIDATE_INT)===false){
  58.                                 //$recoger_errores[]="El codigo postal debe ser un número";
  59.                                 array_push($recoger_errores, "El codigo postal debe ser un número");
  60.                                 $validacion=false;
  61.                             }
  62.  
  63.                             if(filter_var($telefono, FILTER_VALIDATE_INT)===false){
  64.                                 //$recoger_errores[]="El teléfono debe ser un número";
  65.                                 array_push($recoger_errores, "El teléfono debe ser un número");
  66.                                 $validacion=false;
  67.                             }
  68.  
  69.                             foreach ($recoger_errores as $key => $value) {
  70.                                 echo $value;
  71.                             }
  72.                         }
  73.  
  74.                         //Nos conectamos a la base de datos*/
  75.                         $conexion=mysql_connect("localhost", "admin", "admin");
  76.                         mysql_select_db("angra");
  77.  
  78.                         /*Comprobamos que el usuario y el email no existen ya*/
  79.                         $usuario_c=mysql_query("SELECT `cliente` FROM `clientes` WHERE `cliente`='$usuario'");
  80.                         $num_usuario=mysql_num_rows($usuario_c);
  81.                         if($num_usuario!=0){
  82.                             /*Si el usuario ya existe, se lo decimos, resaltando el texto en rojo con la ayuda de Javascrip*/
  83.                             echo "<script type='text/javascript'>
  84.                                     usuario();
  85.                                     </script>";
  86.                         }
  87.                         /*Con el email, lo mismo*/
  88.                         $email_c=mysql_query("SELECT `email` FROM `clientes` WHERE `email`='$email'");
  89.                         $num_email=mysql_num_rows($email_c);
  90.                         if($num_email!=0){
  91.                             echo "<script type='text/javascript'>
  92.                                     email();
  93.                                     </script>";
  94.                         }
  95.                         /*Sólo si el usuario o el email no existen ya en la BBDD y los campos introducidos no son está vacíos se produce la dirección y el registro del usuario*/
  96.                         if($num_usuario==0 && $num_email==0 && $usuario!=null && $contrasena!=null && $email!=null && $validacion==true){
  97.                             mysql_query("INSERT INTO `clientes`(`cliente`, `contrasena`, `email`, `nombre`, `apellidos`, `direccion completa`, `provincia`, `poblacion`, `cp`, `telefono contacto`) VALUES ('$usuario','$contrasena','$email','$nombre','$apellidos','$direccion','$provincia','$poblacion','$cp','$telefono')");
  98.                             /*Se introducen los datos de la sesión*/
  99.                             $_SESSION['usuario']=$usuario;
  100.                             $_SESSION['contrasena']=$contrasena;
  101.                             /*Se pone la redirección en HTML porque con PHP, al haber ya salido por el echo en otro lugar de la página no funciona y da error*/
  102.                             echo "<meta http-equiv='Refresh' content='0;url=registro2.php'>";
  103.                         }
  104.  
  105.                 }
  106.                 unset($validacion);
  107.                 $validacion=true;
  108.                 var_dump($validacion);
  109.                 ?>

Eso es todo es PHP, excepto el session_start() del principio, si necesitas más código de otros lenguajes me avisas.
Un saludo.
  #4 (permalink)  
Antiguo 06/09/2014, 10:35
 
Fecha de Ingreso: agosto-2014
Mensajes: 31
Antigüedad: 9 años, 8 meses
Puntos: 0
Respuesta: Validación de formularios

Hola a todos, el error estaba aquí:

Código PHP:
Ver original
  1. if($usuario=="" || $contrasena=="" || $email=="" || $nombre=="" || $apellidos="" || $direccion=="" || $poblacion="" || $cp="" || $telefono=""){

el correcto era:
Código PHP:
Ver original
  1. if($usuario=="" || $contrasena=="" || $email=="" || $nombre=="" || $apellidos=="" || $direccion=="" || $poblacion=="" || $cp=="" || $telefono==""){

Por eso hacía cosas raras.
Un saludo.
  #5 (permalink)  
Antiguo 06/09/2014, 19:46
Avatar de juan_14nob  
Fecha de Ingreso: abril-2010
Mensajes: 552
Antigüedad: 14 años
Puntos: 6
Respuesta: Validación de formularios

Lo correcto sería
Código PHP:
Ver original
  1. if(empty($usuario)) ...

Saludos!
  #6 (permalink)  
Antiguo 08/09/2014, 07:49
 
Fecha de Ingreso: agosto-2014
Mensajes: 31
Antigüedad: 9 años, 8 meses
Puntos: 0
Respuesta: Validación de formularios

Gracias. Tienes razón

Etiquetas: formularios, html, registro, sql
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 19:06.