Foros del Web » Programando para Internet » PHP »

Busqueda con Multiples Select.

Estas en el tema de Busqueda con Multiples Select. en el foro de PHP en Foros del Web. Hola tengo una base de datos que me muestra los resultados, pero quisiera incluir un fomulario con varios select: Pagina: (opcion 1), (opcion 2), (opcion ...

  #1 (permalink)  
Antiguo 14/08/2009, 13:20
Usuario no validado
 
Fecha de Ingreso: agosto-2009
Mensajes: 53
Antigüedad: 11 años, 11 meses
Puntos: 1
Busqueda con Multiples Select.

Hola tengo una base de datos que me muestra los resultados, pero quisiera incluir un fomulario con varios select:

Pagina: (opcion 1), (opcion 2), (opcion 3), (opcion 4) ....
Modelo: (opcion 1), (opcion 2), (opcion 3), (opcion 4) ....
Bus: (opcion 1), (opcion 2), (opcion 3), (opcion 4) ....
Fabricante: (opcion 1), (opcion 2), (opcion 3), (opcion 4) ....
Cpu: (opcion 1), (opcion 2), (opcion 3), (opcion 4) ....
Motherboard: (opcion 1), (opcion 2), (opcion 3), (opcion 4) ....
Extras: (opcion 1), (opcion 2), (opcion 3), (opcion 4) ....

El formulario ya lo tengo, llama a buscar.php, pero me esta constando buscar informacion que me ayude a saber que codigo tengo que meter para que me funcione la busqueda y saque los resultados.

Muchas Gracias.

Última edición por gariko01; 14/08/2009 a las 13:36
  #2 (permalink)  
Antiguo 14/08/2009, 13:24
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 12 años, 2 meses
Puntos: 1517
Respuesta: Busqueda con Multiples Select.

¿Podrias escribir lo que has hecho?
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 14/08/2009, 13:35
Usuario no validado
 
Fecha de Ingreso: agosto-2009
Mensajes: 53
Antigüedad: 11 años, 11 meses
Puntos: 1
Respuesta: Busqueda con Multiples Select.

Este es el formulario llamado busqueda.php

Código PHP:
<div align="center">
<p><font color="red">En rojo ATI</font> - <font color="green">En verde NVIDIA</font></p>

<h2>Hay 

<? 

 
include("db_conecta.inc");
   
$link=Conectarse();
   
$total mysql_query("SELECT count(*) FROM prueba"$link);

echo 
mysql_result($total,0,0); ?>

equipos en el ranking. Haz click aqui para ingresar el tuyo.</h2>
</div>


<form action="buscar.php" target="_parent" method="post" name="3dmark2006" id="3dmark2006">

<select name="pagina" id="pagina">
<option selected="selected" value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
</select>

<select name="modelo" id="modelo">
<option selected="selected" value="0">Filtrar modelo VGA</option>
<option value=""></option><option value="GeForce 2 GTS">GeForce 2 GTS</option>
<option value="GeForce 2 MX">GeForce 2 MX</option>
<option value="GeForce 4 MX">GeForce 4 MX</option>
<option value="GeForce 4 TI 4200">GeForce 4 TI 4200</option>
<option value="GeForce 5900XT">GeForce 5900XT</option>
<option value="GeForce 6100">GeForce 6100</option>
<option value="GeForce 6200">GeForce 6200</option>
<option value="GeForce 6600">GeForce 6600</option>
</select>

<select name="bus" id="bus">
<option selected="selected" value="0">BUS</option>
<option value=""></option><option value="AGP">AGP</option>
<option value="PCI-E">PCI-E</option>
</select>


<select name="fabricante" id="fabricante">
<option selected="selected" value="0">Fabricante GPU</option>
<option value="ATI">ATI</option>
<option value="Intel">Intel</option>
<option value="NVIDIA">NVIDIA</option>
<option value="VIA">VIA</option>
</select>

<select name="cpu" id="cpu">
<option selected="selected" value="0">CPU</option>
<option value=""></option>
<option value="Am5x86 X5">Am5x86 X5</option>
<option value="AMD K7 Pluto">AMD K7 Pluto</option>
<option value="AMD Turion 64 X2">AMD Turion 64 X2</option>
<option value="Athlon 64 Clawhammer">Athlon 64 Clawhammer</option>
<option value="Athlon 64 LE Orleans">Athlon 64 LE Orleans</option>
<option value="Athlon 64 lima">Athlon 64 lima</option>
<option value="Athlon 64 NewCastle">Athlon 64 NewCastle</option>
<option value="Athlon 64 Orleans">Athlon 64 Orleans</option>
</select>

<select name="motherboard" id="motherboard">
<option selected="selected" value="0">Placa Madre</option>
<option value=""></option>
<option value="A-Trend ATC 5200">A-Trend ATC 5200</option>
<option value="Abit AA8-DuraMAX">Abit AA8-DuraMAX</option>
<option value="Abit AB9PRO">Abit AB9PRO</option>
<option value="Abit AI7">Abit AI7</option>
<option value="Abit AL8">Abit AL8</option>
<option value="Abit AN-M2">Abit AN-M2</option>
<option value="Abit AN52">Abit AN52</option>
</select>

<select name="extras" id="extras">
<option selected="selected" value="0">Extras</option>
<option value=""></option>
<option value="--">--</option>
<option value="CrossFire">CrossFire</option>
<option value="IGP">IGP</option>
<option value="SLI">SLI</option>
</select>

<input name="submit" value="GO" type="submit" width="30"> </form>
Lo que quiero es que en funcion de lo que seleccione me saque el resultado, pueden ser varias opciones a la vez o solo una, vamos lo que el usuario quiera.

El formulario llama a buscar.php pero no se que codigo meter para que saque los resultados que necesito.
  #4 (permalink)  
Antiguo 14/08/2009, 14:03
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 12 años, 2 meses
Puntos: 1517
Respuesta: Busqueda con Multiples Select.

Necesitarias crear varias condiciones y si estan agregarlas en la consulta. Algo así

Código PHP:
Ver original
  1. <?php
  2. $pagina = (!empty($_POST["pagina"])
  3.     ? " pagina=".$_POST["pagina"]
  4.     : "");
  5.  
  6. $modelo = (!empty($_POST["modelo"])
  7.     ? (!empty($pagina)
  8.         ? " AND modelo=".$_POST["modelo"]
  9.         : " modelo=".$_POST["modelo"])
  10.     : "");
  11.  
  12. $bus = (!empty($_POST["bus"])
  13.     ? (!empty($pagina) || !empty($modelo)
  14.         ? " AND bus=".$_POST["bus"]
  15.         : " bus=".$_POST["bus"])
  16.     : "");
  17.  
  18. $fabricante = (!empty($_POST["fabricante"])
  19.     ? (!empty($pagina) || !empty($modelo) || !empty($bus)
  20.         ? " AND fabricante=".$_POST["fabricante"]
  21.         : " fabricante=".$_POST["fabricante"])
  22.     : "");
  23.  
  24. $cpu = (!empty($_POST["cpu"])
  25.     ? (!empty($pagina) || !empty($modelo) || !empty($bus) || !empty($fabricante)
  26.         ? " AND cpu=".$_POST["cpu"]
  27.         : " cpu=".$_POST["cpu"])
  28.     : "");
  29.  
  30. $motherboard = (!empty($_POST["motherboard"])
  31.     ? (!empty($pagina) || !empty($modelo) || !empty($bus) || !empty($fabricante) || !empty($cpu)
  32.         ? " AND motherboard=".$_POST["motherboard"]
  33.         : " motherboard=".$_POST["motherboard"])
  34.     : "");
  35.  
  36. $extras = (!empty($_POST["extras"])
  37.     ? (!empty($pagina) || !empty($modelo) || !empty($bus) || !empty($fabricante) || !empty($cpu) || !empty($motherboard)
  38.         ? " AND extras=".$_POST["extras"]
  39.         : " extras=".$_POST["extras"])
  40.     : "");
  41.  
  42. $s = "SELECT * FROM tabla WHERE "
  43.     . $pagina
  44.     . $modelo
  45.     . $bus
  46.     . $fabricante
  47.     . $cpu
  48.     . $motherboard
  49.     . $extras;
  50. $query = mysql_query($s) or die(mysql_error());

En vez de hacerlo en ese tipo de condiciones lo puedes hacer con if y else. Pero de esa forma ahorras escribir tanto codigo.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #5 (permalink)  
Antiguo 14/08/2009, 14:13
Usuario no validado
 
Fecha de Ingreso: agosto-2009
Mensajes: 53
Antigüedad: 11 años, 11 meses
Puntos: 1
Respuesta: Busqueda con Multiples Select.

Esto seria para el buscar.php ?? que es donde llama el formulario ??

Otra cosa falta al comienzo la llamada a la base de datos no ??

Para que sepa donde tiene que buscar no es asi ?
  #6 (permalink)  
Antiguo 14/08/2009, 14:14
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 12 años, 2 meses
Puntos: 1517
Respuesta: Busqueda con Multiples Select.

Solo te indique el query, tendrias que hacer lo demas como comunmentes haces para conectarte a la base de datos
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #7 (permalink)  
Antiguo 14/08/2009, 14:27
Usuario no validado
 
Fecha de Ingreso: agosto-2009
Mensajes: 53
Antigüedad: 11 años, 11 meses
Puntos: 1
Respuesta: Busqueda con Multiples Select.

Bien la llamada a la base de datos ya la hice, pero con lo que me pusiste ya deberia de mostrar los resultados ??

porque me da este error:

Código:
Unknown column 'SLI' in 'where clause'
Y en la tabla de la base de datos si que esta en el campo extras varias filas con SLI, por lo que si que deberia de mostrar algo.
  #8 (permalink)  
Antiguo 14/08/2009, 14:29
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 12 años, 2 meses
Puntos: 1517
Respuesta: Busqueda con Multiples Select.

¿Podrias escribir lo que hiciste?
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #9 (permalink)  
Antiguo 14/08/2009, 14:34
Usuario no validado
 
Fecha de Ingreso: agosto-2009
Mensajes: 53
Antigüedad: 11 años, 11 meses
Puntos: 1
Respuesta: Busqueda con Multiples Select.

Lo que he hecho ha sido meter lo que tu me diste en buscar.php y cambie al final del codigo el nombre de la tabla.

Código PHP:
<?php

 
include("db_conecta.inc");
   
$link=Conectarse();
   
$result=mysql_query("select * from prueba",$link);

$pagina = (!empty($_POST["pagina"])
        ? 
" pagina=".$_POST["pagina"]
        : 
"");

$modelo = (!empty($_POST["modelo"])
        ? (!empty(
$pagina
                ? 
" AND modelo=".$_POST["modelo"]
                : 
" modelo=".$_POST["modelo"])
        : 
"");

$bus = (!empty($_POST["bus"])
        ? (!empty(
$pagina) || !empty($modelo)
                ? 
" AND bus=".$_POST["bus"]
                : 
" bus=".$_POST["bus"])
        : 
"");

$fabricante = (!empty($_POST["fabricante"])
        ? (!empty(
$pagina) || !empty($modelo) || !empty($bus)
                ? 
" AND fabricante=".$_POST["fabricante"]
                : 
" fabricante=".$_POST["fabricante"])
        : 
"");

$cpu = (!empty($_POST["cpu"])
        ? (!empty(
$pagina) || !empty($modelo) || !empty($bus) || !empty($fabricante)
                ? 
" AND cpu=".$_POST["cpu"]
                : 
" cpu=".$_POST["cpu"])
        : 
"");

$motherboard = (!empty($_POST["motherboard"])
        ? (!empty(
$pagina) || !empty($modelo) || !empty($bus) || !empty($fabricante) || !empty($cpu)
                ? 
" AND motherboard=".$_POST["motherboard"]
                : 
" motherboard=".$_POST["motherboard"])
        : 
"");

$extras = (!empty($_POST["extras"])
        ? (!empty(
$pagina) || !empty($modelo) || !empty($bus) || !empty($fabricante) || !empty($cpu) || !empty($motherboard)
                ? 
" AND extras=".$_POST["extras"]
                : 
" extras=".$_POST["extras"])
        : 
"");

$s "SELECT * FROM prueba WHERE " 
        
$pagina
        
$modelo
        
$bus
        
$fabricante
        
$cpu
        
$motherboard
        
$extras;
$query mysql_query($s) or die(mysql_error());
  #10 (permalink)  
Antiguo 14/08/2009, 14:38
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 12 años, 2 meses
Puntos: 1517
Respuesta: Busqueda con Multiples Select.

Disculpa se me escapo colocar entre comillas las consulta me refiero a esto

Código PHP:
Ver original
  1. <?php
  2. $pagina = (!empty($_POST["pagina"])
  3.     ? " pagina='".$_POST["pagina"]."'"
  4.     : "");
  5.  
  6. $modelo = (!empty($_POST["modelo"])
  7.     ? (!empty($pagina)
  8.         ? " AND modelo='".$_POST["modelo"]."'"
  9.         : " modelo='".$_POST["modelo"]."'")
  10.     : "");
  11.  
  12. $bus = (!empty($_POST["bus"])
  13.     ? (!empty($pagina) || !empty($modelo)
  14.         ? " AND bus='".$_POST["bus"]."'"
  15.         : " bus='".$_POST["bus"]."'")
  16.     : "");
  17.  
  18. $fabricante = (!empty($_POST["fabricante"])
  19.     ? (!empty($pagina) || !empty($modelo) || !empty($bus)
  20.         ? " AND fabricante='".$_POST["fabricante"]."'"
  21.         : " fabricante='".$_POST["fabricante"]."'")
  22.     : "");
  23.  
  24. $cpu = (!empty($_POST["cpu"])
  25.     ? (!empty($pagina) || !empty($modelo) || !empty($bus) || !empty($fabricante)
  26.         ? " AND cpu='".$_POST["cpu"]."'"
  27.         : " cpu='".$_POST["cpu"]."'")
  28.     : "");
  29.  
  30. $motherboard = (!empty($_POST["motherboard"])
  31.     ? (!empty($pagina) || !empty($modelo) || !empty($bus) || !empty($fabricante) || !empty($cpu)
  32.         ? " AND motherboard='".$_POST["motherboard"]."'"
  33.         : " motherboard='".$_POST["motherboard"]."'")
  34.     : "");
  35.  
  36. $extras = (!empty($_POST["extras"])
  37.     ? (!empty($pagina) || !empty($modelo) || !empty($bus) || !empty($fabricante) || !empty($cpu) || !empty($motherboard)
  38.         ? " AND extras='".$_POST["extras"]."'"
  39.         : " extras='".$_POST["extras"]."'")
  40.     : "");
  41.  
  42. $s = "SELECT * FROM tabla WHERE "
  43.     . $pagina
  44.     . $modelo
  45.     . $bus
  46.     . $fabricante
  47.     . $cpu
  48.     . $motherboard
  49.     . $extras;
  50. $query = mysql_query($s) or die(mysql_error());
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #11 (permalink)  
Antiguo 14/08/2009, 14:46
Usuario no validado
 
Fecha de Ingreso: agosto-2009
Mensajes: 53
Antigüedad: 11 años, 11 meses
Puntos: 1
Respuesta: Busqueda con Multiples Select.

Ahora se me queda en blanco cuando eligo una opcion y le doy a buscar.

He de decir que he metido la opcion de pagina, pero me falta paginar los resultados, eso lo hare mas adelante, tampoco tengo en la tabla ningun campo pagina, puede ser este el motivo de que se quede en blanco, no sale ningun error.

Quizas quito eso de momento para descartar que sea ese el problema

Edito: He quitado lo referente a lo que te comentaba con pagina y lo que te decia se queda en blanco, no muestra resultados de la busqueda, asi lo deje:

Código PHP:
<?php

 
include("db_conecta.inc");
   
$link=Conectarse();
   
$result=mysql_query("select * from prueba",$link);

$modelo = (!empty($_POST["modelo"])
    ? 
" modelo='".$_POST["modelo"]."'"
        
"");

$bus = (!empty($_POST["bus"])
        ? (!empty(
$modelo)
                ? 
" AND bus='".$_POST["bus"]."'"
                
" bus='".$_POST["bus"]."'")
        : 
"");

$fabricante = (!empty($_POST["fabricante"])
        ? (!empty(
$modelo) || !empty($bus)
                ? 
" AND fabricante='".$_POST["fabricante"]."'"
                
" fabricante='".$_POST["fabricante"]."'")
        : 
"");

$cpu = (!empty($_POST["cpu"])
        ? (!empty(
$modelo) || !empty($bus) || !empty($fabricante)
                ? 
" AND cpu='".$_POST["cpu"]."'"
                
" cpu='".$_POST["cpu"]."'")
        : 
"");

$motherboard = (!empty($_POST["motherboard"])
        ? (!empty(
$modelo) || !empty($bus) || !empty($fabricante) || !empty($cpu)
                ? 
" AND motherboard='".$_POST["motherboard"]."'"
                
" motherboard='".$_POST["motherboard"]."'")
        : 
"");

$extras = (!empty($_POST["extras"])
        ? (!empty(
$modelo) || !empty($bus) || !empty($fabricante) || !empty($cpu) || !empty($motherboard)
                ? 
" AND extras='".$_POST["extras"]."'"
                
" extras='".$_POST["extras"]."'")
        : 
"");

$s "SELECT * FROM prueba WHERE " 
        
$modelo
        
$bus
        
$fabricante
        
$cpu
        
$motherboard
        
$extras;
$query mysql_query($s) or die(mysql_error());

Última edición por gariko01; 14/08/2009 a las 14:52
  #12 (permalink)  
Antiguo 14/08/2009, 14:58
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 12 años, 2 meses
Puntos: 1517
Respuesta: Busqueda con Multiples Select.

Ya no tienes problema y parece ser que lo que pides no esta en la base de datos. Trata de buscar solamente uno que tu sabes que esta en la base de datos.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #13 (permalink)  
Antiguo 14/08/2009, 15:14
Usuario no validado
 
Fecha de Ingreso: agosto-2009
Mensajes: 53
Antigüedad: 11 años, 11 meses
Puntos: 1
Respuesta: Busqueda con Multiples Select.

Pues busco uno que yo se que esta y no encuentra nada, se queda en blanco.

Mira esta es la base de datos de prueba:

Código:
-- phpMyAdmin SQL Dump
-- version 2.10.3
-- 
-- Servidor: localhost
-- Tiempo de generación: 14-08-2009 a las 23:11:17
-- Versión del servidor: 6.0.4
-- Versión de PHP: 6.0.0-dev

-- 
-- Base de datos: `noticias`
-- 

-- --------------------------------------------------------

-- 
-- Estructura de tabla para la tabla `prueba`
-- 

CREATE TABLE `prueba` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nombre` varchar(100) NOT NULL,
  `puntos` varchar(50) NOT NULL,
  `pais` varchar(50) NOT NULL,
  `fabricante` varchar(50) NOT NULL,
  `marca` varchar(100) NOT NULL,
  `modelo` varchar(100) NOT NULL,
  `bus` varchar(50) NOT NULL,
  `cpu` varchar(50) NOT NULL,
  `mhz_gpu` varchar(50) NOT NULL,
  `mhz_ram` varchar(50) NOT NULL,
  `mhz_cpu` varchar(50) NOT NULL,
  `motherboard` varchar(100) NOT NULL,
  `extras` varchar(50) NOT NULL,
  `url` varchar(150) NOT NULL,
  PRIMARY KEY (`id`)
) TYPE=MyISAM  AUTO_INCREMENT=14 ;

-- 
-- Volcar la base de datos para la tabla `prueba`
-- 

INSERT DELAYED IGNORE INTO `prueba` (`id`, `nombre`, `puntos`, `pais`, `fabricante`, `marca`, `modelo`, `bus`, `cpu`, `mhz_gpu`, `mhz_ram`, `mhz_cpu`, `motherboard`, `extras`, `url`) VALUES 
(10, ' Arkon ', '14000', ' Espa', ' Nvidia ', ' XFX ', ' 260 Black Edition ', '0', '  ', ' 670 ', ' 1000 ', '  ', ' Asus P5Q3 Deluxe ', ' SLI ', ' service.futuremark '),
(11, ' Arkon ', '14000', ' Espa', ' Nvidia ', ' XFX ', ' 260 Black Edition ', '0', '  ', ' 670 ', ' 1000 ', '  ', ' Asus P5Q3 Deluxe ', ' SLI ', ' service.futuremark '),
(12, ' Arkon ', ' 20000 ', ' Espa', ' Nvidia ', ' XFX ', ' 260 Black Edition ', ' Pci-E ', '  ', ' 670 ', ' 1000 ', '  ', ' Asus P5Q3 Deluxe ', ' SLI ', ' service.futuremark '),
(13, ' Arkon ', ' 20000 ', ' Espa', ' Nvidia ', ' XFX ', ' 260 Black Edition ', ' Pci-E ', ' Intel Q9650 Conroe 775 ', ' 670 ', ' 1000 ', ' 3000 ', ' Asus P5Q3 Deluxe ', ' SLI ', ' service.futuremark ');
  #14 (permalink)  
Antiguo 14/08/2009, 15:21
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 12 años, 2 meses
Puntos: 1517
Respuesta: Busqueda con Multiples Select.

Ya veo el problema si te fijas tienes un espacio en cada campo declarado Ejemplo

' Arkon '

Pero cuando haces la consulta estas haciendo de esta forma

'Arkon'

y esto hace que no encuentre nada.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #15 (permalink)  
Antiguo 14/08/2009, 15:37
Usuario no validado
 
Fecha de Ingreso: agosto-2009
Mensajes: 53
Antigüedad: 11 años, 11 meses
Puntos: 1
Respuesta: Busqueda con Multiples Select.

Vale he arreglado la base de datos quitando todos los espacios y aun asi me sale la pagina en blanco al buscar.

Código:
CREATE TABLE `prueba` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nombre` varchar(100) NOT NULL,
  `puntos` varchar(50) NOT NULL,
  `pais` varchar(50) NOT NULL,
  `fabricante` varchar(50) NOT NULL,
  `marca` varchar(100) NOT NULL,
  `modelo` varchar(100) NOT NULL,
  `bus` varchar(50) NOT NULL,
  `cpu` varchar(50) NOT NULL,
  `mhz_gpu` varchar(50) NOT NULL,
  `mhz_ram` varchar(50) NOT NULL,
  `mhz_cpu` varchar(50) NOT NULL,
  `motherboard` varchar(100) NOT NULL,
  `extras` varchar(50) NOT NULL,
  `url` varchar(150) NOT NULL,
  PRIMARY KEY (`id`)
)  ;

-- 
-- Volcar la base de datos para la tabla `prueba`
-- 

INSERT DELAYED IGNORE INTO `prueba` (`id`, `nombre`, `puntos`, `pais`, `fabricante`, `marca`, `modelo`, `bus`, `cpu`, `mhz_gpu`, `mhz_ram`, `mhz_cpu`, `motherboard`, `extras`, `url`) VALUES 
(10, 'Arkon', '14000', 'Espa', 'NVIDIA', 'XFX', '260 Black Edition', 'Pci-E', 'Intel Q9550 Conroe 775', '690', '1400', '6000', 'Asus P5Q3 Deluxe', 'SLI', 'service.futuremark'),
(11, 'Arkon', '14000', 'Espa', 'NVIDIA', 'XFX', '260 Black Edition', 'Pci-E', 'Intel Q6600 Conroe 775', '610', '1300', '5000', 'Asus P9Q3 Deluxe', 'SLI', 'service.futuremark'),
(12, 'Arkon', '20000', 'Espa', 'NVIDIA', 'XFX', '260 Black Edition', 'Pci-E', 'Intel Q9200 Conroe 775', '700', '1200', '4000', 'Asus P8Q3 Deluxe', 'SLI', 'service.futuremark'),
(13, 'Arkon', '20000', 'Espa', 'NVIDIA', 'XFX', '260 Black Edition', 'Pci-E', 'Intel Q5500 Conroe 775', '750', '1500', '3000', 'Asus P7Q3 Deluxe', 'SLI', 'service.futuremark');
  #16 (permalink)  
Antiguo 14/08/2009, 15:41
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 12 años, 2 meses
Puntos: 1517
Respuesta: Busqueda con Multiples Select.

Verifica usando trim() en cada $_POST
Código php:
Ver original
  1. trim($_POST["........."])
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #17 (permalink)  
Antiguo 14/08/2009, 15:55
Usuario no validado
 
Fecha de Ingreso: agosto-2009
Mensajes: 53
Antigüedad: 11 años, 11 meses
Puntos: 1
Respuesta: Busqueda con Multiples Select.

Osea quieres decir, sustituir el empty por trim ??

Si hago eso me salta el siguiente error:

Cita:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'bus='0' AND cpu='0' AND motherboard='0'' at line 1
  #18 (permalink)  
Antiguo 14/08/2009, 15:58
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 12 años, 2 meses
Puntos: 1517
Respuesta: Busqueda con Multiples Select.

no no me refiero a esta parte disculpa se me olvido donde indicarte

Código PHP:
Ver original
  1. ? " modelo='".trim($_POST["modelo"])."'"
  2.  
  3. ? " AND bus='".trim($_POST["bus"])."'"
  4. : " bus='".trim($_POST["bus"])."'")

y asi sucesivamente
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #19 (permalink)  
Antiguo 14/08/2009, 16:06
Usuario no validado
 
Fecha de Ingreso: agosto-2009
Mensajes: 53
Antigüedad: 11 años, 11 meses
Puntos: 1
Respuesta: Busqueda con Multiples Select.

Pues ya lo he hecho y el resultado es el mismo, se me queda en blanco.

Código PHP:
<?php

 
include("db_conecta.inc");
   
$link=Conectarse();
   
$result=mysql_query("select * from prueba",$link);

$modelo = (!empty($_POST["modelo"])
    ? 
" modelo='".trim($_POST["modelo"])."'"
        
"");

$bus = (!empty($_POST["bus"])
        ? (!empty(
$modelo)
                ? 
" AND bus='".trim($_POST["bus"])."'"
                
" bus='".trim($_POST["bus"])."'")
        : 
"");

$fabricante = (!empty($_POST["fabricante"])
        ? (!empty(
$modelo) || !empty($bus)
                ? 
" AND fabricante='".trim($_POST["fabricante"])."'"
                
" fabricante='".trim($_POST["fabricante"])."'")
        : 
"");

$cpu = (!empty($_POST["cpu"])
        ? (!empty(
$modelo) || !empty($bus) || !empty($fabricante)
                ? 
" AND cpu='".trim($_POST["cpu"])."'"
                
" cpu='".trim($_POST["cpu"])."'")
        : 
"");

$motherboard = (!empty($_POST["motherboard"])
        ? (!empty(
$modelo) || !empty($bus) || !empty($fabricante) || !empty($cpu)
                ? 
" AND motherboard='".trim($_POST["motherboard"])."'"
                
" motherboard='".trim($_POST["motherboard"])."'")
        : 
"");

$extras = (!empty($_POST["extras"])
        ? (!empty(
$modelo) || !empty($bus) || !empty($fabricante) || !empty($cpu) || !empty($motherboard)
                ? 
" AND extras='".trim($_POST["extras"])."'"
                
" extras='".trim($_POST["extras"])."'")
        : 
"");

$s "SELECT * FROM prueba WHERE " 
        
$modelo
        
$bus
        
$fabricante
        
$cpu
        
$motherboard
        
$extras;
$query mysql_query($s) or die(mysql_error());
  #20 (permalink)  
Antiguo 14/08/2009, 17:03
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 12 años, 2 meses
Puntos: 1517
Respuesta: Busqueda con Multiples Select.

Ya se me estan acabando las opciones. Dime un ejemplo de lo que seleccionaste para comparar con la base de datos. Tambien te sugiero que hagas esto al principio de buscar.php para ver que trae
Código php:
Ver original
  1. foreach($_POST as $k => $v){
  2.   echo $k . " = " . $v."<br />";
  3. }

Hay una forma tambien de hacer el query pero quiero terminar con esta y si no funciona pasamos a la otra que es con like
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #21 (permalink)  
Antiguo 14/08/2009, 17:18
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 12 años, 2 meses
Puntos: 1517
Respuesta: Busqueda con Multiples Select.

Otra cosa que se me ha escapado si lo has hecho o no. ¿Estas imprimiendolo en la pagina el resultado? Porque lo que estamos haciendo es solamente un query tienes que luego hacer otras funciones para imprimir el resultado. Ejemplo

Código PHP:
Ver original
  1. $s = "SELECT * FROM prueba WHERE "  
  2.         . $modelo
  3.         . $bus
  4.         . $fabricante
  5.         . $cpu
  6.         . $motherboard
  7.         . $extras;
  8. $query = mysql_query($s) or die(mysql_error());
  9.  
  10. while($row = mysql_fetch_assoc($query)){
  11.   echo $row["modelo"] . " - " . $row["bus"] . " - " . $row["fabricante"] . " - " . $row["cpu"] . " - " . $row["motherboard"] . " - " . $row["extras"] . "<br />";
  12. }
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #22 (permalink)  
Antiguo 14/08/2009, 23:54
Usuario no validado
 
Fecha de Ingreso: agosto-2009
Mensajes: 53
Antigüedad: 11 años, 11 meses
Puntos: 1
Respuesta: Busqueda con Multiples Select.

Muchisimas gracias, en un principio parece que ya funciona, el problema era que no estabamos mostrando los resultados por eso se me quedaba en blanco, ahora solo falta darle un aspecto mas elegante y ya tengo esa parte.

Aun me quedan cosas por hacer como paginar los resultados o cambiar el pais por una bandera, pero bueno eso lo iremos haciendo poco a poco, tengo otros temas abiertos con esas dudas, a ver si me van saliendo y ya solo queda darle un aspecto mas elegante a esto, eso ya creo que podre yo solito, de verdad esta era la parte que parecia mas compleja muchisimas gracias abimaelrc, me fuiste de grandisima auyuda.
  #23 (permalink)  
Antiguo 15/08/2009, 15:42
Usuario no validado
 
Fecha de Ingreso: agosto-2009
Mensajes: 53
Antigüedad: 11 años, 11 meses
Puntos: 1
Respuesta: Busqueda con Multiples Select.

He encontrado un fallo que se me paso por alto y es cuando no pones ninguna seleccion en los select, da un error.

Código:
modelo = 0
bus = 0
fabricante = 0
cpu = 0
motherboard = 0
extras = 0
submit = GO
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
Otro fallo que he visto tambien ahora, y es que aunque saca los resultados, realmente no busca saca todos, anteriormente no me di cuenta de esto, pero ahora que ya estoy terminando todo, me acabo de percatar, si tengo 5 filas y 1 es diferente, deberia de sacar solo una, pero me saca todas, es decir no filtra.


El codigo es el siguiente:

Código PHP:
<?php

 
include("db_conecta.inc");
   
$link=Conectarse();
   
$result=mysql_query("select * from prueba",$link);

//Muestra lo que hay seleccionado.
foreach($_POST as $k => $v){
  echo 
$k " = " $v."<br />";
}
// Fin de muestra.


$modelo = (!empty($_POST["modelo"])
    ? 
" modelo='".trim($_POST["modelo"])."'"
        
"");

$bus = (!empty($_POST["bus"])
        ? (!empty(
$modelo)
                ? 
" AND bus='".trim($_POST["bus"])."'"
                
" bus='".trim($_POST["bus"])."'")
        : 
"");

$fabricante = (!empty($_POST["fabricante"])
        ? (!empty(
$modelo) || !empty($bus)
                ? 
" AND fabricante='".trim($_POST["fabricante"])."'"
                
" fabricante='".trim($_POST["fabricante"])."'")
        : 
"");

$cpu = (!empty($_POST["cpu"])
        ? (!empty(
$modelo) || !empty($bus) || !empty($fabricante)
                ? 
" AND cpu='".trim($_POST["cpu"])."'"
                
" cpu='".trim($_POST["cpu"])."'")
        : 
"");

$motherboard = (!empty($_POST["motherboard"])
        ? (!empty(
$modelo) || !empty($bus) || !empty($fabricante) || !empty($cpu)
                ? 
" AND motherboard='".trim($_POST["motherboard"])."'"
                
" motherboard='".trim($_POST["motherboard"])."'")
        : 
"");

$extras = (!empty($_POST["extras"])
        ? (!empty(
$modelo) || !empty($bus) || !empty($fabricante) || !empty($cpu) || !empty($motherboard)
                ? 
" AND extras='".trim($_POST["extras"])."'"
                
" extras='".trim($_POST["extras"])."'")
        : 
"");

$s "SELECT * FROM prueba WHERE "  
        
$modelo 
        
$bus 
        
$fabricante 
        
$cpu 
        
$motherboard 
        
$extras
$query mysql_query($s) or die(mysql_error());
 
while(
$row mysql_fetch_assoc($query)){
  echo 
$row["modelo"] . " - " $row["bus"] . " - " $row["fabricante"] . " - " $row["cpu"] . " - " $row["motherboard"] . " - " $row["extras"] . "<br />";
}

?>

Última edición por gariko01; 15/08/2009 a las 16:00
  #24 (permalink)  
Antiguo 15/08/2009, 16:01
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 12 años, 2 meses
Puntos: 1517
Respuesta: Busqueda con Multiples Select.

Pues vas a tener que colocar unas condiciones para que añada el where.

Código PHP:
Ver original
  1. $extras = (!empty($_POST["extras"])
  2.         ? (!empty($modelo) || !empty($bus) || !empty($fabricante) || !empty($cpu) || !empty($motherboard)
  3.                 ? " AND extras='".trim($_POST["extras"])."'"
  4.                 : " extras='".trim($_POST["extras"])."'")
  5.         : "");
  6.  
  7. $where = (!empty($modelo) || !empty($bus) || !empty($fabricante) || !empty($cpu) || !empty($motherboard) || !empty($extras)
  8.         ? " WHERE "
  9.         : "");
  10.  
  11. $s = "SELECT * FROM prueba "
  12.         . $where
  13.         . $modelo
  14.         . $bus
  15.         . $fabricante
  16.         . $cpu
  17.         . $motherboard
  18.         . $extras;
  19. $query = mysql_query($s) or die(mysql_error());
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #25 (permalink)  
Antiguo 15/08/2009, 16:16
Usuario no validado
 
Fecha de Ingreso: agosto-2009
Mensajes: 53
Antigüedad: 11 años, 11 meses
Puntos: 1
Respuesta: Busqueda con Multiples Select.

Vale he añadido el siguiente codigo que me pusiste.

Código PHP:
$where = (!empty($modelo) || !empty($bus) || !empty($fabricante) || !empty($cpu) || !empty($motherboard) || !empty($extras
        ? 
" WHERE "
        
""); 
Ya no da fallo si no ponemos ninguna seleccion.

Pero sigue sin filtrar los resultados, es decir si eligo un opcion que yo se que solo hay un resultado, me sigue sacando todos, por lo que no funciona realmente la busqueda, ya que no filtra nada.
  #26 (permalink)  
Antiguo 15/08/2009, 16:25
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 12 años, 2 meses
Puntos: 1517
Respuesta: Busqueda con Multiples Select.

Bueno primero verifica que los datos que estas escogiendo no esten asignados en todas las filas. Escoge uno que tu sepas que existe en una sola fila y que se supone que no salgan las demas.

Si usamos el ejemplo que tienes arriba
Código mysql:
Ver original
  1. INSERT DELAYED IGNORE INTO `prueba` (`id`, `nombre`, `puntos`, `pais`, `fabricante`, `marca`, `modelo`, `bus`, `cpu`, `mhz_gpu`, `mhz_ram`, `mhz_cpu`, `motherboard`, `extras`, `url`) VALUES
  2. (10, 'Arkon', '14000', 'Espa', 'NVIDIA', 'XFX', '260 Black Edition', 'Pci-E', 'Intel Q9550 Conroe 775', '690', '1400', '6000', 'Asus P5Q3 Deluxe', 'SLI', 'service.futuremark'),
  3. (11, 'Arkon', '14000', 'Espa', 'NVIDIA', 'XFX', '260 Black Edition', 'Pci-E', 'Intel Q6600 Conroe 775', '610', '1300', '5000', 'Asus P9Q3 Deluxe', 'SLI', 'service.futuremark'),
  4. (12, 'Arkon', '20000', 'Espa', 'NVIDIA', 'XFX', '260 Black Edition', 'Pci-E', 'Intel Q9200 Conroe 775', '700', '1200', '4000', 'Asus P8Q3 Deluxe', 'SLI', 'service.futuremark'),
  5. (13, 'Arkon', '20000', 'Espa', 'NVIDIA', 'XFX', '260 Black Edition', 'Pci-E', 'Intel Q5500 Conroe 775', '750', '1500', '3000', 'Asus P7Q3 Deluxe', 'SLI', 'service.futuremark');

En todos veo todos iguales en los campos que tu escogiste.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #27 (permalink)  
Antiguo 15/08/2009, 16:28
Usuario no validado
 
Fecha de Ingreso: agosto-2009
Mensajes: 53
Antigüedad: 11 años, 11 meses
Puntos: 1
Respuesta: Busqueda con Multiples Select.

Ya lo he verificado y veras me explico, si eligo algo que no esta, no deberia de encontrar nada en la busqueda, y si eligo algo que solo deberia de aparecer 1 opcion, pues eso solo deberia de aparecer un resultado.

El caso que ponga lo que ponga, me aparecen todos los resultados, es decir no filtra en la busqueda.

Mira esta es la base de datos que tengo ahora, añadi uno nuevo, diferente al resto en Crossfire ya que el resto eran SLI, por lo que si pongo esa opcion deberia de aparecer solo 1 resultado en vez de todos.

Código PHP:
INSERT DELAYED IGNORE INTO `prueba` (`id`, `nombre`, `numero_usuario`, `puntos`, `pais`, `fabricante`, `marca`, `modelo`, `bus`, `cpu`, `mhz_gpu`, `mhz_ram`, `mhz_cpu`, `motherboard`, `extras`, `url`) VALUES 
(10'Paco''12''14000''Espana''NVIDIA''XFX''260 Black Edition''Pci-E''Intel Q9550 Conroe 775''690''1400''6000''Asus P5Q3 Deluxe''SLI''http://service.futuremark.com/resultComparison.action?compareResultId=11080480&compareResultType=14'),
(
11'Juan''13''14000''Espana''NVIDIA''XFX''260 Black Edition''Pci-E''Intel Q6600 Conroe 775''610''1300''5000''Asus P9Q3 Deluxe''SLI''http://service.futuremark.com/resultComparison.action?compareResultId=11200220&compareResultType=14'),
(
12'Antonio''14''20000''Espana''NVIDIA''XFX''260 Black Edition''Pci-E''Intel Q9200 Conroe 775''700''1200''4000''Asus P8Q3 Deluxe''SLI''http://service.futuremark.com/compare?3dm06=11092958'),
(
13'Arkon''17''20000''Espana''NVIDIA''XFX''260 Black Edition''Pci-E''Intel Q5500 Conroe 775''750''1500''3000''Asus P7Q3 Deluxe''SLI''http://service.futuremark.com/resultComparison.action?compareResultId=11027824&compareResultType=14'),
(
19'Pablo''18''25000''Albania''ATI ''Sapphire''Radeon HD4870 X2''PCI-E''Core i7 920 Bloomfield''800''1200''4000''Asus P6T Deluxe''CrossFire''http://service.futuremark.com/resultComparison.action?compareResultId=5919491&compareResultType=14'); 

Última edición por gariko01; 15/08/2009 a las 16:38
  #28 (permalink)  
Antiguo 15/08/2009, 16:38
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 12 años, 2 meses
Puntos: 1517
Respuesta: Busqueda con Multiples Select.

¿Que te trae?

Código php:
Ver original
  1. //Muestra lo que hay seleccionado.
  2. foreach($_POST as $k => $v){
  3.   echo $k . " = " . $v."<br />";
  4. }
  5. // Fin de muestra.

Si es posible agrega esta linea para ver si trae la información correcta

Código PHP:
Ver original
  1. $where = (!empty($modelo) || !empty($bus) || !empty($fabricante) || !empty($cpu) || !empty($motherboard) || !empty($extras)
  2.         ? " WHERE "
  3.         : "");
  4.  
  5. var_dump($where);
  6. var_dump($modelo);
  7. var_dump($bus);
  8. var_dump($fabricante);
  9. var_dump($cpu);
  10. var_dump($motherboard);
  11. var_dump($extras);
  12.  
  13. $s = "SELECT * FROM prueba "
  14.         . $where
  15.         . $modelo
  16.         . $bus
  17.         . $fabricante
  18.         . $cpu
  19.         . $motherboard
  20.         . $extras;
  21. $query = mysql_query($s) or die(mysql_error());
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #29 (permalink)  
Antiguo 15/08/2009, 16:43
Usuario no validado
 
Fecha de Ingreso: agosto-2009
Mensajes: 53
Antigüedad: 11 años, 11 meses
Puntos: 1
Respuesta: Busqueda con Multiples Select.

Me saca la siguiente informacion en pantalla:

Código:
modelo = 0
bus = 0
fabricante = 0
cpu = 0
motherboard = 0
extras = CrossFire
submit = GO
string(7) " WHERE " string(0) "" string(0) "" string(0) "" string(0) "" string(0) "" string(19) " extras='CrossFire'"
Como te he dicho anteriormente, hay un solo resultado con la opcion de Crossfire y 4 con la opcion SLI, por lo que deberia de mostrar un unico resultado, pero resulta que me saca todos siempre, ponga lo que ponga.
  #30 (permalink)  
Antiguo 15/08/2009, 16:46
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 12 años, 2 meses
Puntos: 1517
Respuesta: Busqueda con Multiples Select.

¿Y escogiendo extras='CrossFire' te trae data sin existir información en alguna fila?
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
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 03:55.