Foros del Web » Programando para Internet » PHP »

Buscador ERROR mysql_fetch_array()

Estas en el tema de Buscador ERROR mysql_fetch_array() en el foro de PHP en Foros del Web. Buenas, aca tengo un buscador que arme pero nose porque motivo me da el siguiente error: Warning: mysql_num_rows(): supplied argument is not a valid MySQL ...
  #1 (permalink)  
Antiguo 05/10/2006, 16:50
 
Fecha de Ingreso: agosto-2006
Ubicación: Argentina, Bahia Blanca
Mensajes: 172
Antigüedad: 17 años, 8 meses
Puntos: 0
Pregunta Buscador ERROR mysql_fetch_array()

Buenas, aca tengo un buscador que arme pero nose porque motivo me da el siguiente error:
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/city45/public_html/bahiaagenciabuscar.php on line 291
En la siguiente linea
Código PHP:
<? $num_resultados mysql_num_rows($resultado); ?>
Pero no veo error, alguno que me de una mano.
Muchas gracias
Código PHP:
<?
  
include('bahiaclasificadosconexion.php');
  
$MARCANOMBRE $_POST['MARCANOMBRE'];
  
$modelos $_POST['modelos'];
  
$ano $_POST['ano'];
  
$combustible $_POST['combustible'];
  
$precio $_POST['precio'];
  
$MARCANOMBRE addslashes($MARCANOMBRE);
  
$modelos addslashes($modelos);
  
$ano addslashes($ano);
  
$combustible addslashes($combustible);
  
$precio addslashes($precio);
    
if(
$ano == "" || $combustible == "" || $precio == "") {
    
$consulta "select * from avisos_agencias where avisos_agencias.modelos like '%".$modelos."%'";
}
if(
$ano != "") {
    
$consulta .= " AND avisos_agencias.ano like '%".$ano."%' ";
}
if(
$combustible != "") {
     
$consulta .= " AND avisos_agencias.combustible like '%".$combustible."%'";
}
if(
$precio != "") {
     
$consulta .= " AND avisos_agencias.precio like '%".$precio."%'";
}
  
$resultado mysql_query($consulta);
  
$num_resultados mysql_num_rows($resultado);

  echo 
"<p><strong>Número de avisos encontrados: ".$num_resultados."</strong></p>";

  for (
$i=0$i <$num_resultados$i++)
  {
    
$row mysql_fetch_array($resultado);
     echo 
"<p><strong>".($i+1).". Tipo: ";
     echo 
stripslashes($row["tipo"]);
     echo 
"</strong><br>Marca: ";
     echo 
stripslashes($row["marca"]);
     echo 
"<br>Modelo: ";
     echo 
stripslashes($row["modelo"]);
     echo 
"<br>Año: ";
     echo 
stripslashes($row["ano"]);
     echo 
"<br>Combustible: ";
     echo 
stripslashes($row["combustible"]);
     echo 
"<br>Kilometros: ";
     echo 
stripslashes($row["kilometros"]);
     echo 
"<br>Color: ";
     echo 
stripslashes($row["color"]);
     echo 
"<br>Precio: ";
     echo 
stripslashes($row["precio"]);
     echo 
"<br>Aviso: ";
     echo 
stripslashes($row["aviso"]);
     echo 
"<br>Agencia: ";
     echo 
stripslashes($row["nombre_agencia"]);
     echo 
"<p><a href=bahiaagenciasdetalles.php?id_aviso_agencia=$row[id_aviso_agencia]>Ver AVISO</a> \n";
     echo 
"</p>";
  }

?>
  #2 (permalink)  
Antiguo 05/10/2006, 16:59
Avatar de mauled  
Fecha de Ingreso: marzo-2005
Ubicación: Cd. de México.
Mensajes: 3.001
Antigüedad: 19 años, 1 mes
Puntos: 33
Pregunta

Pues este tipo de error sucede cuando no obtuvo ningun resultado o bien existe algun error en la consulta.

¿Ya trataste imprimiendo la consulta y ejecuntandola directamente en la bd?

Saludillos.
  #3 (permalink)  
Antiguo 05/10/2006, 17:15
 
Fecha de Ingreso: agosto-2006
Ubicación: Argentina, Bahia Blanca
Mensajes: 172
Antigüedad: 17 años, 8 meses
Puntos: 0
joya!!, Vamos carajo!

mauled Espectacular lo tuyo!! ya encontre el error, como un zapallo habia puesto una S de mas en visos_agencias.modelos.
Ahora hago una consulta mas como puedo hacer el select si quiere establecer para el precio un campo inicial y otro final. Es decir que el usuario coloque un precio desde y otro hasta y me de los resultados comprendidos en esa tanda de numeros.
Muchas,pero muchas gracias.
  #4 (permalink)  
Antiguo 06/10/2006, 15:35
 
Fecha de Ingreso: agosto-2006
Ubicación: Argentina, Bahia Blanca
Mensajes: 172
Antigüedad: 17 años, 8 meses
Puntos: 0
Pregunta buscador

Buenas, hago la siguiente pregunta, como puedo realizar un select, para el buscador, donde apartir de 2 campos numericos de un formulario pueda realizar una consulta entre una tanda de numeros. Es decir, un desde hasta.
Por Ej. Buscar desde 1000 hasta 1200.
Muchas gracias
  #5 (permalink)  
Antiguo 06/10/2006, 16:16
Avatar de eits  
Fecha de Ingreso: junio-2005
Ubicación: valladolid, yucatán
Mensajes: 1.655
Antigüedad: 18 años, 10 meses
Puntos: 88
puedes utilizar la función BETWEEN

ejemplo:
SELECT * FROM tabla
WHERE numero BETWEEN 1000 AND 1200
donde:
numero es el nombre del campo de la tabla donde se buscarán los números.

espero te sirva.
saludos.
__________________
El amor es la locura mas lucida que tiene el hombre.- Andres Henestrosa
la tristeza no existe, solo es... la ausencia de la felicidad.
  #6 (permalink)  
Antiguo 08/10/2006, 21:00
 
Fecha de Ingreso: agosto-2006
Ubicación: Argentina, Bahia Blanca
Mensajes: 172
Antigüedad: 17 años, 8 meses
Puntos: 0
De acuerdo sigo

Bueno, lamentablemente no logro detrabar el tema del buscador.
Tengo el siguiente formulario donde el usuario filtra la informacion a buscar.

buscar.php

Código HTML:
<form id="form1" name="form1" action="bahiaagenciabuscar.php" method="post">
Modelo
<select name="marca" size="1" id="Marca">
<option selected="selected">Seleccione modelo</option>
<option value="Chevrolet">Chevrolet</option>
<option value="Ford">Ford</option>
<option value="Toyota">Toyota</option>
</select>
Combustible:
<select name="combustible" size="1" id="Combustible">
<option selected="selected">Seleccione Combustible</option>
<option value="Nafta">Nafta</option>
<option value="Diesel">Diesel</option>
<option value="GNC">GNC</option>
<option value="Todos">Todos</option>
</select>
Año: <input name="ano" type="text" id="ano" size="10">
Precio:
desde <input name="desde" type="text" id="desde" size="10">
hasta <input name="hasta" type="text" id="hasta" size="10">                    
</form> 
bahiaagenciabuscar.php

Código PHP:
<?
  
include('bahiaclasificadosconexion.php');
  
$marca $_POST['marca' ];
  
$ano $_POST['ano'];
  
$combustible $_POST['combustible'];
  
$desde $_POST['desde'];
  
$hasta $_POST['hasta'];
  
$marca addslashes($marca );
  
$ano addslashes($ano);
  
$combustible addslashes($combustible);
  
$desde addslashes($desde);
  
$hasta addslashes($hasta);
    
if(
$ano == "" || $combustible ==  "" || $desde == "" || $hasta == "") {
    
$consulta "select * from avisos_agencias where avisos_agencias.modelos like '%"$modelos."%'";
}
if(
$ano != "") {
    
$consulta .= " AND avisos_agencias.ano like '%".$ano ."%' ";
}
if(
$combustible != "") {
     
$consulta .= " AND avisos_agencias.combustible like '%"$combustible."%'";
}
if(
$desde != "" || $hasta !) {
     
$consulta .= " AND avisos_agencias.precio BETWEEN like '%".$desde."%' AND like '%".$hasta."%'";
}
  
  
$resultado mysql_query($consulta);
  
$num_resultados mysql_num_rows($resultado );

  echo 
"<p><strong>Número de avisos encontrados: ".$num_resultados"</strong></p>";

  for (
$i=0$i $num_resultados$i++)
  {
    
$row mysql_fetch_array($resultado);
     echo 
"<p><strong>".($i+).". Tipo: ";
     echo 
stripslashes($row["tipo" ]);
     echo 
"</strong><br>Marca: ";
     echo 
stripslashes($row["marca" ]);
     echo 
"<br>Año: ";
     echo 
stripslashes($row["ano" ]);
     echo 
"<br>Combustible: ";
     echo 
stripslashes($row["combustible" ]);
     echo 
"<br>Kilometros: ";
     echo 
stripslashes($row["kilometros" ]);
     echo 
"<br>Color: ";
     echo 
stripslashes($row["color" ]);
     echo 
"<br>Precio: ";
     echo 
stripslashes($row["precio" ]);
     echo 
"<br>Aviso: ";
     echo 
stripslashes($row["aviso" ]);
     echo 
"<br>Agencia: ";
     echo 
stripslashes($row["nombre_agencia" ]);
     echo 
"<p><a href=bahiaagenciasdetalles.php?id_aviso_agencia=$row[id_aviso_agencia]>Ver AVISO</a> \n";
     echo 
"</p>";
  }

?>
El problema que tengo es que unicamente me busca cuando seteo un modelo y combustible.
Todo las demas convinaciones, nada.

Muchas gracias.

Última edición por Spychaser; 09/10/2006 a las 06:07
  #7 (permalink)  
Antiguo 09/10/2006, 10:49
 
Fecha de Ingreso: agosto-2006
Ubicación: Argentina, Bahia Blanca
Mensajes: 172
Antigüedad: 17 años, 8 meses
Puntos: 0
De acuerdo una mano.

Una mano, otro ejemplo, un tutorial, algo¿?
Saludos
  #8 (permalink)  
Antiguo 09/10/2006, 11:12
Avatar de mauled  
Fecha de Ingreso: marzo-2005
Ubicación: Cd. de México.
Mensajes: 3.001
Antigüedad: 19 años, 1 mes
Puntos: 33
¿A que te refieries a las otras combinaciones? ¿A año y precio -desde ,hasta-?

De serlo ¿ya verficaste imprimiendo las consulta y antes que nada de tus variables $desde y hasta?

Saludillos.
  #9 (permalink)  
Antiguo 10/10/2006, 08:50
Avatar de eits  
Fecha de Ingreso: junio-2005
Ubicación: valladolid, yucatán
Mensajes: 1.655
Antigüedad: 18 años, 10 meses
Puntos: 88
siempre se cumple alguno de estos
Código PHP:
if($ano == "" || $combustible ==  "" || $desde == "" || $hasta == "") {
    
$consulta "select * from avisos_agencias where avisos_agencias.modelos like '%"$modelos."%'"
es decir $ano, $combustible, $desde, $hasta no pueden tener valor todos al mismo tiempo?,que pasá si todos tienen valor? simplemente la consulta nunca comenzaria.
Otra cosa es que $modelos nunca veo que se le asigne ningún valor.
puede que por ahi este tu error
saludos.
__________________
El amor es la locura mas lucida que tiene el hombre.- Andres Henestrosa
la tristeza no existe, solo es... la ausencia de la felicidad.
  #10 (permalink)  
Antiguo 10/10/2006, 10:25
 
Fecha de Ingreso: agosto-2006
Ubicación: Argentina, Bahia Blanca
Mensajes: 172
Antigüedad: 17 años, 8 meses
Puntos: 0
De acuerdo

mauled cuando digo otras combianciones me refiero a que el usuario puede seleccionar todos los datos del formulario y dejar algunos sin seleccionar.
Probe las consultas directas y andan. EL problema lo tengo como dice eits en la logica del script. Es decir en como se van ejecutando.
Necesito que cada parametro de busca sea independiente, por ejemplo, que busque unicamente marcas, o que busque unicamente combustible>nafta, o que busque en marcas y nafta (juntos) y asi con todas las posibilidades. Ya que el filtrado es a gusto del usuario y puede elegir todo, como nada, o como alguna de las opciones presentes.
Es por eso que no doy con una manera agil de realizar esta busqueda, de que modo se peude hacer.

Muchas gracias.
  #11 (permalink)  
Antiguo 11/10/2006, 11:08
 
Fecha de Ingreso: agosto-2006
Ubicación: Argentina, Bahia Blanca
Mensajes: 172
Antigüedad: 17 años, 8 meses
Puntos: 0
De acuerdo alguna idea.

Buenas, sigo igual, alguno me da una mano.
  #12 (permalink)  
Antiguo 11/10/2006, 17:56
Avatar de eits  
Fecha de Ingreso: junio-2005
Ubicación: valladolid, yucatán
Mensajes: 1.655
Antigüedad: 18 años, 10 meses
Puntos: 88
bueno, lamento que no pueda ayudarte como se debe en este momento(por mi trabajo) pero te doy una idea.
empieza por colocar el principio tu consulta de primero y depués los if que iran completando el código, puedes utilizar los if y el sprintf().

si no lo logras apenas tenga un chancesito te ayudo.
saludos.
__________________
El amor es la locura mas lucida que tiene el hombre.- Andres Henestrosa
la tristeza no existe, solo es... la ausencia de la felicidad.
  #13 (permalink)  
Antiguo 11/10/2006, 22:39
Avatar de deet  
Fecha de Ingreso: mayo-2005
Ubicación: Córdoba - Argentina
Mensajes: 269
Antigüedad: 19 años
Puntos: 1
fijate si los selects que no le has puesto el parámetro value="" te devuelven algo, para ello puedes sacar en pantalla todas las variables del metodo post con:

print_r($_POST);

esto te muestra un array con todas las variables recibidas mediante el método post, esto hago yo cuando es necesario y me es de gran utilidad, también te recomentaría que saques en pantalla la consulta sql:

echo $consulta;

espero que te sirva.
  #14 (permalink)  
Antiguo 12/10/2006, 08:12
 
Fecha de Ingreso: agosto-2006
Ubicación: Argentina, Bahia Blanca
Mensajes: 172
Antigüedad: 17 años, 8 meses
Puntos: 0
De acuerdo pregunta

Buenas, estoy intentando avanzar gracias a sus post!! verdaderamente se los agradesco... les publico y muestro un poco lo que hice.
Pongo paso a paso las modificaciones y si una no les parece adecuada me chiflan:

1- Hice un if, que contiene a toda la consulta que se encarga de chekear si el usuario no seteo ningun filtro, entoces busca en toda la tabla.
2- No utilizo mas el like, ya que lo que busca el usuario es seteado por medio de select, por lo tanto si o si esta en la tabla, ya que cuando se ingreso se hizo con el mismo select.
3- Hago un chekeo por medio de un if($MARCANOMBRE != "") para revisar si el campo fue filtrado. Creo que ese IF significa que Si marcanombre no esta vacio entonces realizar tal cosa.
4- Nose como hacer para que halla una consulta general y apartir de lo que filtre el usuario se sumen mas WHERES.

Aca va el codigo.
Muchas gracias por su ayuda.
Código PHP:
<?
  
include('bahiaclasificadosconexion.php');
  
$MARCANOMBRE $_POST['MARCANOMBRE'];
  
$ano $_POST['ano'];
  
$combustible $_POST['combustible'];
  
$desde $_POST['desde'];
  
$hasta $_POST['hasta'];
  
$MARCANOMBREaddslashes($MARCANOMBRE);
  
$ano addslashes($ano);
  
$combustible addslashes($combustible);
  
$desde addslashes($desde);
  
$hasta addslashes($hasta);
            
    if(
$MARCANOMBRE == "" || $combustible ==  "" || $desde == "" || $hasta == ""
    {
     
$consulta "select * from avisos_agencias";
    }
    else
    {
    
$consulta "select * from avisos_agencias where"// aca esta mal 
    
if($MARCANOMBRE != "") {
    
$consulta .= " AND avisos_agencias.marca='$MARCANOMBRE' ";
    }
    if(
$ano != "") {
    
$consulta .= " AND avisos_agencias.ano='$ano' ";
    }
    if(
$combustible != "") {
     
$consulta .= " AND avisos_agencias.combustible='$combustible'";
    }
    if(
$desde != "" || $hasta != "") {
     
$consulta .= " AND avisos_agencias.precio BETWEEN '$desde' AND 'hasta'";
    }
    }
  
$resultado mysql_query($consulta);
  
$num_resultados mysql_num_rows($resultado );

  echo 
"<p><strong>Número de avisos encontrados: ".$num_resultados"</strong></p>";

  for (
$i=0$i $num_resultados$i++)
  {
    
$row mysql_fetch_array($resultado);
     echo 
"<p><strong>".($i+).". Tipo: ";
     echo 
stripslashes($row["tipo" ]);
     echo 
"</strong><br>Marca: ";
     echo 
stripslashes($row["marca" ]);
     echo 
"<br>Modelo: ";
     echo 
stripslashes($row["modelo" ]);
     echo 
"<br>Año: ";
     echo 
stripslashes($row["ano" ]);
     echo 
"<br>Combustible: ";
     echo 
stripslashes($row["combustible" ]);
     echo 
"<br>Kilometros: ";
     echo 
stripslashes($row["kilometros" ]);
     echo 
"<br>Color: ";
     echo 
stripslashes($row["color" ]);
     echo 
"<br>Precio: ";
     echo 
stripslashes($row["precio" ]);
     echo 
"<br>Aviso: ";
     echo 
stripslashes($row["aviso" ]);
     echo 
"<br>Agencia: ";
     echo 
stripslashes($row["nombre_agencia" ]);
     echo 
"<p><a href=bahiaagenciasdetalles.php?id_aviso_agencia=$row[id_aviso_agencia]>Ver AVISO</a> \n";
     echo 
"</p>";
  }

?>
  #15 (permalink)  
Antiguo 12/10/2006, 10:19
Avatar de deet  
Fecha de Ingreso: mayo-2005
Ubicación: Córdoba - Argentina
Mensajes: 269
Antigüedad: 19 años
Puntos: 1
bueno por lo que veo creo que el error esta en la segunda sentencia sql.

p.e.: cuando el usuario solamente seleccione la marca, si sacas en pantalla la sentencia seguramente te va a salir algo como:

select * from avisos_agencias where AND avisos_agencias.marca='$MARCANOMBRE'

lo que te marqué en rojo es la parte de la sentencia que esta provocando el error
entonces haciendole un arreglo a tu script te quedaría algo así:

Código PHP:
$consulta "select * from avisos_agencias where"// aca esta mal 
    
if($MARCANOMBRE != "") {
             if(!
ereg("where$",$consulta)){
               
$consulta .= " AND";
             }
    
$consulta .= " avisos_agencias.marca='$MARCANOMBRE' ";
    }
    if(
$ano != "") {
             if(!
ereg("where$",$consulta)){
               
$consulta .= " AND";
             }
    
$consulta .= " avisos_agencias.ano='$ano' ";
    }
    if(
$combustible != "") {
             if(!
ereg("where$",$consulta)){
               
$consulta .= " AND";
             }
     
$consulta .= " avisos_agencias.combustible='$combustible'";
    }
    if(
$desde != "" || $hasta != "") {
             if(!
ereg("where$",$consulta)){
               
$consulta .= " AND";
             }
     
$consulta .= " avisos_agencias.precio BETWEEN '$desde' AND 'hasta'";
    } 
las condicionantes que agregué verifican si la cadena de la variable $consulta no termina con la palabra where, si es así agrego el AND, bueno esto es un arreglo para tu script, dejo en tus manos seguir investigando de como hacer más fácil la sentencia sql para buscar productos.

espero que te sea de utilidad.
  #16 (permalink)  
Antiguo 18/10/2006, 13:49
 
Fecha de Ingreso: agosto-2006
Ubicación: Argentina, Bahia Blanca
Mensajes: 172
Antigüedad: 17 años, 8 meses
Puntos: 0
De acuerdo Buenas

deet.
Muchas gracias por tu ayuda, verdaderamente estoy encaminado y casi terminando el buscador, disculpa el atraso para respoder es que estuve medio lejos de la maquina estos dias.
En cuanto lo termine lo publico junto con las tablas asi queda data sobre como proceder en estos casos.
Muchas gracias.
Un abrazo
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 22:11.