Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] compara mal dos datos uno por parámetro y el otro de un SELECT

Estas en el tema de compara mal dos datos uno por parámetro y el otro de un SELECT en el foro de PHP en Foros del Web. Estoy haciendo un validador con objetos de php. he creado un documento con una clase que recibe los parámetros que quiero validar de dicho formulario. ...
  #1 (permalink)  
Antiguo 28/05/2013, 11:57
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 11 años, 5 meses
Puntos: 84
compara mal dos datos uno por parámetro y el otro de un SELECT

Estoy haciendo un validador con objetos de php.

he creado un documento con una clase que recibe los parámetros que quiero validar de dicho formulario.

al comparar los datos por parámetro y los datos extraídos por SELECT a mysql

siempre obtengo que la comparación es válida, tanto si los parámetros ya existen en la consulta como si no, siempre es válida.

puse en el objeto un var_dump();

me devuelve solo los datos de un usuario cuando en realidad tengo dos usuarios.

en el código muestro lo que devuelve el var_dump();

no logro entender por qué, si alguien es tan amable de ayudarme, muchas gracias.


este es mi código, escrito por mi.


Código Java:
Ver original
  1. <?php
  2.  
  3. //include ('clases.php');
  4.  
  5. class Validar extends Conectar
  6. {
  7.     private $arr = array();
  8.     private $salida = array();
  9.     public function datos_usuarios($usuarioc, $passwdc, $passwd2c, $emailc)
  10.     {
  11.         //consulto usuario, passwd y email de usuarios
  12.         $validacion="SELECT usuario, passwd, email FROM usuarios";
  13.         $result_conexion=Conectar::connect($validacion);
  14.        
  15.         //asigno los valores a un array con bucle while
  16.         while($validacion=mysql_fetch_array($result_conexion))
  17.         {
  18.             $this->arr=$validacion;
  19.         }
  20.        
  21.         //tengo dos usuarios en la base de datos, los datos introducidos manualmente en la BD son
  22.         //usuario = q; email = [email protected]; passwd = q; nombre = q.q; apellidos = q.q.q
  23.         //usuario = w; email = [email protected]; passwd = w; nombre = w.w; apellidos = w.w.w
  24.         //este var_dump(); devuelve lo siguiente:
  25.         //array(6) { [0]=> string(1) "w" ["usuario"]=> string(1) "w" [1]=> string(1)
  26.         // "w" ["passwd"]=> string(1) "w" [2]=> string(7) "[email protected]" ["email"]=> string(7) "[email protected]" }
  27.         var_dump($this->arr);
  28.        
  29.        
  30.        
  31.         //comparo los valores $usuario, $passwd y $email del usuario
  32.        
  33.         ////////////////////////////////////
  34.         //buscando coincidencias de usuario
  35.         ////////////////////////////////////
  36.         foreach($this->arr as $datos=>$usuario)
  37.         {
  38.             //aquí está el primer problema, se cumpla o no la condición siempre va al else
  39.             if($usuarioc == $datos)
  40.             {
  41.                 $this->salida['usuario'] = "El usuario ya existe <br>";
  42.             }
  43.             else
  44.             {
  45.                 $this->salida['usuario'] = "Usuario correcto <br>";
  46.             }
  47.         }
  48.        
  49.         //////////////////////////////////
  50.         //buscando coincidencias de email
  51.         //////////////////////////////////     
  52.         foreach($this->arr as $datos=>$email)
  53.         {
  54.             //aquí está el segundo problema, se cumpla o no la condición siempre va al else
  55.             if($emailc == $datos)
  56.             {
  57.                 $this->salida['email'] = "El E-mail ya existe <br>";
  58.             }
  59.             else
  60.             {
  61.                 $this->salida['email'] = "E-mail es correcto <br>";
  62.             }
  63.         }
  64.         //las contraseñas sí las valida bien
  65.  
  66.         ///////////////////////////
  67.         //validando la contraseña
  68.         ///////////////////////////
  69.        
  70.         //si $passwd y $passwd2 no coinciden
  71.         if($passwdc != $passwd2c)
  72.         {
  73.             $this->salida['passwd'] = "Las contraseñas no coinciden <br>";
  74.         }
  75.         else
  76.         {
  77.             $this->salida['passwd'] = "Contraseñas iguales <br>";
  78.         }
  79.        
  80.         //si la contraseña es insegura (inferior a 6 caracteres)
  81.         if(strlen($passwdc) < 6)
  82.         {
  83.             $this->salida['passwd2'] = "La contraseña tiene menos de 6 caracteres <br>";
  84.         }
  85.         else
  86.         {
  87.             $this->salida['passwd2'] = "La contraseña tiene más de 6 caracteres <br>";
  88.         }
  89.        
  90.         ////////////////////////////
  91.         //devuelve el array
  92.         ////////////////////////////
  93.         return $this->salida;
  94.     }
  95. }
  96.  
  97. ?>

el resultado de esto es



Usuario correcto
E-mail es correcto
Contraseñas iguales
La contraseña tiene más de 6 caracteres

  #2 (permalink)  
Antiguo 28/05/2013, 12:09
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 8 meses
Puntos: 1532
Respuesta: compara mal dos datos uno por parámetro y el otro de un SELECT

si arr es un Array: lo estás usando como variable:

$this->arr=$validacion;

cuando se supone que debes de agregarle el usuario:

$this->arr[]=$validacion;

consulte sobre manejo de arrays en php.

Recomendación: veo que intentas validar usuarios como un sistema de login, no me parece adecuado extraer Todos los usuarios para validar uno a uno cuando SQL where puede hacerlo por tí, solo tienes que tener en cuenta el filtrar contra SQL inyection, así es más eficiente
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #3 (permalink)  
Antiguo 28/05/2013, 12:09
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: compara mal dos datos uno por parámetro y el otro de un SELECT

1. Es pésima idea extraer todos los datos de la tabla para comparar con PHP, ¿si sabes que puedes hacer esas comparaciones de manera directa con SQL?

Deberías estudiar SQL.

2. En el while() con el que extraer los resultados sobre-escribes en cada vuelta $this->arr con el registro extraído, ¿de verdad no te das cuenta?

En resumen, no estás creando ninguna lista con todos los registros de esa forma.

Edito: ups! ya te lo han dicho...
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #4 (permalink)  
Antiguo 28/05/2013, 12:42
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 11 años, 5 meses
Puntos: 84
Respuesta: compara mal dos datos uno por parámetro y el otro de un SELECT

Cita:
Iniciado por pateketrueke Ver Mensaje
1. Es pésima idea extraer todos los datos de la tabla para comparar con PHP, ¿si sabes que puedes hacer esas comparaciones de manera directa con SQL?
Tienes toda la razón

ahora he limitado la búsqueda sql de esta manera

Código PHP:
Ver original
  1. $validacion="SELECT usuario, email, passwd FROM usuarios WHERE usuario='".$usuarioc."' AND email='".$emailc."'";

y si no está vacío entonces retorno salida a true, luz verde para el registro.

Cita:

Deberías estudiar SQL.
En cuanto termine PHP es algo que tengo pendiente, como javascript

Cita:

2. En el while() con el que extraer los resultados sobre-escribes en cada vuelta $this->arr con el registro extraído, ¿de verdad no te das cuenta?
estuve todo el día para escribir esto, pensando y pensando cómo estructurarlo y cómo hacer la llamada, llegó un momento que me obturé

Cita:
En resumen, no estás creando ninguna lista con todos los registros de esa forma.

Edito: ups! ya te lo han dicho...
es todo un placer tu ayuda!!!
  #5 (permalink)  
Antiguo 28/05/2013, 12:44
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 11 años, 5 meses
Puntos: 84
Respuesta: compara mal dos datos uno por parámetro y el otro de un SELECT

Cita:
Iniciado por maycolalvarez Ver Mensaje
si arr es un Array: lo estás usando como variable:

$this->arr=$validacion;

cuando se supone que debes de agregarle el usuario:

$this->arr[]=$validacion;

consulte sobre manejo de arrays en php.

Recomendación: veo que intentas validar usuarios como un sistema de login, no me parece adecuado extraer Todos los usuarios para validar uno a uno cuando SQL where puede hacerlo por tí, solo tienes que tener en cuenta el filtrar contra SQL inyection, así es más eficiente
esto no me quedó claro. hay algún sitio donde pueda consultar de manera clara y con ejemplos el manejo de arrays en objetos con php si es posible, además de la documentación oficial, que la desconozco en este sentido, me gustaría ver otros sitios, pero no me doy idea de cómo buscarlo o dónde acudir, no encuentro nada con google, lo siento.

gracias por tu ayuda! :D
  #6 (permalink)  
Antiguo 28/05/2013, 12:46
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 8 meses
Puntos: 1532
Respuesta: compara mal dos datos uno por parámetro y el otro de un SELECT

para eso busca en google por: php manejo de arrays

no recuerdo en que parte del manual de PHP aparece, pero es algo simple de dominar: http://www.desarrolloweb.com/articulos/1290.php esa forma aparece al final del articulo

PD: puedes estudiar SQL junto con PHP, porque para hacer lo que necesitas vas a necesitar interactuar mucho con la DB, no solo de programar en PHP se hacen los sistemas, y prácticamente aprender a programar va de la mano con dominar SQL, que además te servirá para otros lenguajes.
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #7 (permalink)  
Antiguo 28/05/2013, 12:51
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 11 años, 5 meses
Puntos: 84
Respuesta: compara mal dos datos uno por parámetro y el otro de un SELECT

Cita:
Iniciado por maycolalvarez Ver Mensaje
para eso busca en google por: php manejo de arrays

no recuerdo en que parte del manual de PHP aparece, pero es algo simple de dominar: http://www.desarrolloweb.com/articulos/1290.php esa forma aparece al final del articulo

PD: puedes estudiar SQL junto con PHP, porque para hacer lo que necesitas vas a necesitar interactuar mucho con la DB, no solo de programar en PHP se hacen los sistemas, y prácticamente aprender a programar va de la mano con dominar SQL, que además te servirá para otros lenguajes.
tienes toda la razón. tendré que ponerme a ello. cada día me está gustando más programar :P

muchísimas gracias sinceramente :D

Etiquetas: formulario, mysql, select, sql, usuarios
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 07:37.