Bueno .. en ese caso lo que requieres es "componer" tu sentencia SQL que en el fondo para PHP no es más que un "string" más cualquier (cadena) según tengas o no valores definidos en esas 3 variabels que manejas ..
algo tipo:
Código PHP:
$sql = "SELECT * FROM tabla WHERE ";
if (!empty($_POST['nombre'])){
$sql .= " categoria = '".$_POST['categoria']."' ";
}
if (!emtpy($_POST['categoria'])){
$sql .= " AND categoria = '".$_POST['categoria']."'";
}
$sql .= " ORDER BY talcampo";
// y ejecutas tu consulta...
mysql_query($sql);
Y así con el resto .. es cosa de componer tu sentencia SQL como si de un string se tratase bajo tus condiciones de que tus variables tengan valor ... Imagina el sistema componiendo sentencias SQL para todos los casos ..
Un saludo,