Para que te muestre los que empiezan por la cadena que pasas es lo que dice hernandos.
El otro fallo es porque estas poniendo en la consulta todos los campos, aunque no tengan valor en el formulario. Con los campos string te sale bien de casualidad, porque al ser el campo vacio estas buscando '%%' que es cualquier cadena. Lo que tienes que hacer es crear la parte where solo con los campos que tiene valor en el formulario:
Código PHP:
$where=array();
if (!empty($_POST['nombre'])) {
$where[]="Nombre LIKE '{$_POST['nombre']}%'";
}
if (!empty($_POST['apellido'])) {
$where[]="Apellido LIKE '{$_POST['apellido']}%'";
}
if (!empty($_POST['edad'])) {
$where[]="edad={$_POST['edad']}";
}
if (0==count($where)) {
$cad_where='';
} else {
$cad_where=implode(' AND ',$where);
$cad_where='WHERE '.$cad_where;
}
$sql = "SELECT *FROM datos $cad_where ORDER By Apellido";