Hola,
Posiblemente, el problema es de lógica, cuando la variable $nombre esté vacía va a hacer un match de todos los que 'no tengan nombre' y cualquier marca; la misma situación con la marca. Por lo tanto en ninguno de los dos casos va a funcionar.
En este caso hay cuatro posibilidades, que no tengas ni nombre ni marca, que tengas nombre pero sin marca, que no tengas nombre pero si marca, y el último que tengas nombre y marca.
Hay quienes lo resuleven con cuatro instrucciones SQL diferentes. Otros formando la instrucción SQL por partes. Por ejemplo, van creando la instrucción SQL dependiendo de los valores que te mandan:
http://www.forosdelweb.com/f18/consu...terios-732453/
Saludos,
ps:
La verdadera solución, a ver quien la agarra:
(('$nombre' = '' or mo.nombre = '$nombre') and ('$sel' = '' or mo.mar_id_marca = '$sel'));
(Evidentemente el otro post nadie la entendió)