Foros del Web » Programando para Internet » PHP »

Error creando formulario de búsqueda avanzada con select option

Estas en el tema de Error creando formulario de búsqueda avanzada con select option en el foro de PHP en Foros del Web. Buenas. Estoy creando un formulario de búsqueda avanzada con varios select donde algunos option tienen la opción "todas" con valor vacio (value="") y tambien algunos ...
  #1 (permalink)  
Antiguo 02/04/2012, 10:54
Avatar de kahlito
Colaborador
 
Fecha de Ingreso: marzo-2003
Ubicación: En el Estrecho y el mar
Mensajes: 2.928
Antigüedad: 16 años, 11 meses
Puntos: 62
Error creando formulario de búsqueda avanzada con select option

Buenas.

Estoy creando un formulario de búsqueda avanzada con varios select donde algunos option tienen la opción "todas" con valor vacio (value="") y tambien algunos campos de texto vacios.

Si lo hago con dos opciones me sale perfectamente pero al meter 3, 4 o 5 ya me da error.

El formulario es este:

Código PHP:
<form action="busqueda-avanzada-kites.php" method="post" name="busqueda avanzada kites">
Marca:<select id="marca" name="marca">
<option value=""  >Todas las marcas</option>
<?php
$marcas
=array("F-one""North""Nobile""Naish""Best""Slingshots""Airush""Wipika""Liquidforce""Takoon""Advance""Dakine""Ozone""Star""RRD""Cabrinha""Gastar""Ocean Rodeo""Flysurfer""Crazyfly""Griffin""Zeeko""Flexifoil""Bull""Kiteloose""Waiman""Otra");
//$alfabetico=sort($marcas);
sort($marcas);  
foreach (
$marcas as $ma => $value)
{    
    echo 
'<option value="'.$marcas[$ma].'" ';
    if(
$marcas[$ma] == $_POST['marca'])
    {
        echo 
'selected="selected"';         
    }    
    echo 
'>'.$marcas[$ma].'</option>';    
}
?>
</select><br />
Modelo: <input name="modelo" type="text" value="<?php if(isset($_POST["modelo"])) {echo $_POST["modelo"];} ?>" /><br />
Medidas:<select id="medidas" name="medidas">
<option value=""  >Todas</option>
<?php
$medidas
=array("4""5""6""7""8""9""10""11""12""13""14""15""16");
foreach(
$medidas as $me => $value)
{
    echo 
'<option value="'.$medidas[$me].'"';
    if(
$medidas[$me]== $_POST['medidas'])
    {
        echo 
'selected="selected"';    
    }
    echo 
'>'.$medidas[$me].'</option>';
}
?>
</select><br />
<input type="hidden" name="id_kite" value="<?php echo $id_kite ?>" />
<input type="submit" name="buscar-kite" value="Buscar" /><br />
</form>
Y la búsqueda que uso es esta:

Código PHP:
?<php
if($_POST["marca"] !="" and $_POST["modelo"] != "")
{
    
$busqueda "Select * from kites where marca='".$_POST["marca"]."' and modelo='".$_POST["modelo"]."'";
}
elseif(
$_POST["marca"] !="" or $_POST["modelo"] != "")
{
    
$busqueda "Select * from kites where marca='".$_POST["marca"]."' or modelo='".$_POST["modelo"]."'";
}
elseif(
$_POST["marca"] =="" and $_POST["modelo"] == "")
{    
    
$busqueda "Select * from kites";    
}
?> 
Con dos campos me va bien ya que:

- si todos estan completos me hace la busqueda y me muestra el resultado con todos los campos
- si uno u otro está marcado o completo pero el otro no me muestra el resultado con el campo que se ha marcado.
- si todos están vacios me lo muestra todo.

Hasta aquí todo bien, pero si meto uno nuevo como medidas ya no completa los criterios anteriores:

He usado varias maneras pero por ahora no lo consigo, por ejemplo asi:

Código PHP:
if($_POST["marca"] !="" and $_POST["modelo"] != "" and $_POST["medidas"] != "")
{
    
$busqueda "Select * from kites where marca='".$_POST["marca"]."' and modelo='".$_POST["modelo"]."' and medidas='".$_POST["medidas"]."'";
}
elseif(
$_POST["marca"] !="" or $_POST["modelo"] != "" or $_POST["medidas"] != "")
{
    
$busqueda "Select * from kites where marca='".$_POST["marca"]."' or modelo='".$_POST["modelo"]."' or medidas='".$_POST["medidas"]."'";
}
else
{    
    
$busqueda "Select * from kites";    

¿Como podría hacerlo entonces con más de 2 campos?
  #2 (permalink)  
Antiguo 02/04/2012, 11:14
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 13 años, 8 meses
Puntos: 2135
Respuesta: Error creando formulario de búsqueda avanzada con select option

Lo mejor es armar dinámicamente el query:
Código PHP:
Ver original
  1. $query = 'SELECT * FROM foo';
  2. $conditions = array();
  3. if (foo()) {
  4.        $conditions[] = "foo = 'foo'";
  5. }
  6. if (bar()) {
  7.        $conditions[] = "bar= 'bar'";
  8. }
  9. if (baz()) {
  10.        $conditions[] = "baz= 'baz'";
  11. }
  12.  
  13. if (count($conditions) > 0)) {
  14.        $query .= ' WHERE ' . implode(' AND ', $conditions);
  15. }

Saludos.
  #3 (permalink)  
Antiguo 02/04/2012, 12:29
Avatar de kahlito
Colaborador
 
Fecha de Ingreso: marzo-2003
Ubicación: En el Estrecho y el mar
Mensajes: 2.928
Antigüedad: 16 años, 11 meses
Puntos: 62
Respuesta: Error creando formulario de búsqueda avanzada con select option

Hola GatorV, gracias por la respuseta aunque la verdad es que no termino de entender esa manera o el mecanismo para aplicarlo.

¿Tengo que usar cada campo del formulario como una condición? Por ejemplo asi:

Código PHP:
$query 'SELECT * FROM kites';
$condiciones = array();
if(
$_POST["marca"])
{
    
$condiciones[] = "marca = 'marca'";
}
if(
$_POST["modelo"])
{
    
$condiciones[] = "modelo = 'modelo'";
}
if(
$_POST["medidas"])
{
    
$condiciones[] = "medidas = 'medidas'";

He intentando esa opción pero claro luego me pide un valor en el contador:

Código PHP:
if (count($condiciones[])>0
No termino de entenderlo.
  #4 (permalink)  
Antiguo 02/04/2012, 14:12
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 13 años, 8 meses
Puntos: 2135
Respuesta: Error creando formulario de búsqueda avanzada con select option

El count sirve para contar los elementos del array, por lo que debes de pasar la variable sin los corchetes:
Código PHP:
Ver original
  1. // mal
  2. if (count($conditions[]) > 0)
  3. // bien
  4. if (count($conditions) > 0)

Y sí puedes usar el campo pero es mejor usar isset() junto con empty para asegurarte que tenga algún valor ej:
Código PHP:
Ver original
  1. if (isset($_POST['campo']) && !empty($_POST['campo']) {
  2.          // lo agregas al query
  3.          $conditions[] = "campo='" . $_POST['campo'] . "'"; // Aquí sería bueno limpiar tu variable
  4. }

Saludos.
  #5 (permalink)  
Antiguo 03/04/2012, 00:20
Avatar de kahlito
Colaborador
 
Fecha de Ingreso: marzo-2003
Ubicación: En el Estrecho y el mar
Mensajes: 2.928
Antigüedad: 16 años, 11 meses
Puntos: 62
Respuesta: Error creando formulario de búsqueda avanzada con select option

Hola de nuevo GatorV.

Lo he probado de dos maneras, una intentando hacerlo de la anterior manera pero la verdad ahi me sigo perdiendo sobre todo en esta parte:

Código PHP:
if (marca())
{
    
$condiciones[] = "marca = 'marca'";
}
//if(marca)
//if (marca($_POST['marca'])) 
De ninguna de estas formas maneras me sale


En la segunda opción (usando el campo) he seguido tus aclaraciones y ahora parece que sí lo entiendo y además me va correcto, incluso he añadido un cuarto campo y también va perfecto:

Código PHP:
$query 'SELECT * FROM kites';
$condiciones = array();
if (isset(
$_POST['marca']) && !empty($_POST['marca']))
{
    
// lo agregas al query
    
$condiciones[] = "marca='" $_POST['marca'] . "'"// Aquí sería bueno limpiar tu variable
}
if (isset(
$_POST['modelo']) && !empty($_POST['modelo']))
{
    
// lo agregas al query
    
$condiciones[] = "modelo='" $_POST['modelo'] . "'"// Aquí sería bueno limpiar tu variable
}
if (isset(
$_POST['medidas']) && !empty($_POST['medidas']))
{
    
// lo agregas al query
    
$condiciones[] = "medidas='" $_POST['medidas'] . "'"// Aquí sería bueno limpiar tu variable
}
if (isset(
$_POST['tipo']) && !empty($_POST['tipo']))
{
    
// lo agregas al query
    
$condiciones[] = "tipo='" $_POST['tipo'] . "'"// Aquí sería bueno limpiar tu variable
}
if (
count($condiciones) > 0)
{
    
$query .= ' WHERE ' implode(' AND '$condiciones);

Muchas gracias por tu ayuda
  #6 (permalink)  
Antiguo 03/04/2012, 11:01
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 13 años, 8 meses
Puntos: 2135
Respuesta: Error creando formulario de búsqueda avanzada con select option

Esto era un ejemplo:
Código PHP:
Ver original
  1. if (marca())
  2. {
  3.     $condiciones[] = "marca = 'marca'";
  4. }

No para que lo usaras literal, la idea es que veas la estructura:
Código PHP:
Ver original
  1. if (secumplelacondicionquequiero()) {
  2.       // Agregas al query el valor que quieres
  3. }

Saludos.
  #7 (permalink)  
Antiguo 04/04/2012, 17:40
Avatar de kahlito
Colaborador
 
Fecha de Ingreso: marzo-2003
Ubicación: En el Estrecho y el mar
Mensajes: 2.928
Antigüedad: 16 años, 11 meses
Puntos: 62
Respuesta: Error creando formulario de búsqueda avanzada con select option

Ah ya decía yo.

Perfecto, muchas gracias por todo, un saludo

Etiquetas: creando, formulario, option, select
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 17:40.