PHP - combobox

 
Vista:
sin imagen de perfil

combobox

Publicado por joselo (7 intervenciones) el 09/05/2010 00:40:27
hola tengo el siguiente problema. tengo un form con tres combos que pasan variables a otra pagina con el objeto de ejecutar una consulta, el problema que tengo es con la opcion por defecto de cada combo.

<option value="0" selected>Todos</option>

donde el valor asignado es 0 o * o "". la cuestion es a la hora de ejecutar la consulta como hago para que en el / los casos en que se elijan "TODOS" la consulta filtre con las otras varibles. espero haberme explicado. a continuacion coloco la consulta.

SELECT * FROM parque INNER JOIN marcas ON parque.idmarca = marcas.idmarca WHERE marcas.idmarca = '$_GET[Marca]' AND parque.vehimodelo = '$_GET[modelo]' AND parque.vehicombus = '$_GET[combustible]' ORDER BY vehiano

$_GET[Marca]; $_GET[modelo] y $_GET[combustible] son las variables de los combos, el problema esta en como hago la consulta cuando aparecen algunos de ellos o los tres con el valor de la opcion "todos". por favor soy nuevo en esto y para mi es un callejon sin salida. saludos y gracias de antemano
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

RE:combobox

Publicado por Iñaki (6 intervenciones) el 09/05/2010 01:57:52
Una de las cosas que puedes hacer es separar la consulta en varias partes:
strsql = "select * from ,......." '
strparam = " where ......." ' parametros

luego pasar a variables lo recogido en los combos

if ($_GET["MARCA"] =="Todos") {
$Marca = "%";
} else {
$Marca = $_GET["MARCA"] ;
}

de este modo:

strparam = " where marcas.idmarca = " . $Marca and .........." ' aqui los restantes parametros

luego la cadena final

strsql = strsql & strparam;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:combobox

Publicado por joselo (7 intervenciones) el 09/05/2010 02:10:43
hola iñaki, te agradezco tu respuesta, entiendo lo que dices pero la verdad nunca hice nada parecido y me quedan algunas dudas. una, si definimos la variable $Marca= "%" eso q significa? igual entra en la consulta final?. segundo la estructura del codigo seria

strsql = "select * from ,......." '
strparam

luego

if ($_GET["MARCA"] =="Todos") {
$Marca = "%";
} else {
$Marca = $_GET["MARCA"] ;
}

osea todas las variables recogidas, y luego? veo q defines dos veces strsql y strparam. espero no ser pesado. de todas formas comienzo a probarlo, muchas gracias!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:combobox

Publicado por Carlos Guimaraenz (12 intervenciones) el 10/05/2010 20:20:56
Hola Joselo,
cuando el valor de algunos de los parámetros (por ejemplo $_GET['marca']) equivale a 0, quiere decir que no se filtra por ninguno en particular, por ende no lo incluírias en la cláusula WHERE:

Ejemplo:

// INICIALIZO LA VARIABLE $where, SI ES DIFERENTE A 0 (CERO) SE INICIALIZA COMO CADENA VACÍA, SINO COMENZAMOS CON EL WHERE, CON EL AND PARA CONCATENAR CON EL SIGUIENTE PARAMETRO
$where = ($_GET['marca'] != 0 ? "marcas.idmarca = {$_GET['marca']} AND " : "");

// LUEGO CONCATENAMOS A LA VARIABLE $where EL SIGUIENTE PARAMETRO, DE LA MISMA MANERA
$where .= ($_GET['modelo'] != 0 ? "parque.vehimodelo = {$_GET['modelo']} AND " : "");

// Y TERMINAMOS CON EL TERCER PARAMETRO, IGUAL AL ANTERIOR
$where .= ($_GET['combustible'] != 0 ? "parque.vehicombus = {$_GET['combustible']} AND " : "");

Luego, podemos hacer la consulta:

// VERIFICAMOS $where: SI ESTÁ VACIA, LA DEJAMOS TAL COMO ESTÁ, SINO AGREGAMOS LA PALABRA CLAVE "WHERE" DELANTE Y QUITAMOS EL ÚLTIMO "AND", YA QUE SIEMPRE HABRÁ UNO DE MÁS
if ($where != "") {
$where = "WHERE " . $where . substr($where,0,-5); // QUITO EL " AND "
}

$query = "SELECT * FROM parque INNER JOIN marcas ON parque.idmarca = marcas.idmarca $where ORDER BY vehiano";

Espero haber sido claro, cualquier duda acerca de mi explicación, me avisas. Saludos!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:combobox

Publicado por joselo (7 intervenciones) el 11/05/2010 00:33:44
hola carlos, gracias por tu respuesta, esta muy buena, en mis pocos conocimientos pense que podia haber alguna "funcion" que permita esto, pero por lo que veo es cuestion de echar mano al código nada mas, te cuento que en mi urgencia lo resolvi " a lo indio" es decir verfifique con un IF cada parametro vacio y en funcion de eso ejecutaba todo el codigo, es decir si "marca" estaba vacio ---> ejecutaba el select sin marca, y asi por cada uno. Voy a entrar en detalle con tu propuesta porq veo es q esta muy buien resuelta, acabo de aprender como meter las variables tambien dentro de las consultas asiq mil gracias, no te pierdas porque segurpo que algun detalle me queda en el aire, jajaj saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:combobox

Publicado por Carlos Guimaraenz (12 intervenciones) el 11/05/2010 05:49:12
Cuando necesites, para eso estamos, siempre vamos a encontrar a alguien que sepa más que nosotros y lo comparte afortunadamente.
Nos encontramos en la próxima duda ;)

Saludos!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:combobox

Publicado por Carlos Guimaraenz (12 intervenciones) el 11/05/2010 05:51:17
Fe de erratas:

// INICIALIZO LA VARIABLE $where, SI ES DIFERENTE A 0 (CERO) SE INICIALIZA COMO CADENA VACÍA, SINO COMENZAMOS CON EL WHERE, CON EL AND PARA CONCATENAR CON EL SIGUIENTE PARAMETRO
$where = ($_GET['marca'] != 0 ? "marcas.idmarca = {$_GET['marca']} AND " : "");

Debería ser "SI ES IGUAL A 0 (CERO) SE INICIALIZA COMO CADENA VACÍA ......"
ya que si es diferente lo filtramos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar