has andado cerca, el problema de como lo haces es que incluyes los AND aunque el usuario no haya ingresado lo primero y por tanto empieza con AND, fijate en este, lee los comentarios que he puesto:
Código PHP:
$wheres=""; //inicias una variable vacía
if ($marcamodelo) $wheres = "(marca LIKE '%".$marcamodelo."%' OR modelo LIKE '%".$marcamodelo."%')"; // no necesitas UCASE cuando usas like
// en la variable $wheres guardas tu consulta
if ($tipobusca){ // en vez de ver si es falsa revisa que sea verdadera
if($wheres) $wheres.=" AND"; // solo si ya hay datos agregas AND
$wheres.= " tipo LIKE '$tipobusca'"; //en vez de asignar diferentes variables usas una con todas
}
if ($eslorade){ // puedes saber si una variable tiene algo dejandola sola en el if
if($wheres) $wheres.=" AND"; //debes repetirlo en todas
$wheres.= " tipo LIKE '$eslorade'"; //si es texto no olvides las comillas
}// de esta forma no necesitas poner }else{ y te ahorras lineas
if ($esloraa){
f($wheres) $wheres.=" AND"; // no olvides el espacio antes de AND
$wheres.= " eslora <= $esloraa"; // y el espacio antes de cada condicion
}
if ($preciode){ // una variable es falsa si es: 0, NULL, "", false y "0"
f($wheres) $wheres.=" AND"; // el .= sirve para agregar texto
$wheres.= " precio >= $preciode";
}
if ($precioa){
f($wheres) $wheres.=" AND";
$wheres.= " precio <= $precioa";
}
if ($anode){
f($wheres) $wheres.=" AND";
$wheres.= " ano >= $anode";
}
if ($anoa){
f($wheres) $wheres.=" AND";
$wheres.= " ano <= $anoa";
}
// ahora aqui solo pones $where
$sql2 = "SELECT * FROM mibarcobd WHERE $where ORDER BY $orden asc LIMIT $comienzo, $cant_reg";