Pues como vas a buscar por los 3 campos si en cada opción generas un SQL por separado, peor aun, sobre escribes la variable $sql, por lo cual los valores anteriores se pierden, en todo caso deberías primero comprobar en cuantos campos se van a buscar y de hay generar el SQL...
Código PHP:
Ver original<?php
$sql = 'SELECT * FROM mi tabla WHERE ';
$filtroAgregado = false;
if (isset($_POST['campo1'])) { $sql .= ' campo1 = "'.$_POST['campo1'].'" ';
$filtroAgregado = true;
}
if (isset($_POST['campo2'])) { $sql .= $filtroAgregado ? ' OR ' : '';
$sql .= ' campo2 LIKE "%'.$_POST['campo2'].'%" ';
$filtroAgregado = true;
}
if (isset($_POST['campo3'])) { $sql .= $filtroAgregado ? ' OR ' : '';
$sql .= ' campo3 = "'.$_POST['campo3'].'" ';
$filtroAgregado = true;
}
echo $sql;
PD se me olvido comprobar si se agrego ya un filtro, es algo rustico y nada limpio, pero es solo para dar una idea