Skip to content
Advertisement

Search function when one field is blank

I need to know if there’s a more efficient way to do a search when a user leaves a blank field

<select name="department">
    <option value="">Select Department</option>
    <option value="value1">Value1</option>
    <option value="value2">Value2</option>
</select>
<select name="course">
    <option value="">Select Course</option>
    <option value="value1">Value1</option>
    <option value="value2">Value2</option>
</select>

My question is how do I do this? My own conclusion was to use a variety of

if(isset($_GET['dept']) && !isset)

and so on then corresponding each with its own SELECT * FROM.... but this seems so bothersome and not that dynamic especially if I decided to add a third or fourth field and it’ll be a whole new additional set of ifs. Is there a more efficient way to do this?

Perhaps in MySQL?

Advertisement

Answer

Like I said in the comments section, I don’t know if this is more efficient, but I think it’s easier to read and will help ease the pain of changing all conditions of your statement. I did not find tutorials about things like that, but here’s a modified example of something I’ve done in the past for a real estate company:

if(isset($_POST['search'])){
    $prov_query = '';
    $city_query = '';
    $build_query = '';
    $trans_query = '';
    $amb_query = '';
    $prov = $_POST['province'];
    $city = $_POST['city'];
    $build = $_POST['building'];
    $trans = $_POST['transaction'];
    $amb = $_POST['amb'];
    if($prov != ''){
        $prov_query = "`province`='$prov'";
    }
    if($city != ''){
        $city_query = "`city`='$city'";
    }
    if($build != '' && $build != '0'){
        $build_query = "AND `building`='$build'";
    }
    if($trans != '' && $trans != '0'){
        $trans_query = "AND `transaction`='$trans'";
    }
    if($amb != ''){
        if($amb == 5){
            $amb_query = "`amb`>='5'";
        } else {
            $amb_query = "`amb`='$amb'";
        }
    }
    $full_search_query = "SELECT * FROM `properties` WHERE $prov_query AND $city_query $build_query $trans_query AND $amb_query ORDER BY `id` DESC";
}

Please note, for search engines, you might want to use

"`column` LIKE '%$value%'"

or something similar as your SQL query, but my example required exact matches.

This has a few requirement tweaks, your conditionals will definitely be different than these, but I just want to share the idea. You see, all you have to do if you want to add more options (columns) is add a set of if‘s that match your requirement and then accordingly add the variable to the final string. Hope this helps at least a little.

User contributions licensed under: CC BY-SA
6 People found this is helpful
Advertisement