Написано неряшливо, и без особого понятия что зачем вообще пишется.
if($response_xml_data)
$response_xml_data у вас не булево значение, значит нужно проверить что вы там хотите получить.
foreach ($data->property as $prop)
неполхо бы проверить что $data->property это непустой массив.
if( isset($_POST['bedrooms']) or
!empty($_POST['bedrooms']) or
isset($_POST['postcode']) or
!empty($_POST['postcode'])){
if($data2->bedrooms == $bedrooms or
$data2->location == $postcode){
echo 'aaaaa';
тут вообще все грустно, !empty и isset вместе, зачем??? если не пустая значит точно есть. А если пост запрос отправлен с пустыми полями - будет существовать но будет пустая. Плодите лишний код - путаетесь в собственных ногах.
Напишите нормально структуру и все заведется.
Пользуйтесь отладкой, хотя бы в пределах print_r, сильно помогает.