Y para armar las consultas, te pego un trozo de mi código, q se entiende más o menos bien:
Código PHP:
//Así armo la clausula where!
$where = '';
//Creamos la consulta de búsqueda!
$where = doWhere($where, 'estado', $vEstado, 0);
$where = doWhere($where, 'osalida', $vOficina, 0);
$where = doWhereLike($where, 'nombre+apellidos', $vConductor);
$where = doWhereLike($where, 'localizador', $vLocalizador);
$where = doWhereLike($where, 'nreserva', $vNreserva);
$where = doWhere($where, 'fsalida', invertDate($vDesde), 1, '>=');
$where = doWhere($where, 'fsalida', invertDate($vHasta), 1, '<=');
$where = doWhere($where, 'id_grupo', $vGrupo, 0);
Y las dos funciones que uso (invertDate sólo hace eso... invertir la fecha xD), son estas:
Código PHP:
function doWhere($where, $campo, $value, $text = 1, $comp = '=') {
if(isset($where) && !empty($where)) {
if(isset($value) && !empty($value)) {
$where .= ' AND ';
if($text) $where .= "`$campo`$comp'$value'";
else $where .= "`$campo`$comp$value";
}
}
else {
if(isset($value) && !empty($value) ) {
$where = 'WHERE ';
if($text) $where .= "`$campo`$comp'$value'";
else $where .= "`$campo`$comp$value";
}
}
return $where;
}
function doWhereLike($where, $campo, $value) {
if(strpos($campo, '+')) {
$campos = explode('+', $campo);
$campo = " CONCAT(`".$campos[0]."`,' ',`".$campos[1]."`) ";
}
if(isset($where) && !empty($where) ) {
if(isset($value) && !empty($value)) {
$where .= ' AND ';
if(!isset($campos)) $where .= "`$campo` LIKE '%$value%'";
else $where .= "$campo LIKE '%$value%'";
}
}
else {
if(isset($value) && !empty($value)) {
$where = 'WHERE ';
if(!isset($campos)) $where .= "`$campo` LIKE '%$value'%";
else $where .= "$campo LIKE '%$value%'";
}
}
return $where;
}
Básicamente, a explicar:
Ambas funciones añaden comparaciones (en caso de existir alguna previa) o arman la comparación a partir del $where q les pasas como parámetro.
$campo es el nombre del campo SQL
$value es el valor que le das
$text es 1 si es texto, 0 si es falso
$comp es el tipo de comparacion. Por defecto, es "=" (puedes poner >, <, <=, >=...)
Y en doWhereLike arma un Like para buscar coincidencias.
Automáticamente pone un % al principio y al final. Y para poner varios campos juntos (ej: nombre y apellidos) pondrías un 'nombre+apellidos' en el $campo.. con el + le indicas que son varios campos (de momento, sólo deja 2.. no he necesitado nunca más. Supongo que si algun dia necesito 3 lo adaptaré xD)
No sé si te servirá :)
Edit: La parte de validación es previa a este paso... eso corre a tu cuenta ;)
Edit 2:
He revisado tu código.. tenías los if's muy anidados, cosa innecesaria.
Podrías haber tenido algo así:
Código PHP:
//Para cada valor
if($buscar_autor != NULL) {
if(!isset($restriccion)) $restriccion = "`autor`='$buscar_autor' ";
else $restriccion .= " AND `autor`='$buscar_autor' ";
}
Y así sólo habrias tenido 5 if's, ninguno anidado...
De todas formas, te adjunto lo q tenías hecho "pasado" con mis funciones ;)
Código PHP:
<?php
$buscar_titulo = getGET('titulo', NULL);
$buscar_autor = getGET('autor', NULL);
$buscar_formato = getGET('formato', NULL);
$buscar_visitas = getGET('visitas', NULL);
$buscar_categoria = getGET('categoria', NULL);
$buscar_tamano = getGET('tamano', NULL);
$restriccion="";
$restriccion = doWhereLike($restriccion, 'titulo', $buscar_titulo);
$restriccion = doWhere($restriccion,'autor', $buscar_autor);
$restriccion = doWhere($restriccion, 'formato', $buscar_formato);
$restriccion = doWhere($restriccion, 'visitas', $buscar_visitas, 1, '>=');
$restriccion = doWhere($restriccion, 'categoria', $buscar_categoria);
$restriccion = doWhere($restriccion, 'tamano', $buscar_tamano, 1, '>=');
if(!isset($_GET['resultados_pagina']))
{
$_GET['resultados_pagina']=10;
}
if(isset($_GET['pagina'])){
$pagina= $_GET['pagina'];
}else{
$pagina=1;
}
$limite = " LIMIT ".($pagina-1)*$_GET['resultados_pagina'].",".$_GET['resultados_pagina'];
$ruta = "SELECT foto_id, tamano, categoria, visitas, autor, titulo, formato FROM fotos $restriccion ORDER BY fecha DESC $limite";
?>
Quedaría algo así :)
Un saludo!