denny911 0 Posted May 11, 2007 Report Share Posted May 11, 2007 Hello to everyone.I have a sort of search form on my. it consists of three form items.on the search.php i have a select statement with variables (i get them from $_GET variables coming from my form) included.something like this:$ctg = $_GET['frm_category'];$type = $_GET['frm_type'];$city = $_GET['frm_city']; " SELECT * FROM $table1, tbl_users WHERE category = '$ctg' AND type = '$type'AND city = '$city' ORDER BY.. " all in all, everything works just fine, UNLESS one (or several fields) not selected (their values being passed with NO VALUE).how can i avoid using ONE or MORE variables in my SELECT statement if no value has been passed from my form?i managed to do so using the IF statement(if VARIABLE empty --STATEMENT WITHOUT THAT VARIABLE-- else --STATEMENT WITH THAT VARIABLE INCLUDED)but, this seems to be complicated, so i wonder if there's any other way?I'm pretty new to PHP so.. :)Thanks in advanceDenis K., Bosnia H. Quote Link to post Share on other sites
Lulzim 3 Posted May 11, 2007 Report Share Posted May 11, 2007 well, one solution would be to use wildcards "SELECT * FROM $table1, tbl_users WHERE category LIKE '%".$ctg."' AND type LIKE '%".$type."'AND city LIKE '%".$city".'" Quote Link to post Share on other sites
justsomeguy 1,135 Posted May 11, 2007 Report Share Posted May 11, 2007 i managed to do so using the IF statement(if VARIABLE empty --STATEMENT WITHOUT THAT VARIABLE-- else --STATEMENT WITH THAT VARIABLE INCLUDED)That's the best way to do it, if you can find something that is less complicated then a basic if statement, please let the programming community know. Quote Link to post Share on other sites
henryhenry 0 Posted May 11, 2007 Report Share Posted May 11, 2007 Maybe there should be a 'why not' statement in PHP?! That would be fun! Uh. I literally just did something like your doing. I put the 'LIKE' statements into an array so : $likes= array();foreach ($values as $k=>$v) { if (isset($_GET['this'])) { $this= $_GET['this']; likes[]= "word LIKE '$this'"; } elseif ...} then in the query you use implode(" AND ", $likes)or you can change to OR (can't mix with this method) if the likes are optionalso something like $sql= "SELECT col FROM table WHERE ".implode(" AND ", $likes); This method I suppose isn't simpler as you're using more loops and arrays. I suppose you can't get simpler than if...else like justsomeguy says! But I like my method Maybe it will be useful for you! Quote Link to post Share on other sites
justsomeguy 1,135 Posted May 11, 2007 Report Share Posted May 11, 2007 Right. This is about as easy as it gets: $sql = "SELECT * FROM $table1, tbl_users ";$where = "";if ($ctg != "") $where .= " WHERE category = '$ctg'";if ($type != ""){ if ($where == "") $where .= " WHERE "; else $where .= " AND "; $where .= "type = '$type'";}if ($city != ""){ if ($where == "") $where .= " WHERE "; else $where .= " AND "; $where .= "city = '$city'";}$sql .= $where . " ORDER BY ..."; It might be a lot of code (I format my code for readability over compactness), but it is easy to read and it will execute quickly. If you want code that is more compact, you can replace this: if ($where == "") $where .= " WHERE "; else $where .= " AND "; With this: $where .= ($where == "" ? " WHERE " : " AND "); to get this: $sql = "SELECT * FROM $table1, tbl_users ";$where = "";if ($ctg != "") $where .= " WHERE category = '$ctg'";if ($type != "") $where .= ($where == "" ? " WHERE " : " AND ") . "type = '$type'";if ($city != "") $where .= ($where == "" ? " WHERE " : " AND ") . "city = '$city'";$sql .= $where . " ORDER BY ..."; Quote Link to post Share on other sites
denny911 0 Posted May 14, 2007 Author Report Share Posted May 14, 2007 well guys, it seems LULZIM gave me the most suitable solution.yes, i had to do some modification in order for the code to work (i had my categories' id's numbered from 1 to 34) so now i changed them to end in 0 (zero) so that Lulzim's condition LIKE %$category would work if there's no value passed from the form (since there's no category id = 0)--thanks to all of you who wanted to help.see you next timep.s. i have a new topic in PHP category so if ur interested in it, take a look!Denis Quote Link to post Share on other sites
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.