Foros del Web » Programando para Internet » PHP »

Buscador - PHP - MYSQL: duda

Estas en el tema de Buscador - PHP - MYSQL: duda en el foro de PHP en Foros del Web. Hola estoy utilizando un senzillo tutorial para crear un buscador no muy complicado, que consulte datos contra una tabla. En concreto sólo me interesa buscar ...
  #1 (permalink)  
Antiguo 11/01/2007, 06:53
Avatar de ortiz  
Fecha de Ingreso: septiembre-2004
Mensajes: 154
Antigüedad: 19 años, 6 meses
Puntos: 0
Buscador - PHP - MYSQL: duda

Hola

estoy utilizando un senzillo tutorial para crear un buscador no muy complicado, que consulte datos contra una tabla. En concreto sólo me interesa buscar un campo de esa tabla.

El código utilizado es éste: http://www.programacion.net/php/articulo/adr_buscador/

La cuestión no es que si el código funciona o no. Es algo más curioso.

El tema es que si yo hago una consulta en el phpmyadmin en la pestaña de editar SQL, del tipo:
SELECT * FROM juego WHERE nombre LIKE '%Juego%'

no tengo problemas. Pero si realizo la consulta desde mi código en php no me muestra resultados.

He comprobado que la variable que lo recoja, $busqueda sea correcta y sí, recoge el valor sin problemas. Pero el resultado de la búsqueda es diferente.

Por ejemplo, busco la palabra Silent. En teoría deberían aparecerme 2 registros, pero en el buscador.php sólo devuelve un resultado. No entiendo NADA

Dejo el código por si alguien busca algo de este tema y por si alguien me quiere ayudar....

Saludos y gracias.

Código PHP:
<?
if($busqueda <> ""){

$trozos explode(" ",$busqueda);
$numero count($trozos);

 if (
$numero == 1) {
        
//SI SOLO HAY UNA PALABRA DE BUSQUEDA SE ESTABLECE UNA INSTRUCION CON LIKE
        //$sql = mysql_query("SELECT * FROM juego WHERE nombre LIKE '%$busqueda%'",$cbd);
        
$sentencia "SELECT * FROM juego WHERE nombre LIKE '%$busqueda%'";
        
$sql mysql_query($sentencia,$cbd);
        
        if (
$row mysql_fetch_array($sql)){
            while (
$row mysql_fetch_array($sql)){
            
$juego $row['nombre'];
            
$juego urlencode($juego);
?>
        <li>
        <div class="noticia_titulo"><a href="http://www.warphammer.net/infojuego.php?de=<?=$juego;?>" title="Juegos estrategia - <?=$row['nombre'];?>"><?=$row['nombre'];?></a></div>
        <p><?=$row['descripcion'];?></p>
        <br />
        </li>
<?
            
}
        
mysql_free_result($result);
        
mysql_close($cbd);    
        } else {
            echo 
"<p>¡No se ha encontrado ningún registro!</p>\n";
        }
    }else{
        
$sql mysql_query("SELECT * FROM juego WHERE MATCH(nombre) AGAINST ('$busqueda')",$cbd);
        if (
$row mysql_fetch_array($sql)){
            while (
$row mysql_fetch_array($sql)){
            
$juego $row['nombre'];
            
$juego urlencode($juego);
?>
        <li>
        <div class="noticia_titulo"><a href="http://www.warphammer.net/infojuego.php?de=<?=$juego;?>" title="Juegos estrategia - <?=$row['nombre'];?>"><?=$row['nombre'];?></a></div>
        <p><?=$row['descripcion'];?></p>
        <br />
        </li>
<?
            
}
        
mysql_free_result($result);
        
mysql_close($cbd);    
        } else {
            echo 
"<p>¡No se ha encontrado ningún registro!</p>\n";
        }    
    }
}else{
        echo 
"<p>Introduce al menos una palabra para realizar una búsqueda.</p>\n";

?>
__________________
Juegos de Estrategia para PC - Warphammer.net :: Estrategia sólo en castellano
  #2 (permalink)  
Antiguo 11/01/2007, 09:59
Avatar de BrujoNic
Super Moderador
 
Fecha de Ingreso: noviembre-2001
Ubicación: Costa Rica/Nicaragua
Mensajes: 16.935
Antigüedad: 22 años, 5 meses
Puntos: 655
Re: Buscador - PHP - MYSQL: duda

Movido desde BD a PHP, razón... Lee la Función de la sección de Base de Datos.
__________________
La tecnología está para ayudarnos. No comprendo el porqué con esa ayuda, la gente escribe TAN MAL.
NO PERDAMOS NUESTRO LINDO IDIOMA ESPAÑOL
  #3 (permalink)  
Antiguo 11/01/2007, 12:45
Avatar de jimadri  
Fecha de Ingreso: julio-2006
Ubicación: Buenos Aires
Mensajes: 487
Antigüedad: 17 años, 9 meses
Puntos: 1
Re: Buscador - PHP - MYSQL: duda

Cita:
Iniciado por ortiz Ver Mensaje
Hola

estoy utilizando un senzillo tutorial para crear un buscador no muy complicado, que consulte datos contra una tabla. En concreto sólo me interesa buscar un campo de esa tabla.

El código utilizado es éste: http://www.programacion.net/php/articulo/adr_buscador/

La cuestión no es que si el código funciona o no. Es algo más curioso.

El tema es que si yo hago una consulta en el phpmyadmin en la pestaña de editar SQL, del tipo:
SELECT * FROM juego WHERE nombre LIKE '%Juego%'

no tengo problemas. Pero si realizo la consulta desde mi código en php no me muestra resultados.

He comprobado que la variable que lo recoja, $busqueda sea correcta y sí, recoge el valor sin problemas. Pero el resultado de la búsqueda es diferente.

Por ejemplo, busco la palabra Silent. En teoría deberían aparecerme 2 registros, pero en el buscador.php sólo devuelve un resultado. No entiendo NADA

Dejo el código por si alguien busca algo de este tema y por si alguien me quiere ayudar....

Saludos y gracias.

Código PHP:
<?
if($busqueda <> ""){

$trozos explode(" ",$busqueda);
$numero count($trozos);

 if (
$numero == 1) {
        
//SI SOLO HAY UNA PALABRA DE BUSQUEDA SE ESTABLECE UNA INSTRUCION CON LIKE
        //$sql = mysql_query("SELECT * FROM juego WHERE nombre LIKE '%$busqueda%'",$cbd);
        
$sentencia "SELECT * FROM juego WHERE nombre LIKE '%$busqueda%'";
        
$sql mysql_query($sentencia,$cbd);
        
        if (
$row mysql_fetch_array($sql)){
            while (
$row mysql_fetch_array($sql)){
            
$juego $row['nombre'];
            
$juego urlencode($juego);
?>
        <li>
        <div class="noticia_titulo"><a href="http://www.warphammer.net/infojuego.php?de=<?=$juego;?>" title="Juegos estrategia - <?=$row['nombre'];?>"><?=$row['nombre'];?></a></div>
        <p><?=$row['descripcion'];?></p>
        <br />
        </li>
<?
            
}
        
mysql_free_result($result);
        
mysql_close($cbd);    
        } else {
            echo 
"<p>¡No se ha encontrado ningún registro!</p>\n";
        }
    }else{
        
$sql mysql_query("SELECT * FROM juego WHERE MATCH(nombre) AGAINST ('$busqueda')",$cbd);
        if (
$row mysql_fetch_array($sql)){
            while (
$row mysql_fetch_array($sql)){
            
$juego $row['nombre'];
            
$juego urlencode($juego);
?>
        <li>
        <div class="noticia_titulo"><a href="http://www.warphammer.net/infojuego.php?de=<?=$juego;?>" title="Juegos estrategia - <?=$row['nombre'];?>"><?=$row['nombre'];?></a></div>
        <p><?=$row['descripcion'];?></p>
        <br />
        </li>
<?
            
}
        
mysql_free_result($result);
        
mysql_close($cbd);    
        } else {
            echo 
"<p>¡No se ha encontrado ningún registro!</p>\n";
        }    
    }
}else{
        echo 
"<p>Introduce al menos una palabra para realizar una búsqueda.</p>\n";

?>
TE DEJO UN CÓDIGO QUE ESTOY USANDO Y FUNCIONA:

Código PHP:
<?

include ("inicio.php");


// Listado de Contactos


// Armo una coneccion al servidor mysql
$coneccion mysql_connect($host_db$usuario_db$pass_db);
mysql_select_db($base_db$coneccion);



if (
$tipo == "buscar")
{

   
// Busco todos los tipos de contactos disponibles

   
$sql "select * from categoria order by desc_cat ";
   
$result mysql_query($sql$coneccion);

   
$sql "select * from ciudades order by desc_ciudad ";
   
$result1 mysql_query($sql$coneccion);

   
$sql "select * from regimen order by desc_regimen ";
   
$result2 mysql_query($sql$coneccion);

   
$sql "select * from habitacion order by desc_habitacion ";
   
$result3 mysql_query($sql$coneccion);
    
   
$sql "select * from hotel order by nombre ";
   
$result4 mysql_query($sql$coneccion);


  
// Armo el formulario de busqueda

?>


<form method="POST" action="lcontactos.php">
  <table border="0" width="100%">
    <tr bgcolor="#669966">
      <td width="100%" colspan="2"><b>Buscar Hotel</b></td>
    </tr>
    <tr>
      <td width="30%" height="25">
        <p align="right">Nombre del Hotel: </td>
      <td width="70%" height="25"><select size="1" name="hotel">
        <option value="" selected>Todos los Hoteles</option>
      
        <?

           
// Muestro todos los tipos de contactos para armar la lista desplegable
           
while($myrow mysql_fetch_array($result4))
            {
               echo 
"<option value=$myrow[id_hotel]>$myrow[nombre]</option>";
            }
        
?>
        </select></td>
    </tr>
    <tr>
      <td width="30%" height="25">
        <p align="right">Ciudad: </td>
      <td width="70%" height="25"><select size="1" name="ciudad">
        <option value="" selected>Todas las Ciudades</option>
      
        <?

           
// Muestro todos los tipos de contactos para armar la lista desplegable
           
while($myrow mysql_fetch_array($result1))
            {
               echo 
"<option value=$myrow[id_ciudad]>$myrow[desc_ciudad]</option>";
            }
        
?>
        </select></td>
    </tr>
    <tr>
      <td width="30%" height="25">
        <p align="right">Categoria: </td>
      <td width="70%" height="25"><select size="1" name="categoria">
        <option value="" selected>Todas las Categorias</option>
      
        <?

           
// Muestro todos los tipos de contactos para armar la lista desplegable
           
while($myrow mysql_fetch_array($result))
            {
               echo 
"<option value=$myrow[id_cat]>$myrow[desc_cat]</option>";
            }
        
?>
        </select></td>
    </tr>
    <tr>
      <td width="30%" height="25">
        <p align="right">Regimen: </td>
      <td width="70%" height="25"><select size="1" name="regimen">
        <option value="" selected>Todos los Regimenes</option>
      
        <?

           
// Muestro todos los tipos de contactos para armar la lista desplegable
           
while($myrow mysql_fetch_array($result2))
            {
               echo 
"<option value=$myrow[id_regimen]>$myrow[desc_regimen]</option>";
            }
        
?>
        </select></td>
    </tr>
       <tr>
      <td width="30%" height="25">
        <p align="right">Habitaci&oacute;n: </td>
      <td width="70%" height="25"><select size="1" name="habitacion">
        <option value="" selected>Todas las Habitaciones</option>
      
        <?

           
// Muestro todos los tipos de contactos para armar la lista desplegable
           
while($myrow mysql_fetch_array($result3))
            {
               echo 
"<option value=$myrow[id_habitacion]>$myrow[desc_habitacion]</option>";
            }
        
?>
        </select></td>
    </tr>
    <tr>
      <td width="30%"></td>
      <td width="70%"><input type="submit" value="Buscar" name="envio"></td>
    </tr>
  </table>
</form>
<p align="left">&nbsp;</p>

<?
}

else

{
    
// Listamos los contactos
    
   // Armo la consulta
   
$sql "select * from hotel, categoria, ciudades
           where cod_cat = id_cat "
;
   
$sql.= "and cod_ciu = id_ciudad";



if (
$hotel != '')
    {
        
$sql.=" and nombre LIKE '%$hotel%'";
    }

   if (
$categoria != '')
    {
        
$sql.=" and cod_cat = $categoria ";
    }
    
    if (
$ciudad != '')
    {
        
$sql.=" and cod_ciu = $ciudad ";
    }

    if (
$habitacion != '')
    {
        
$sql.=" and cod_habitacion = $habitacion ";
    }

    if (
$regimen != '')
    {
        
$sql.=" and cod_regimen = $regimen ";
    }

   
$result mysql_query($sql$coneccion);
   
   if (
mysql_error())
    {
        echo 
"ERROR al buscar en la base de datos - "mysql_errno().":"mysql_error()."<br>";
    }
    
    
   
// Calculo la cantidad de resultados
   
   
$cant_resultados mysql_num_rows($result);
   
   if (
$cant_resultados >= 1)
    {
    
       
// Muestro los resultados

     
echo "Se han encontrado $cant_resultados resultados<br>";
     
?>
  

  <?
  
  
while($myrow mysql_fetch_array($result))
    {

      
// Armo link para editar
      
$info "$myrow[fotogr]";
      

    
?>

<table width="100%" height="0%" border="1" cellpadding="4" cellspacing="0" bordercolor="#FFFF00">
  <tr>
    <td height="90" rowspan="2" bgcolor="#669966"><div align="left"><? echo "<img src=$myrow[foto]>"?></div></td>
    <td width="72%" bgcolor="#669966"><p><b><? echo "Hotel $myrow[nombre]"?> </b>en la ciudad de<b> <? echo $myrow[desc_ciudad]; ?> </b>de categoria<b> <? echo $myrow[desc_cat]; ?></b></p>    </td>
    <td width="12%" bgcolor="#669966"><div align="center"><a href="<? echo $info?>">+ info </a></div></td>
  </tr>
<?
$cadena
"$myrow[observaciones]";
?>
  <tr>
    <td colspan="2" bgcolor="#FFFFFF"><? echo substr($cadena,0,150)?>...
    </td>
  </tr>
</table>


    <?
    
// end while
    
  
}
  else
  {
      echo 
"No se han encontrado resultados coincidentes<br>";
  }
    

    
    
}

include(
"pie.php");

?>
  #4 (permalink)  
Antiguo 12/01/2007, 04:53
Avatar de ortiz  
Fecha de Ingreso: septiembre-2004
Mensajes: 154
Antigüedad: 19 años, 6 meses
Puntos: 0
Pregunta Re: Buscador - PHP - MYSQL: duda

Gracias por tu respuesta!

He entendido bien tú codigo. Sin embargo, he de decir que en mi caso particular, la búsqueda es mucho más senzilla, o debería serlo ya que, sólo busco coincidencias entre un campo de una sóla tabla.

Y también decir que lo más me sorprende es que me haga las búsquedas bien desde el sql del phpmyadmin y luego, en el archivo php de la web, no me devuelva nada.

Pero seguiré haciendo pruebas y os diré como ha ido

Gracias!
__________________
Juegos de Estrategia para PC - Warphammer.net :: Estrategia sólo en castellano
  #5 (permalink)  
Antiguo 12/01/2007, 10:15
Avatar de ortiz  
Fecha de Ingreso: septiembre-2004
Mensajes: 154
Antigüedad: 19 años, 6 meses
Puntos: 0
Re: Buscador - PHP - MYSQL: duda

Bueno, pues ya está. Ya funciona más o menos. Como leí en el artículo de desarrollo web, utilizo LIKE con una palabra y MATCH-AGAINST para varias. Lo digo públicamente, no se que hace realmente MATCH-AGAINST

Recomiendo a todos que lean el artículo. En concreto este código sólo busca en un campo de una tabla:

Código PHP:
<?
//SE RECOGE LA VARIABLE
$busqueda $_POST['nombreabuscar'];

if(isset(
$busqueda)){
    if(
strlen($busqueda) == || $busqueda == ""){
        echo 
"<p>No se ha introducido ningún criterio de búsqueda.</p>";
    }else{
        
$palabras explode(" ",$busqueda);
        
$numero count($palabras);        
        if (
$numero == 1) {
            
$sentencia "SELECT * FROM juego WHERE nombre LIKE '%$busqueda%'";
            
$sql mysql_query($sentencia,$cbd);            
                while (
$row mysql_fetch_array($sql)){
                
$juego $row['nombre'];
                
$juego urlencode($juego);
?>
        CODIGO HTML
<?
                
}
            
mysql_close($cbd);    
        }else{
            
$sql mysql_query("SELECT * FROM juego WHERE MATCH(nombre) AGAINST ('$busqueda')",$cbd);
                while (
$row mysql_fetch_array($sql)){
                
$juego $row['nombre'];
                
$juego urlencode($juego);            
?>
        CODIGO HTML
<?
            
}
            
mysql_close($cbd);            
        }    
    }
}
?>
__________________
Juegos de Estrategia para PC - Warphammer.net :: Estrategia sólo en castellano
  #6 (permalink)  
Antiguo 15/01/2007, 00:40
 
Fecha de Ingreso: septiembre-2004
Ubicación: Lima
Mensajes: 141
Antigüedad: 19 años, 7 meses
Puntos: 0
Re: Buscador - PHP - MYSQL: duda

Saludos , he estado leyendo tu codigo y la verdad esta muy bueno es el mejor post que hace referencia a un problema en comun , yo recien empiezo en php por eso te pediria porfavor coloques el codigo de la tabla , gracias


Cita:
Iniciado por jimadri Ver Mensaje
TE DEJO UN CÓDIGO QUE ESTOY USANDO Y FUNCIONA:

Código PHP:
<?

include ("inicio.php");


// Listado de Contactos


// Armo una coneccion al servidor mysql
$coneccion mysql_connect($host_db$usuario_db$pass_db);
mysql_select_db($base_db$coneccion);



if (
$tipo == "buscar")
{

   
// Busco todos los tipos de contactos disponibles

   
$sql "select * from categoria order by desc_cat ";
   
$result mysql_query($sql$coneccion);

   
$sql "select * from ciudades order by desc_ciudad ";
   
$result1 mysql_query($sql$coneccion);

   
$sql "select * from regimen order by desc_regimen ";
   
$result2 mysql_query($sql$coneccion);

   
$sql "select * from habitacion order by desc_habitacion ";
   
$result3 mysql_query($sql$coneccion);
    
   
$sql "select * from hotel order by nombre ";
   
$result4 mysql_query($sql$coneccion);


  
// Armo el formulario de busqueda

?>


<form method="POST" action="lcontactos.php">
  <table border="0" width="100%">
    <tr bgcolor="#669966">
      <td width="100%" colspan="2"><b>Buscar Hotel</b></td>
    </tr>
    <tr>
      <td width="30%" height="25">
        <p align="right">Nombre del Hotel: </td>
      <td width="70%" height="25"><select size="1" name="hotel">
        <option value="" selected>Todos los Hoteles</option>
      
        <?

           
// Muestro todos los tipos de contactos para armar la lista desplegable
           
while($myrow mysql_fetch_array($result4))
            {
               echo 
"<option value=$myrow[id_hotel]>$myrow[nombre]</option>";
            }
        
?>
        </select></td>
    </tr>
    <tr>
      <td width="30%" height="25">
        <p align="right">Ciudad: </td>
      <td width="70%" height="25"><select size="1" name="ciudad">
        <option value="" selected>Todas las Ciudades</option>
      
        <?

           
// Muestro todos los tipos de contactos para armar la lista desplegable
           
while($myrow mysql_fetch_array($result1))
            {
               echo 
"<option value=$myrow[id_ciudad]>$myrow[desc_ciudad]</option>";
            }
        
?>
        </select></td>
    </tr>
    <tr>
      <td width="30%" height="25">
        <p align="right">Categoria: </td>
      <td width="70%" height="25"><select size="1" name="categoria">
        <option value="" selected>Todas las Categorias</option>
      
        <?

           
// Muestro todos los tipos de contactos para armar la lista desplegable
           
while($myrow mysql_fetch_array($result))
            {
               echo 
"<option value=$myrow[id_cat]>$myrow[desc_cat]</option>";
            }
        
?>
        </select></td>
    </tr>
    <tr>
      <td width="30%" height="25">
        <p align="right">Regimen: </td>
      <td width="70%" height="25"><select size="1" name="regimen">
        <option value="" selected>Todos los Regimenes</option>
      
        <?

           
// Muestro todos los tipos de contactos para armar la lista desplegable
           
while($myrow mysql_fetch_array($result2))
            {
               echo 
"<option value=$myrow[id_regimen]>$myrow[desc_regimen]</option>";
            }
        
?>
        </select></td>
    </tr>
       <tr>
      <td width="30%" height="25">
        <p align="right">Habitaci&oacute;n: </td>
      <td width="70%" height="25"><select size="1" name="habitacion">
        <option value="" selected>Todas las Habitaciones</option>
      
        <?

           
// Muestro todos los tipos de contactos para armar la lista desplegable
           
while($myrow mysql_fetch_array($result3))
            {
               echo 
"<option value=$myrow[id_habitacion]>$myrow[desc_habitacion]</option>";
            }
        
?>
        </select></td>
    </tr>
    <tr>
      <td width="30%"></td>
      <td width="70%"><input type="submit" value="Buscar" name="envio"></td>
    </tr>
  </table>
</form>
<p align="left">&nbsp;</p>

<?
}

else

{
    
// Listamos los contactos
    
   // Armo la consulta
   
$sql "select * from hotel, categoria, ciudades
           where cod_cat = id_cat "
;
   
$sql.= "and cod_ciu = id_ciudad";



if (
$hotel != '')
    {
        
$sql.=" and nombre LIKE '%$hotel%'";
    }

   if (
$categoria != '')
    {
        
$sql.=" and cod_cat = $categoria ";
    }
    
    if (
$ciudad != '')
    {
        
$sql.=" and cod_ciu = $ciudad ";
    }

    if (
$habitacion != '')
    {
        
$sql.=" and cod_habitacion = $habitacion ";
    }

    if (
$regimen != '')
    {
        
$sql.=" and cod_regimen = $regimen ";
    }

   
$result mysql_query($sql$coneccion);
   
   if (
mysql_error())
    {
        echo 
"ERROR al buscar en la base de datos - "mysql_errno().":"mysql_error()."<br>";
    }
    
    
   
// Calculo la cantidad de resultados
   
   
$cant_resultados mysql_num_rows($result);
   
   if (
$cant_resultados >= 1)
    {
    
       
// Muestro los resultados

     
echo "Se han encontrado $cant_resultados resultados<br>";
     
?>
  

  <?
  
  
while($myrow mysql_fetch_array($result))
    {

      
// Armo link para editar
      
$info "$myrow[fotogr]";
      

    
?>

<table width="100%" height="0%" border="1" cellpadding="4" cellspacing="0" bordercolor="#FFFF00">
  <tr>
    <td height="90" rowspan="2" bgcolor="#669966"><div align="left"><? echo "<img src=$myrow[foto]>"?></div></td>
    <td width="72%" bgcolor="#669966"><p><b><? echo "Hotel $myrow[nombre]"?> </b>en la ciudad de<b> <? echo $myrow[desc_ciudad]; ?> </b>de categoria<b> <? echo $myrow[desc_cat]; ?></b></p>    </td>
    <td width="12%" bgcolor="#669966"><div align="center"><a href="<? echo $info?>">+ info </a></div></td>
  </tr>
<?
$cadena
"$myrow[observaciones]";
?>
  <tr>
    <td colspan="2" bgcolor="#FFFFFF"><? echo substr($cadena,0,150)?>...
    </td>
  </tr>
</table>


    <?
    
// end while
    
  
}
  else
  {
      echo 
"No se han encontrado resultados coincidentes<br>";
  }
    

    
    
}

include(
"pie.php");

?>
__________________
"Es mejor arder del todo ke consumirse poco a poco"
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 16:50.