Foros del Web » Programando para Internet » PHP »

problemas con SUBSTRING

Estas en el tema de problemas con SUBSTRING en el foro de PHP en Foros del Web. Hola amigos les comento que tengo un problema con el SUBSTRING de la consulta, y es que por alguna razon no me quiere tomar la ...
  #1 (permalink)  
Antiguo 13/04/2010, 07:59
Avatar de kaninox  
Fecha de Ingreso: septiembre-2005
Ubicación: In my House
Mensajes: 3.597
Antigüedad: 18 años, 7 meses
Puntos: 49
problemas con SUBSTRING

Hola amigos les comento que tengo un problema con el SUBSTRING de la consulta, y es que por alguna razon no me quiere tomar la variable $ccusuario
la cual cuenta la cantidad de caracteres de lo que ingreso.

el tema es que si mi usuario es [email protected] yo puedo ingresar kaninox como [email protected] y ambos deberian ser validos, pero resulta que aqui puedo poner ka ó k ó kan etc... y su contraseña valida obviamente y me valida igual, por lo que veo que no me esta tomando esta variable alguna idea?
si pongo la variable en comillas dobles o sin ellas me da el error si la pongo en comillas simples no me deja con nada :/

Código PHP:
Ver original
  1. <?php
  2. include "conexion.php";   //conexion.
  3. //Funcion para limpiar cadenas de caracteres especiales
  4. function limpiaCadena ($cadena)
  5. {
  6. $cadena = stripslashes($cadena);
  7. return mysql_real_escape_string($cadena);
  8. }
  9. //comprobamos si viene un email completo o nombre usuario y validamos ambas entradas
  10. $posicion_final = stripos("$_POST[user]", "@");
  11. if ($posicion_final != "") {$valida_usuario=substr($_POST[user],0,$posicion_final);}else{$valida_usuario = "$_POST[user]";}
  12. $user_in = limpiaCadena(htmlentities($valida_usuario));
  13. $con_nex = limpiaCadena($_POST[contrasena]);
  14. $contra_encript = md5($con_nex); // contraseña
  15. //contamos los caracteres del nombre usuario y validamos
  16. $ccusuario = strlen($_POST[user]);
  17. // ¿El usuario existe?
  18. $busca_usuario=mysql_query("SELECT * FROM mitabla"
  19. ." WHERE SUBSTRING(email, 1, $ccusuario)= BINARY '$user_in' "
  20. ." AND contrasenia = '$contra_encript' "
  21. ." AND bandera_activo = '1'");
  22. if(mysql_num_rows($busca_usuario)==1) // Los datos son validos
  23. {
  24. ......

se me olvidaba agregar que se que es ese el problema por que si le pongo el dato a mano digamos kaninox tiene 7 caracteres me funciona correctamente, hay algo que hace que no me tome la variable o se la salte :/

#
." WHERE SUBSTRING(email, 1, 7)= BINARY '$user_in' "
__________________
Gokuh Salvo al mundo. PUNTO!!!!

Última edición por kaninox; 13/04/2010 a las 08:06
  #2 (permalink)  
Antiguo 13/04/2010, 08:24
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: problemas con SUBSTRING

y enserio esto tiene que ver con PHP??
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 13/04/2010, 08:37
Avatar de kaninox  
Fecha de Ingreso: septiembre-2005
Ubicación: In my House
Mensajes: 3.597
Antigüedad: 18 años, 7 meses
Puntos: 49
Respuesta: problemas con SUBSTRING

creo que si ya que lo que no me toma es una variable de php.
creó yo. de no ser así sorry.
__________________
Gokuh Salvo al mundo. PUNTO!!!!
  #4 (permalink)  
Antiguo 13/04/2010, 08:42
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: problemas con SUBSTRING

bueno, y si imprimes la consulta para ver como está hecha antes de ejecutarla??
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 13/04/2010, 08:52
Avatar de kaninox  
Fecha de Ingreso: septiembre-2005
Ubicación: In my House
Mensajes: 3.597
Antigüedad: 18 años, 7 meses
Puntos: 49
Respuesta: problemas con SUBSTRING

pues si la he impreso el problema es que como dije al poner ka o k o kanin igual me hace la consulta y me trae los datos :/ y yo quiero que funcione solo poniendo o

kaninox ó [email protected]
__________________
Gokuh Salvo al mundo. PUNTO!!!!
  #6 (permalink)  
Antiguo 13/04/2010, 08:56
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: problemas con SUBSTRING

por eso pregunto... entonces si sabes usar bien SUBSTRING() de MySQL??

porque si dices que la consulta esta bien hecha, entonces cual es el problema de código PHP porque yo no lo entiendo...
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 13/04/2010, 09:01
Avatar de kaninox  
Fecha de Ingreso: septiembre-2005
Ubicación: In my House
Mensajes: 3.597
Antigüedad: 18 años, 7 meses
Puntos: 49
Respuesta: problemas con SUBSTRING

haber cuando hago en la consola de mysql

SELECT * FROM mitabla WHERE SUBSTRING(email, 1, 7)= 'kani';
esta no me devuelve nada lo que es correcto
si hago
SELECT * FROM mitabla WHERE SUBSTRING(email, 1, 7)= 'kaninox';
me devuelve los datos
hasta aqui bien

pero cuando lo hago en php y pongo el valor 7 como una variable

pongo kaninox pero tambien pongo ka, k, kan, kanin etc... e igualmente me trae los datos
entonces no es la idea, ya que ni siquiera escribo el nombre completo no se si me explico bien.

Saludos
__________________
Gokuh Salvo al mundo. PUNTO!!!!
  #8 (permalink)  
Antiguo 13/04/2010, 09:05
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 17 años, 8 meses
Puntos: 70
Respuesta: problemas con SUBSTRING

Y cómo te va haciendo eso que dices diractamente en la consola mysql? O en su defecto phpmyadmin? TE va bien? O pasa lo mismo?

Si pasa lo mismo, entonces no es problema de php.

Saludos
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com
  #9 (permalink)  
Antiguo 13/04/2010, 09:27
Avatar de kaninox  
Fecha de Ingreso: septiembre-2005
Ubicación: In my House
Mensajes: 3.597
Antigüedad: 18 años, 7 meses
Puntos: 49
Respuesta: problemas con SUBSTRING

pues no se si sea problema de php o de mysql :/ lo que se es que al poner en php en la consulta el valor a mano se podría decir.

SELECT * FROM mitabla WHERE SUBSTRING(email, 1, 7)= '$user_in';
me resulta

pero este valor, el 7 no es fijo es variable dependiendo del nombre usuario "correo" en este caso, entonces necesito ponerle una variable, y al hacer
SELECT * FROM mitabla WHERE SUBSTRING(email, 1, $variable)= '$user_in';

me da el error comentado, en phpmyadmin no puedo probar la consulta con variables :/
y como dije e tratado poniendo

SELECT * FROM mitabla WHERE SUBSTRING(email, 1, '$variable')= '$user_in';
SELECT * FROM mitabla WHERE SUBSTRING(email, 1, "$variable")= '$user_in';
SELECT * FROM mitabla WHERE SUBSTRING(email, 1, ".$variable.")= '$user_in';

y me da los mismo resultados, algo bastante raro :/
estoy comenzando a pensar que la consulta no me deja poner una variable en el SUBSTRING
lo mismo me pasaba cuando ordenaba por DESC o ASC y este valor lo entregaba en una variable. $ordena = "DESC"; por ejemplo
__________________
Gokuh Salvo al mundo. PUNTO!!!!
  #10 (permalink)  
Antiguo 13/04/2010, 09:33
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: problemas con SUBSTRING

por eso también pregunte si has impreso la consulta que generas automáticamente...

así tal cual está tu código... ¿puedes colocar como es la consulta que ejecutas??

vamos que si la consulta es correcta, y la ejecutas directamente...
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #11 (permalink)  
Antiguo 13/04/2010, 09:46
Avatar de kaninox  
Fecha de Ingreso: septiembre-2005
Ubicación: In my House
Mensajes: 3.597
Antigüedad: 18 años, 7 meses
Puntos: 49
Respuesta: problemas con SUBSTRING

Código PHP:
Ver original
  1. $busca_usuario=mysql_query("SELECT * FROM mitabla"
  2. ." WHERE SUBSTRING(email, 1, $ccusuario)= BINARY '$user_in' "
  3. ." AND contrasenia = '$contra_encript' "
  4. ." AND bandera_activo = '1'");
  5. while ($dato = mysql_fetch_array($busca_usuario))
  6. {
  7. echo "$dato[email]"; //me devuelve [email protected]
  8. }

si imprimo $busca_usuario me da = Resource id #4

si me funciona el problema es que, que pasa si mi contraseña es 1234 por decir algo
y a fulano de tal se le ocurrió crearse un usuario kani con la misma password entonces el sistema me trae el ultimo o el primero dependiendo del ingreso.
__________________
Gokuh Salvo al mundo. PUNTO!!!!
  #12 (permalink)  
Antiguo 13/04/2010, 09:54
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: problemas con SUBSTRING

Cita:
Iniciado por kaninox Ver Mensaje
[...] si imprimo $busca_usuario me da = Resource id #4 [...]
mira, no es por nada pero tu problema se entiende perfectamente!!

entonces... solo es que no has podido depurar bien tu trabajo, en todo caso te dije que imprimieras la consulta... mas no el resultado de la consulta...
Código PHP:
$sql "SELECT * FROM mitabla"
." WHERE SUBSTRING(email, 1, $ccusuario)= BINARY '$user_in' "
." AND contrasenia = '$contra_encript' "
." AND bandera_activo = '1'";

echo 
$sql;
// ... 
ahora si... ¿que resulta??
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #13 (permalink)  
Antiguo 13/04/2010, 10:46
Avatar de kaninox  
Fecha de Ingreso: septiembre-2005
Ubicación: In my House
Mensajes: 3.597
Antigüedad: 18 años, 7 meses
Puntos: 49
Respuesta: problemas con SUBSTRING

anda patetrueke ahora te entiendo claro me esta cortando en ambos lados, y claramente kan = kan siempre y etc. sorry pero no he dormido nada ando colapsao y no pude ver el problema X)...

mmmm entonces no me sirve de mucho el substring, como puedo comparar en la consulta :/ entonces desde el campo 1 hasta el arroba .....

bueno me cabeceare un rato, gracias si alguien me da una luz bienvenido sea.

gracias patetrueke sorry por la iluminación :P

Edito, por si alguien lo necesita : lo logre con SUBSTRING_INDEX($campo, '@', 1); gracias a jurena que me ilumino :)
__________________
Gokuh Salvo al mundo. PUNTO!!!!

Última edición por kaninox; 14/04/2010 a las 09:08

Etiquetas: Ninguno
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 13:18.