Foros del Web » Programando para Internet » PHP »

Búsqueda, varios campos.

Estas en el tema de Búsqueda, varios campos. en el foro de PHP en Foros del Web. Hola! He buscado sobre el tema desde hace una hora y no encuentro nada en los foros (ni en google) No se usar la lógica ...
  #1 (permalink)  
Antiguo 25/10/2010, 03:56
Avatar de Wakkos
Colaborador
 
Fecha de Ingreso: octubre-2001
Ubicación: (cerca)
Mensajes: 1.795
Antigüedad: 22 años, 6 meses
Puntos: 59
Búsqueda, varios campos.

Hola!

He buscado sobre el tema desde hace una hora y no encuentro nada en los foros (ni en google)

No se usar la lógica bien porque no entiendo muchos de los operadores MySQL así que a ver si me echais un cable.

Tengo un formulario con 4 dropdown boxes para ejecutar una búsqueda en la base de datos:
  1. Si el usuario no selecciona ningún campo en ninguno de los dropdown boxes, el resultado es cero. Me gustaría que más bien fueran todos los registros. Esto creo que puedo lograrlo con condicionales si las 4 variables son ="" (pero fijo que hay una mejor manera, algo como if($_post[]="") select + from....)
  2. Si el usuario selecciona UN campo solo, todo guay.
  3. Si selecciona dos campos o más, no hace criba, sencillamente me imprime todos los que cumplen el campo A más el campo B y me gustaría que fuera solo campo A y campo B y campo C y campo D teniendo en cuenta que algunas de estas variables pueden viajar vacías.

No me huele a que sea complicado, ya que buscadores de este estilo son el pan nuestro de muchas webs.

Gracias de antemano por vuestra ayuda!
__________________
Cool Village
@Wakkos
  #2 (permalink)  
Antiguo 25/10/2010, 06:02
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 14 años, 6 meses
Puntos: 334
Respuesta: Búsqueda, varios campos.

teóricamente solo deberías cambiar los OR.. por AND en la consulta...

como opcion puedes ir creando la consulta por partes
ejemplo

Código PHP:
$consulta "SELECT datos FROM tabla WHERE ";
if (isset(
$_POST['filtro1'])) {
    
$filtro1 $_POST['filtro1'];
    
$consulta .= "filtro1 = $filtro1 ";

es solo un ejemplo =)

saludos.
__________________
More about me...
~ @rhyudek1
~ Github
  #3 (permalink)  
Antiguo 25/10/2010, 07:05
Avatar de Wakkos
Colaborador
 
Fecha de Ingreso: octubre-2001
Ubicación: (cerca)
Mensajes: 1.795
Antigüedad: 22 años, 6 meses
Puntos: 59
Respuesta: Búsqueda, varios campos.

Si, pensé en lo de los AND pero.. y si el campo está vacío?

Por cierto, no puse la consulta que tengo ahora, es:

Código PHP:
$result sprintf("SELECT * FROM vinos  WHERE bodega LIKE '$bodega' OR DO LIKE '$DO' OR tipo_vino LIKE '$tipo_vino' OR maridaje_gen LIKE '$maridaje_gen'"$conexion); 
Pero claro, tenemos el problema de "y si el formulario está vacío, ponme todos los registros"
__________________
Cool Village
@Wakkos
  #4 (permalink)  
Antiguo 25/10/2010, 07:10
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 14 años, 6 meses
Puntos: 334
Respuesta: Búsqueda, varios campos.

por eso lo de separar la consulta...

Código PHP:
Ver original
  1. $consulta = "SELECT datos FROM tabla ";
  2. $cond = "WHERE ";
  3. if (isset($_POST['filtro1'])) {
  4.     $filtro1 = $_POST['filtro1'];
  5.     $consulta .= "$cond filtro1 = $filtro1 ";
  6.     $cond = "AND ";
  7. }
  8. if (isset($_POST['filtro2'])) {
  9.     $filtro2 = $_POST['filtro2'];
  10.     $consulta .= "$cond filtro2 = $filtro2 ";
  11.     $cond = "AND ";
  12. }

entonces ...

si el filtro 1 y 2 están vacíos...
solamente quedara la consulta "SELECT datos FROM tabla " por lo tanto mostrara todos..
si 1 filtro esta activado... se agregara el correspondiente..

saludos.
__________________
More about me...
~ @rhyudek1
~ Github
  #5 (permalink)  
Antiguo 26/10/2010, 04:49
Avatar de Wakkos
Colaborador
 
Fecha de Ingreso: octubre-2001
Ubicación: (cerca)
Mensajes: 1.795
Antigüedad: 22 años, 6 meses
Puntos: 59
Respuesta: Búsqueda, varios campos.

mmmm parecerá un tontería, pero como juego con las variables en la consulta?
__________________
Cool Village
@Wakkos
  #6 (permalink)  
Antiguo 28/10/2010, 16:46
Avatar de Wakkos
Colaborador
 
Fecha de Ingreso: octubre-2001
Ubicación: (cerca)
Mensajes: 1.795
Antigüedad: 22 años, 6 meses
Puntos: 59
Respuesta: Búsqueda, varios campos.

Me ha costado un huevo, pero he llegado a esto:


Código PHP:
 $sql="SELECT * FROM vinos";


$cond"WHERE";
if(
$bodega !=0)
{
    
$sql .="$cond bodega=$bodega";
    
$cond="AND";
}

if(
$DO !=0)
{
      
$sql .="$cond DO=$DO";
    
$cond="AND";
}
if(
$tipo_vino !=0)
{
      
$sql .="$cond tipo_vino=$tipo_vino";
    
$cond="AND";
}
if(
$maridaje_gen !=0)
{
      
$sql .="$cond maridaje_gen=$maridaje_gen";
    
$cond="AND";
}
$sql.=";"

echo 
$sql
Que por alguna extraña razón no me agrega los condicionales, como si los "if" no se cumplieran. $SQL = SELECT * FROM vinos; siempre.

Se puede ver en Funcionamiento

El código se puede ver aquí!
__________________
Cool Village
@Wakkos
  #7 (permalink)  
Antiguo 29/10/2010, 03:51
Avatar de Wakkos
Colaborador
 
Fecha de Ingreso: octubre-2001
Ubicación: (cerca)
Mensajes: 1.795
Antigüedad: 22 años, 6 meses
Puntos: 59
Respuesta: Búsqueda, varios campos.

Sigo Avanzando, el error era que los "0" que enviaba el formulario eran texto y el que contrastaba las variables eran números.

Pero ahora me da un error de sintaxis la consulta y eso si que no tengo idea:

MySQL dice: 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 'Valdés' at line 1

y mi consulta queda así:
SELECT * FROM vinos WHERE bodega=$bodega;
En el caso de elegir solo bodega, claro.

Edit: claro, ahora que pruebo, tampoco me reconoce mas variables aparte de $bodega
__________________
Cool Village
@Wakkos

Etiquetas: campos
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 20:48.