Foros del Web » Programando para Internet » PHP »

Buscador que solo reconoce de dos registros iguales de la tabla usuarios uno de ellos

Estas en el tema de Buscador que solo reconoce de dos registros iguales de la tabla usuarios uno de ellos en el foro de PHP en Foros del Web. Hola. Estoy haciendo un buscador con php para buscar personas o usuarios en el que hay un registro (registro22) que si busco por nombre y ...
  #1 (permalink)  
Antiguo 28/10/2015, 11:35
Avatar de kahlito
Colaborador
 
Fecha de Ingreso: marzo-2003
Ubicación: En el Estrecho y el mar
Mensajes: 2.936
Antigüedad: 21 años, 1 mes
Puntos: 65
Buscador que solo reconoce de dos registros iguales de la tabla usuarios uno de ellos

Hola.

Estoy haciendo un buscador con php para buscar personas o usuarios en el que hay un registro (registro22) que si busco por nombre y apellidos juntos jamás aparece. Sin embargo acabo crear otro usuario nuevo (registro23) copiando por ejemplo un usuario cualquiera que si aparece siempre, le pongo los mismos datos que el usuario que no aparece (registro22) y ahora si hago la búsqueda por nombre y apellidos el usuario nuevo (registro23) que tiene ahora exactamente todos los datos que en anterior, menos id_usuario pues si aparece y el anterior sigue sin aparecer. Incluso acabo de crear otro usuario nuevo con el mismo nombre y apellidos y también aparece junto al registro23
sin embargo el anterior nada.

¿Qué problema puede ser?

La búsqueda la hago de la siguiente manera:

Código HTML:
Ver original
  1. <!-- Aquí formulario de búsqueda -->
  2.         <form action="usuarios.php?source=buscar_usuarios" method="post" name="buscar_usuarios" class="form-busqueda">
  3.             <input type="text" name="busqueda" placeholder="Buscar amigos" required >
  4.             <input type="submit" name="buscar" value="Buscar" class="submit-busqueda">
  5.         </form>
  6.         <!-- Fin formulario de búsqueda -->

Código PHP:
Ver original
  1. <?
  2. if(isset($_POST['buscar'])){       
  3.     $busqueda = $_POST['busqueda'];
  4.     $nombre = $_POST['nombre'];
  5.     $apellidos = $_POST['apellidos'];
  6.     $usuario = $_POST['usuario'];
  7.    
  8.     $query = "SELECT * FROM usuarios WHERE usuario LIKE '%$busqueda%'|| CONCAT(nombre,' ', apellidos) LIKE '%$busqueda%'";
  9.    
  10.     $usuarios_query = mysqli_query($conexion, $query);
  11.     if(mysqli_num_rows($usuarios_query) == 0){
  12.         echo '<p class="error">No hay ningún resultado</p>';
  13.         echo "<p>Estoy buscando: " .$busqueda."</p>";
  14.     }
  15.     else{
  16.         echo "<article>";
  17.         echo "<ul>";
  18.         while($fila=mysqli_fetch_assoc($usuarios_query)){
  19.             $nombre = $fila['nombre'];
  20.             $apellidos = $fila['apellidos'];
  21.             $usuario = $fila['usuario'];
  22.             $id_usuario = $fila['id_usuario'];
  23.             $imagen_perfil = $fila['imagen_perfil'];
  24.            
  25.             echo '<li><img src="img/'.$imagen_perfil.'" class="mini-perfil"><span class="datos-usuario"><a href="usuarios.php?id='.$id_usuario.'" accesskey="m" title="'.$usuario.'">Usuario: '.$usuario.' - '.$nombre.' '.$apellidos.'</a></span></li>';//Aquí añadir imagen pequeña. 
  26.         }
  27.         echo "</article>";
  28.         echo "<ul>";
  29.     }  
  30. }
  31. ?>

Y en la base de datos como comentaba anteriormente los registros 22 y 23 les he puesto los mismos datos y solo aparece siempre el 23 o incluso el 24 solo poniendo los mismos nombres y apellidos.

¿Cual podría ser el error? Por ahora solo estoy haciendo pruebas y antes de presentar la web online me gustaría saber si eso puede volver a pasar o saber cual es el problema tan extraño, si es algo de el envío de datos o un error de la tabla sql.

Saludos.
  #2 (permalink)  
Antiguo 28/10/2015, 15:34
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Buscador que solo reconoce de dos registros iguales de la tabla usuarios u

Saludo
Sí se ejecutan las consultas directamente en phpmyadmin
el resultado es el mismo???

Debe haber algo especial en ese usuario,
tal vez es tímido, o algo le pasa.

Yo revisaría que no tenga algo distinto (incluyendo mayúsculas, minúsculas, etc)
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #3 (permalink)  
Antiguo 29/10/2015, 05:03
Avatar de kahlito
Colaborador
 
Fecha de Ingreso: marzo-2003
Ubicación: En el Estrecho y el mar
Mensajes: 2.936
Antigüedad: 21 años, 1 mes
Puntos: 65
Respuesta: Buscador que solo reconoce de dos registros iguales de la tabla usuarios u

Cita:
Iniciado por mortiprogramador Ver Mensaje
Saludo
Sí se ejecutan las consultas directamente en phpmyadmin
el resultado es el mismo???
Hola mortiprogramador.

Pues haciendo esa prueba en php admin he visto que uno de los usuarios(aparte de ser muy tímido) tenía el mismo nombre pero a su lado un espacio en blanco y claro por eso era imposible encontrarlo:

(22, 'lucia ', 'peña ', 'nutria30'...),
(22, 'lucia', 'peña ', 'nutria30'...),

Tengo que cambiar esa opción en el input nombre usuario etc etc para no dejar espacios en blanco en el usuario tanto delante, en medio o detrás...

Por ahora he conseguido arreglar con trim al principio y final,

Código PHP:
Ver original
  1. $nombre = trim($_POST['nombre'], ' ');

pero no es suficiente ya que si alguien pone por ejemplo solo en el nombre "Daniel Jesús" con 3 espacios entre ellos ese nombre tampoco aparecería en el buscador, así que voy a investigar otras opciones.

Esta claro que me queda mucho por aprender, de nuevo algo tan básico me da un poco de guerra

Gracias por tu ayuda, saludos
  #4 (permalink)  
Antiguo 29/10/2015, 05:30
 
Fecha de Ingreso: julio-2015
Ubicación: Barcelona
Mensajes: 93
Antigüedad: 8 años, 8 meses
Puntos: 3
Respuesta: Buscador que solo reconoce de dos registros iguales de la tabla usuarios u

Borra todos los caracteres sobrantes del final del nombre que no contengan una letra?
Y también borra todos los espacios que sean mayores de 1 antes de llegar al final.
  #5 (permalink)  
Antiguo 29/10/2015, 08:35
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Buscador que solo reconoce de dos registros iguales de la tabla usuarios u

Saludo
Pero eso no debería haber dado problema, pues la consulta esta con LIKE,
y eso haría que encaje, debe ser otra cosa que no hace match.

Lo digo porque inserte los registros tal cual se muestran en el
ejemplo
(22, 'lucia ', 'peña ', 'nutria30'...), (Espacio en nombre y apellido)
(22, 'lucia', 'peña ', 'nutria30'...), (Espacio en apellido)

Y haciendo la consulta me trae ambos, esto es porque el LIKE es flexible
para esa clase de búsqueda, así que no debería haber problema.

El asunto cambia sí se hace así

Ej
Código SQL:
Ver original
  1. SELECT * FROM USER WHERE USER
  2. -- LIKE '%lucia%' || CONCAT(user,' ', pass) LIKE 'peña' (ambos)
  3. -- LIKE '%lucia %' || CONCAT(user,' ', pass) LIKE 'peña' (uno)
  4. LIKE '%lucia%' || CONCAT(USER,' ', pass) LIKE 'peña ' (ambos)

Es decir, depende tanto de como se encuentren los datos en la
base de datos, pero también como lo busque la persona (con o sin espacios)

__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #6 (permalink)  
Antiguo 05/11/2015, 11:36
Avatar de kahlito
Colaborador
 
Fecha de Ingreso: marzo-2003
Ubicación: En el Estrecho y el mar
Mensajes: 2.936
Antigüedad: 21 años, 1 mes
Puntos: 65
Respuesta: Buscador que solo reconoce de dos registros iguales de la tabla usuarios u

Cita:
Iniciado por hechicerd0 Ver Mensaje
Borra todos los caracteres sobrantes del final del nombre que no contengan una letra?
Y también borra todos los espacios que sean mayores de 1 antes de llegar al final.
Gracias hechicerd0, voy a probarlo.

Cita:
Iniciado por mortiprogramador Ver Mensaje
Saludo
Pero eso no debería haber dado problema, pues la consulta esta con LIKE,
y eso haría que encaje, debe ser otra cosa que no hace match.

Lo digo porque inserte los registros tal cual se muestran en el
ejemplo
(22, 'lucia ', 'peña ', 'nutria30'...), (Espacio en nombre y apellido)
(22, 'lucia', 'peña ', 'nutria30'...), (Espacio en apellido)

Y haciendo la consulta me trae ambos, esto es porque el LIKE es flexible
para esa clase de búsqueda, así que no debería haber problema.

El asunto cambia sí se hace así

Ej
Código SQL:
Ver original
  1. SELECT * FROM USER WHERE USER
  2. -- LIKE '%lucia%' || CONCAT(user,' ', pass) LIKE 'peña' (ambos)
  3. -- LIKE '%lucia %' || CONCAT(user,' ', pass) LIKE 'peña' (uno)
  4. LIKE '%lucia%' || CONCAT(USER,' ', pass) LIKE 'peña ' (ambos)

Es decir, depende tanto de como se encuentren los datos en la
base de datos, pero también como lo busque la persona (con o sin espacios)

Hola mortiprogramador, la verdad es que me dio por probar en el buscador dejando un espacio y vi que también salia pero claro normalmente las búsquedas no se hacen con espacios.

Aunque en principio parto de nuevo con la consulta así:

Código PHP:
Ver original
  1. $query = "SELECT * FROM usuarios WHERE usuario LIKE '%$busqueda%'|| CONCAT(nombre,' ', apellidos) LIKE '%$busqueda%'";

Voy a intentar solucionarlo con vuestras explicaciones. Gracias de nuevo.

Etiquetas: buscador, formulario, mysql, reconoce, registro, registros, select, sql, tabla, 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 06:39.