Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] buscador no muestra datos

Estas en el tema de buscador no muestra datos en el foro de PHP en Foros del Web. Buenas compañeros, tengo unos problemas al implementar un buscador ya que no me busca nada, espero que me ayuden: Tengo 3 campos id,nombre,costo el cual ...
  #1 (permalink)  
Antiguo 06/05/2013, 15:26
 
Fecha de Ingreso: septiembre-2010
Mensajes: 64
Antigüedad: 13 años, 7 meses
Puntos: 5
Pregunta buscador no muestra datos

Buenas compañeros, tengo unos problemas al implementar un buscador ya que no me busca nada, espero que me ayuden:
Tengo 3 campos id,nombre,costo el cual me debe buscar por cualquier de los datos ingresados, pero no me busca nada
Buscar.html
Código HTML:
<html>
<body>
<form id="form1" name="form1" method="POST" action="buscador.php">
            <p>
              <label for="cliente">Numero Id:</label>
              <input type="text" name="id" id="id" />
              <label for="nombre"><br />
                Nombre Nombre:</label>
              <input type="text" name="nombre" id="nombre" />
              <label for="agente"><br />
                Nombre Costo:</label>
              <input type="text" name="costo" id="costo" />
              <label for="zona"><br />
              </label>
            </p>
            <p>
              <input type="submit" name="buscar" id="buscar" value="Buscar" />
            </p>
          </form>
</body>
</html> 
Buscador.php
Código PHP:
<?php 

$conectar
=mysql_connect("localhost","root","vertrigo");
$selecciona=mysql_select_db("ferreteria");

$id$_POST['id'];
$nombre$_POST['nombre'];
$costo$_POST['costo'];


$sql='Select id,nombre,costo from items';

if(
$_POST['id']!=""){

$sql=' and id like "%'.$_POST['id'].'%"';

}

if(
$_POST['nombre']!=""){

$sql=' and nombre like "%'.$_POST['nombre'].'%"';

}
if(
$_POST['costo']!=""){

$sql=' and costo like "%'.$_POST['costo'].'%"';

}


$ejecuta=mysql_query($sql);


while(
$filas=mysql_fetch_array($ejecuta)){
print 
$filas ['id'].'<br/>';
print 
$filas ['nombre'].'<br/>';
print 
$filas ['costo'].'<br/>';

}


?>
Si no pongo ningun dato en buscar me muestra todos los datos, pero si ingreso ya con algun requerimiento a buscar no me muestra nada al contrario me sale un error
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in E:\Archivos de programa\VertrigoServ\www\ferreteriah\buscador.php on line 34
  #2 (permalink)  
Antiguo 06/05/2013, 15:32
Avatar de Lobito14  
Fecha de Ingreso: abril-2010
Mensajes: 222
Antigüedad: 14 años
Puntos: 17
Respuesta: buscador no muestra datos

Pues si quieres que te encuentre registros por CUALQUIERA de los tres campos que le llegan, tendrás que usar un OR en vez de un AND, ya que con el AND solo vas a encontrar el registro que cumpla los tres requisitos.

A parte, creo que te falta la palabra clave WHERE, para que la sentencia quede del estilo:

Código SQL:
Ver original
  1. SELECT id,nombre,costo FROM items [B]WHERE[/B]....

Así a primera vista veo eso, comprueba y nos cuentas.

Saludos.
  #3 (permalink)  
Antiguo 06/05/2013, 15:32
 
Fecha de Ingreso: agosto-2011
Ubicación: Santo Domingo
Mensajes: 487
Antigüedad: 12 años, 8 meses
Puntos: 31
Respuesta: buscador no muestra datos

Estas consultando incorrectamente amigo..

Prueba
Código HTML:
Ver original
  1. if($_POST['id']!=""){
  2.  
  3. $sql='Select id,nombre,costo from items WHERE id like "%'.$_POST['id'].'%"';
  4.  
  5. }
  6.  
  7. if($_POST['nombre']!=""){
  8.  
  9. $sql=' Select id,nombre,costo from items WHERE nombre like "%'.$_POST['nombre'].'%"';
  10.  
  11. }
  12. if($_POST['costo']!=""){
  13.  
  14. $sql='Select id,nombre,costo from items WHERE costo like "%'.$_POST['costo'].'%"';
  15.  
  16. }
__________________
El talento se educa en la KARMA y el carácter en la tempestad.
Gabriel De Los Santos
  #4 (permalink)  
Antiguo 06/05/2013, 15:42
 
Fecha de Ingreso: septiembre-2010
Mensajes: 64
Antigüedad: 13 años, 7 meses
Puntos: 5
Respuesta: buscador no muestra datos

Gracias compañero gldelossantos me sirvio, aunque ahora se me presento una duda por ejemplo si quiero buscar un item por precio ejemplo 45, el buscador me muestra todos los productos que son de 45 pero tambien los que terminan en 45 por ejemplo alicate 145.

Como tendria que hacer para que el buscador me muestre con el requerimiento buscado y no similares??'

Talvez como dice el compañero Lobito14???, pero no me ubico de como implementar el and, or en la consulta
  #5 (permalink)  
Antiguo 06/05/2013, 15:53
Avatar de bulter  
Fecha de Ingreso: enero-2008
Mensajes: 137
Antigüedad: 16 años, 4 meses
Puntos: 20
Respuesta: buscador no muestra datos

hans2488 En tu codigo en cada if lo que haces es predefinir la variable $sql

Cita:
if($_POST['costo']!=""){

$sql=' and costo like "%'.$_POST['costo'].'%"';

}
Aqui le das valor, no lo editas. Ademas te falta el WHERE.

gldelossantos Sabes lo que son DRY , WET y WETTT ?

Código PHP:
function addToWhere(array $data)
{
    
$result = array();
    
    foreach(
$data as $sqlColumn => $sqlValue)
    {
        if(!empty(
$sqlValue) && !empty($sqlColumn))
        {
            
array_push($result$sqlColumn " LIKE %'" $sqlValue "'%");
        }
    }
    
    return 
$result;
}

$sqlQuery "SELECT id, nombre, costo FROM items";

$where addToWhere(array("id"     => $_POST['id'],
                          
"nombre" => $_POST['nombre'],
                          
"costo"  => $_POST['costo']));

if(
count($where) > 0)
{
    
$sqlQuery .= " WHERE " implode(" OR "$where);
}

echo 
$sqlQuery
Asi es un poco mejor. No es perfecto, pero es mejor.
  #6 (permalink)  
Antiguo 06/05/2013, 15:55
Avatar de Lobito14  
Fecha de Ingreso: abril-2010
Mensajes: 222
Antigüedad: 14 años
Puntos: 17
Respuesta: buscador no muestra datos

Si quieres que te muestre los registros que tengan el valor exacto que pones en el campo, deberías usar el = en vez de like.
  #7 (permalink)  
Antiguo 06/05/2013, 16:03
 
Fecha de Ingreso: septiembre-2010
Mensajes: 64
Antigüedad: 13 años, 7 meses
Puntos: 5
Respuesta: buscador no muestra datos

bueno hice lo q recomendaste lobito14, pero no me muestra nada
sql='Select id,nombre,costo from items WHERE id = "%'.$_POST['id'].'%"';
  #8 (permalink)  
Antiguo 06/05/2013, 16:08
Avatar de Lobito14  
Fecha de Ingreso: abril-2010
Mensajes: 222
Antigüedad: 14 años
Puntos: 17
Respuesta: buscador no muestra datos

Si el campo id es número, que supongo que si, la consulta no debe meter entre comillas ese campo en la condición.

sql='Select id,nombre,costo from items WHERE id = '.$_POST['id'];

También he quitado los %, ya que es un carácter comodín y te va a mostrar también otros registros que contengan en algún lugar del campo el id que estás buscando.

Prueba con eso y nos cuentas.
  #9 (permalink)  
Antiguo 06/05/2013, 16:09
Avatar de bulter  
Fecha de Ingreso: enero-2008
Mensajes: 137
Antigüedad: 16 años, 4 meses
Puntos: 20
Respuesta: buscador no muestra datos

Cita:
id = "%'.$_POST['id'].'%"';
?

Código:
$sql = "Select id,nombre,costo from items WHERE id = " . (int)$_POST['id'];

Última edición por bulter; 06/05/2013 a las 16:14
  #10 (permalink)  
Antiguo 06/05/2013, 17:00
 
Fecha de Ingreso: septiembre-2010
Mensajes: 64
Antigüedad: 13 años, 7 meses
Puntos: 5
Respuesta: buscador no muestra datos

gracias compañeros por sus respuestas, me sirvio de mucho
  #11 (permalink)  
Antiguo 06/05/2013, 20:57
 
Fecha de Ingreso: septiembre-2010
Mensajes: 64
Antigüedad: 13 años, 7 meses
Puntos: 5
Pregunta Busqueda por varios campos no muestra resultados

Buenas amigos tengo un buscador pero el problema es que me busca de cualquier campo, tengo 3 campos id, nombre,costo. Si quiero buscar un item segun el nombre alicate me muestra todos los q tienen ese nombre, pero si quiero buscar alicate con precio de 45, el buscador solo me muestra todos los producto con ese precio pero sin el item alicate, y si busco por id lo mismo.

En pocas palabras el buscador funciona bien si solo busco por un campo, ya sea id, nombre o costo, pero si quiero buscar usando los 3 campos me muestra cosas diferentes.
buscar.html
Código HTML:
<html>
<body>
<form id="form1" name="form1" method="POST" action="buscador.php">
            <p>
              <label for="cliente">Numero Id:</label>
              <input type="text" name="id" id="id" />
              <label for="nombre"><br />
                Nombre Nombre:</label>
              <input type="text" name="nombre" id="nombre" />
              <label for="agente"><br />
                Nombre Costo:</label>
              <input type="text" name="costo" id="costo" />
              <label for="zona"><br />
              </label>
            </p>
            <p>
              <input type="submit" name="buscar" id="buscar" value="Buscar" />
            </p>
          </form>
</body>
</html> 
Buscador.php
Código PHP:
<?php 

$conectar
=mysql_connect("localhost","root","vertrigo");
$selecciona=mysql_select_db("ferreteria");

$id$_POST['id'];
$nombre$_POST['nombre'];
$costo$_POST['costo'];


$sql='Select id,nombre,costo from items';

if(
$_POST['id']!=""){ 
 
//$sql='Select id,nombre,costo from items WHERE id like "%'.$_POST['id'].'%"'; 
$sql='Select id,nombre,costo from items WHERE id = '.$_POST['id'];
//$sql = "Select id,nombre,costo from items WHERE id = " . (int)$_POST['id'];
 

 
if(
$_POST['nombre']!=""){ 
 
$sql=' Select id,nombre,costo from items WHERE nombre like "%'.$_POST['nombre'].'%"'
//$sql='Select id,nombre,costo from items WHERE nombre = '.$_POST['nombre'];

if(
$_POST['costo']!=""){ 
 
//$sql='Select id,nombre,costo from items WHERE costo like "%'.$_POST['costo'].'%"'; 
$sql='Select id,nombre,costo from items WHERE costo = '.$_POST['costo'];
}


$ejecuta=mysql_query($sql);


while(
$filas=mysql_fetch_array($ejecuta)){
print 
$filas ['id'].'<br/>';
print 
$filas ['nombre'].'<br/>';
print 
$filas ['costo'].'<br/>';

}

?>
Otra ayuda mas porfavor como logro poner un mensaje que me salga que "no se encontraron ningun dato" despues d ela busqueda, o si las cajas estan vacias me muestre "datos vacios"
  #12 (permalink)  
Antiguo 06/05/2013, 21:53
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 1 mes
Puntos: 406
Respuesta: Busqueda por varios campos no muestra resultados

Porque duplicas temas?, tienes otro tema el cual hasta ya lo diste por solucionado pero es lo mismo que has publicado aquí...
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #13 (permalink)  
Antiguo 06/05/2013, 22:22
 
Fecha de Ingreso: septiembre-2010
Mensajes: 64
Antigüedad: 13 años, 7 meses
Puntos: 5
Respuesta: Busqueda por varios campos no muestra resultados

No lo duplico, seria algo estupido por mi parte volver a publicar un tema que ya esta solucionado no crees???, lo que pasa q le di como solucionado el anterior tema por q hice la prueba del buscador con un solo campo pensado que iba a ser igual si usaba los otros dos campos restantes, pero no es asi, el buscador no realiza la tarea usando los tres campos al mismo tiempo, ese es mi problema
  #14 (permalink)  
Antiguo 06/05/2013, 22:29
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 1 mes
Puntos: 406
Respuesta: Busqueda por varios campos no muestra resultados

Pues como vas a buscar por los 3 campos si en cada opción generas un SQL por separado, peor aun, sobre escribes la variable $sql, por lo cual los valores anteriores se pierden, en todo caso deberías primero comprobar en cuantos campos se van a buscar y de hay generar el SQL...

Código PHP:
Ver original
  1. <?php
  2. $sql = 'SELECT * FROM mi tabla WHERE ';
  3. $filtroAgregado = false;
  4. if (isset($_POST['campo1'])) {
  5.      $sql .= ' campo1 = "'.$_POST['campo1'].'" ';
  6.      $filtroAgregado = true;
  7. }
  8.  
  9. if (isset($_POST['campo2'])) {
  10.      $sql .= $filtroAgregado ? ' OR ' : '';
  11.      $sql .= ' campo2 LIKE "%'.$_POST['campo2'].'%" ';
  12.      $filtroAgregado = true;
  13. }
  14.  
  15. if (isset($_POST['campo3'])) {
  16.      $sql .= $filtroAgregado ? ' OR ' : '';
  17.      $sql .= ' campo3 = "'.$_POST['campo3'].'" ';
  18.      $filtroAgregado = true;
  19. }
  20.  
  21. echo $sql;

PD se me olvido comprobar si se agrego ya un filtro, es algo rustico y nada limpio, pero es solo para dar una idea
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #15 (permalink)  
Antiguo 07/05/2013, 01:08
 
Fecha de Ingreso: septiembre-2010
Mensajes: 64
Antigüedad: 13 años, 7 meses
Puntos: 5
Respuesta: Busqueda por varios campos no muestra resultados

Amigo Nemutagk gracias por tu respuesta pero se me hace algo complejo entenderlo, talvez se este arrancando los pelos al leer este comentario diciendo "pero si esta mas claro que el agua" pero no tengo mucho nivel en programación, pero pude realizar una parte, el cual ya me muestra los resultados parecidos por decir si pongo 1,alicate,45 y el buscador me muestra q tengo ese producto con esas caracteristicas (cosa q antes q no me mostraba)
Código PHP:
<?php 
include("conexion.php");
$id$_POST[id];
$nombre$_POST[nombre];
$costo$_POST[costo];


$cadena "SELECT id,nombre,costo FROM items WHERE 
id like '$id%' and 
nombre like '%$nombre%' and  
costo like '$costo%' "
;


$query mysql_query($cadena); 
while (
$resultado mysql_fetch_array($query)) 

echo 
"id ".$resultado[id]."<br>"
echo 
"nombre ".$resultado[nombre]."<br>"
echo 
"costo ".$resultado[costo]."<br>"
echo 
"<hr><br>"

?>
Pero ahora tengo un problema como el id es unico y quiero q me muestre si quiero buscar un item con el id 1 q me muestre los items con el id 1, pero me muestra 1,11,21 es decir los que tienen uno y yo quiero la busqueda exacta de 1.

Segun entiendo el valor
Código:
id like '$id%' and
con el comodin % es por lo q me muestra las coincidencias , pero si pongo
Código:
id like '$id' and
o
Código:
id like = $id and
ya no funciona el buscador. ¿Como deberia ponerlo?
  #16 (permalink)  
Antiguo 07/05/2013, 05:11
 
Fecha de Ingreso: noviembre-2011
Mensajes: 117
Antigüedad: 12 años, 5 meses
Puntos: 2
Respuesta: Busqueda por varios campos no muestra resultados

1º) no estás comprobando qué filtros estás recibiendo como te dijeron antes, estás poniendo la consulta a lo bruto, tienes que componerla.

2º)
Código PHP:
like 
.... o "like" o "=" no los 2 juntos

3º)
concatena como te pusieron, no metas las variables directamente dentro del string...
Código PHP:
' campo2 LIKE "%'.$_POST['campo2'].'%" '
  #17 (permalink)  
Antiguo 07/05/2013, 13:15
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 1 mes
Puntos: 406
Respuesta: Busqueda por varios campos no muestra resultados

Cita:
Iniciado por hans2488 Ver Mensaje
Amigo Nemutagk gracias por tu respuesta pero se me hace algo complejo entenderlo, talvez se este arrancando los pelos al leer este comentario diciendo "pero si esta mas claro que el agua" pero no tengo mucho nivel en programación...
Al menos intentaste hacer algo como lo que te puse?, ese código que has puesto es casi lo mismo que el anterior, estas usando los 3 parámetros forzosamente, por lo cual obtendrás resultados inesperados, ve haciendo pruebas, parámetro por parámetro, y antes de usarlo con mysql primero ve como se genera el sql imprimiéndolo, cuando entiendas la logica para construirlo lo demás será sumamente facil
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)

Etiquetas: buscador, busqueda, campos, html, muestra, mysql, resultados, select, sql
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 04:22.