As I said: simply put the basic $sql before you concatenate your AND clauses:
(Note: no guarantee about all the rest of your code, though !!)
(...)
// counting the offset
$offset = ($pageNum - 1) * $rowsPerPage;
//put your initial $sql here
$sql = "SELECT * FROM homes WHERE models LIKE '%$search%' LIMIT $offset, $rowsPerPage";
//leave the rest unchanged
if ($_POST['bed'] != "any") {
$sql .= " AND bed = '".$bed."'";
}
if ($_POST['bath'] != "any") {
$sql .= " AND bath = '".$bath."'";
}
if ($_POST['garage'] != "any") {
$sql .= " AND garage = '".$garage."'";
}
$price_upper_bound = $_POST['price'];
switch($price_upper_bound) {
case "any":
$range = "";
break;
case "0":
$range = " AND (price >= 0) AND (price <= 50000)";
break;
case "1":
$range = " AND (price > 50000) AND (price <= 150000)";
break;
case "2":
$range = " AND (price > 150000) AND (price <= 200000)";
break;
case "3":
$range = " AND (price > 200000) AND (price <= 250000)";
break;
case "4":
$range = " AND (price > 250000) AND (price <= 300000)";
break;
default:
$range = "";
}
$sql .= $range;
// $sql=... has been removed from here
$result = @($sql)
or die("<p>Couldn't execute query: <strong>".mysql_error()."</strong></p>");
//exit php tag to include table opening here
(...)