hola triby gracias por tu respuesta y disculpa la tardanza de la mia,
Es verdad que usar filtros es lo mas recomendable como me planteas, pero el problema es que yo antes de armar la consulta tengo que validar las variables que llegan para decidir como crear la consulta, aunque me parece de maravilla como usaste el implode
pues resulta que hice algunos cambios y ya me da el resultado que esperaba, aunque sigo con mis dudas sobre la programacion, en fin hice lo siguiente:
En la primer parte hice un pequeño cambio, en lugar de concatenar en la cadena que guarda la consulta, concateno en una cadena auxiliar
Código PHP:
Ver original<?php
//recibo variables
$fecha = $_GET['fecha'];
$anio = $_GET['anio'];
$trim = $_GET['trim'];
$clases = $_GET['clases']; //arreglo
$query = "select * from tabla where id='$id' and "; //esta linea siempre sera igual
$cad1 = ""; //cadena auxiliar 1
if($fecha!="s"){ //si el input de fecha no esta vació
$cad1 .= "fecha='$fecha' ";
} else{
//si el usuario elige año y trimestre
if($anio!="s" && $trim!="s"){
//entonces yo armo la fecha de inicio y la fecha final en base al trimestre correspondiente
$trim = explode("/",$trim); //recibo el trimestre: mm-dd/mm-dd $trim_ini = $trim[0];
$trim_fin = $trim[1];
$fecha_ini = $anio."-".$trim_ini;
$fecha_fin = $anio."-".$trim_fin;
//hago la condición de la consulta
$cad1 .= "fecha between '$fecha_ini' and '$fecha_fin' ";
}
else{
//si solo eligio el año
if($anio!="s"){
$cad1 .= "left(fecha, 4)='$anio' ";
}
}
}
?>
el problema era como armaba la segunda parte, que estaba atenida a la primera, por lo que, agregue una segunda cadena auxiliar para concatenar la parte de los arreglos:
Código PHP:
Ver original<?php
$cad2 = ""; //cadena auxiliar 2
$NroClases = count($clase); //cuantos valores trae el arreglo if($NroClases!="0"){ //si el arreglo no esta vacio
for($i=0;$i<$NroClases;$i++){
if($clase[$i]!="s"){
//concateno en la cadena auxiliar
$cad2 .= "id_".$array_clases[$i]."='".$clase[$i]."' ";
$cad2 .= "and ";
}
}
$cad2 = substr($cad2,0, -4); //le quito el ultimo and }
//armo la otra parte del where de la consulta dependiendo de si hay cad1 y/o cad2
if($cad1!="" && $cad2!=""){
$query .= $cad1." and ".$cad2;
} else{
if($cad1!="" && $cad2==""){
$query .= $cad1;
} else{
if($cad2!="" && $cad1==""){
$query .= $cad2;
}
}
}
//concluyo la consulta con un order by
$query .= " order by id_arch ASC";
//imprimo los valores
echo $row3['id'];
....
}
?>
Con esos cambios ya se hace la consulta ya sea con los primeros parámetros que recibo (fecha o año y/o trimestre) o con los parámetros del arreglo
Aunque para otros casos la solución idónea debería ser como lo planteas Triby gracias