Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: Diabliyo en 11 Octubre 2013, 17:23 pm



Título: [MySQL] Consulta con LIKE omite el primer elemento al momento de listar (solved)
Publicado por: Diabliyo en 11 Octubre 2013, 17:23 pm
Buenas.

Estoy haciendo una consulta usando la variable LIKE '%muestra%' para buscar algo dentro de mi pagina, y que esto se asocie con la "muestra" de palabra que me haya proporcionado el usuario desde el INPUT de busqueda.

La busqueda se realiza con exito (consulta a mysql), la sintaxis esta bien y todo... el problema es que al momento de mostrar los resultados (mysql_fetch_array()) me omite el primer elemento de la consulta. Vaya, si la consulta a mysql me dio 4 resultados, me omite el primer elemento.

ejemplo:

Código
  1. <?php
  2. $q= "select * from NOTICIAS where TITULO LIKE '%piedra%' ORDER BY TITULO ASC;";
  3. $link= conectarmysql();
  4. $query= mysql_query( $q, $link ); # consultamos
  5.  
  6. # imprime "Resultados Encontrados: 4"
  7. echo 'Resultados Encontrados: '. mysql_num_rows($query);
  8.  
  9. # ahora a listar
  10. $c=0; # un contador
  11. while( $buf=mysql_fetch_array($query) )
  12.          {
  13.          echo $buf["TITULO"]. '<br><hr>';
  14.          $c++;
  15.          }
  16.  
  17. # imprime "Resultados Listados: 3"
  18. echo 'Resultados Listados: '. $c;
  19. ?>

En busca de ver cual era el problema, me tope conque omite el primer elemento encontrado ya que realice la sentencia de consulta exacta en PHPMyAdmin y me arroja los 4 resultados, pero el PRIMERO de la lista no lo imprime mi codigo.

Por ello digo que "omite el primer elemento de la busqueda".

Espero puedan ayudarme !

IMPORTANTE: esto solo ocurre con busquedas, ya que la operaciones normales como "ver una sección del blog"  o cualquier cosa que demande consultar a MySQL algo, si se encuentran 10 resultados, los 10 salen impresos... Repito: solo sucede cuando hago una busqueda.

Saludos !


Título: Re: [MySQL] Consulta con LIKE omite el primer elemento al momento de listar !
Publicado por: Shell Root en 11 Octubre 2013, 21:56 pm
Sera porque el contador empieza desde 0  :silbar:, la verdad no entendi mucho


Título: Re: [MySQL] Consulta con LIKE omite el primer elemento al momento de listar !
Publicado por: 1mpuls0 en 11 Octubre 2013, 22:13 pm
Sera porque el contador empieza desde 0  :silbar:, la verdad no entendi mucho
._.

@Diabliyo
comenta la siguiente línea y verifica que pasa ;)

echo 'Resultados Encontrados: '. mysql_num_rows($query);


Título: Re: [MySQL] Consulta con LIKE omite el primer elemento al momento de listar !
Publicado por: Diabliyo en 12 Octubre 2013, 07:22 am
Alex Jurado por favor evita contestar al tema si no entiendes, creo que es muy claro, de los 4 resultados solo imprime los ultimos 3, el primero no sale listado.

Ejm: Esta es la Tabla en MySQL.

*----------------*
|   TITULO  |
*----------------*
| piedra1    |
| piedra2    |
| piedra3    |
| piedra4    |
*----------------*

El resultado del codigo que puse arriba da:

Código:
Resultados Encontrados: 4

piedra2
piedra3
piedra4

Resultados Listados: 3

Darhius pues es obvio, solo no sale el texto "Resultados Encontrados: 4". Eso obviamente no resuelve nada :S



Lo raro es que solo sucede cuando hago busquedas, osease, cuando se llama a la consulta con LIKE '%muestra%'. Si entro simplemente a ver las noticias del blog (sin busqueda), salen los 4 elementos impresos.

Saludos !


Título: Re: [MySQL] Consulta con LIKE omite el primer elemento al momento de listar !
Publicado por: Shell Root en 12 Octubre 2013, 08:29 am
Lo tengo exactamente como tú lo tienes, mira: -PASAME UN SCRIPT DE LA TABLA-

Código:
Código
  1.      $cnn = mysql_connect("127.0.0.1", "root", "");
  2.      mysql_select_db("dbPoC", $cnn);
  3.  
  4.      $sql = "SELECT * FROM usuarios WHERE nick LIKE '%piedra%'";
  5.      $query = mysql_query($sql, $cnn) or die("error:".mysql_error());
  6.      echo 'Resultados Encontrados: '. mysql_num_rows($query)."<br/>";
  7.  
  8.      $contador = 0;
  9.      while($row = mysql_fetch_array($query)):
  10.         echo $row["nick"]."<br/>";
  11.         $contador++;
  12.      endwhile;
  13.  
  14.      echo 'Resultados Listados: '. $contador;

Resultado:
Código
  1. Resultados Encontrados: 4
  2. piedra1
  3. piedra2
  4. piedra3
  5. piedra4
  6. Resultados Listados: 4

PD: jaja el comentario de ahora, es que estaba beodo :p


Título: Re: [MySQL] Consulta con LIKE omite el primer elemento al momento de listar !
Publicado por: Diabliyo en 13 Octubre 2013, 17:59 pm
Buen dia...

Gracias por tu respuesta Alex Jurado, pero me puse a analizar con lupa mi codigo y encontre algo que pues me tiene con la duda.... Antes explico algo importante.

La tabla donde guardo las noticias tiene estos tres campos mas:

TITULO --> donde se guarda el titulo del post.
VISTA --> su valor puede ser "post", "page", "gallery", "script".
MENU--> menu donde se coloca esta noticia.
sección--> sección dentro del menu.

En donde:

post --> se visualizara la pagina en forma de "blog".
page --> solo se muestra la ultima noticia.
gallery --> las noticia se muestran en forma de thumbnails (recuadros con foto de portada).
script --> la noticia carga un SCRIPT PHP que adjunto el usuario.

De modo que ANTES de meter la consulta al while() realizo esto:

Código
  1. $q= "select * from NOTICIAS where TITULO LIKE '%piedra%' ORDER BY TITULO ASC;";
  2. $link= conectarmysql();
  3. $query= mysql_query( $q, $link ); # consultamos
  4.  
  5. # imprime "Resultados Encontrados: 4"
  6. echo 'Resultados Encontrados: '. mysql_num_rows($query);
  7.  
  8. # consulto el primer dato
  9. $x= mysql_fetch_array($query);
  10.  
  11. if( !strcmp($x["VISTA"], "post") )
  12.          noticias_post($query); # mando la consulta
  13. else if( !strcmp($x["VISTA"], "page") )
  14.          noticias_pagina($query); # mando la consulta
  15. else if( !strcmp($x["VISTA"], "gallery") )
  16.          noticias_galeria($query); # mando la consulta
  17. else if( !strcmp($x["VISTA"], "script") )
  18.          noticias_script($query); # mando la consulta
  19. else echo 'Error';
  20.  
  21. unset($query);
  22.  
  23. #
  24. # Y digamos que es la funcion de noticias_post()
  25. #
  26. function noticias_post( $q )
  27. {
  28. if( mysql_num_rows($q) )
  29. {
  30. # ahora a listar
  31. $c=0; # un contador
  32. while( $buf=mysql_fetch_array($q) )
  33.          {
  34.          echo $buf["TITULO"]. '<br><hr>';
  35.          $c++;
  36.          }
  37.  
  38. # imprime "Resultados Listados: 3
  39. echo 'Resultados Listados: '. $c;
  40. }
  41. }

Me imagino que el mysq_fetch_array() de la linea 9 hace que pierda el primer elemento del conjunto encontrado, no ?

Saludos !


Título: Re: [MySQL] Consulta con LIKE omite el primer elemento al momento de listar !
Publicado por: xustyx en 13 Octubre 2013, 18:41 pm
No se mucho de php pero prueba de hacer la consulta otra vez antes de entrar en noticias_post.

Supongo que al hacer el fetch el cursor se adelanta una posición por eso te retorna 1 menos como tu dices.


Título: Re: [MySQL] Consulta con LIKE omite el primer elemento al momento de listar !
Publicado por: Diabliyo en 14 Octubre 2013, 16:42 pm
Buen dia...

Pues resuelto :D...

El detalle es que hacia una llamada a mysql_fetch_array() para verificar la forma en como se visualizaria el contenido, eso hacia que el puntero se fuera a la posición 2 y a partir de ahí continuaba imprimiendo, por ende el primer dato ya no era visible :S !....

La solución es regresar el punto al principio con:

Código
  1. mysql_data_seek( $query, 0 );

Saludos !