Поиск базы данных MySQL с несколькими полями в форме

Я создал форму, в которой пользователь может искать базу данных, и результат зависит от того, как пользователь заполняет форму.
Например, скажем, у меня есть имя, адрес, город, штат и почтовый ящик, и пользователь заполняет поля имени и города, результаты отражают ввод. Когда отображается форма, отображаются все записи. для этого я пишу это:

if(isset($_POST['submit'])) { $sql = mysql_query("SELECT * FROM table WHERE name LIKE '%" . $_POST['name'] . "%' OR address LIKE '%" . $_POST['address'] . "%' OR city LIKE '%" . $_POST['city'] . "%' OR state LIKE '%" . $_POST['state'] . "%' OR zip LIKE '%" . $_POST['zip'] . "%'"); } <form method="post" action="<?php $_SERVER['PHP_SELF']; ?>"> <tr> <td>Name:</td> <td><input type="text" name="name" /></td> </tr> <tr> <td>Address:</td> <td><input type="text" name="address" /></td> </tr> <tr> <td>City:</td> <td><input type="text" name="city" /></td> </tr> <tr> <td>State:</td> <td><input type="text" name="state" /></td> </tr> <tr> <td>Zip:</td> <td><input type="text" name="zip" /></td> </tr> <tr> <td>&nbsp;</td> <td><input type="submit" name="submit" value="Search" /></td> </tr> </form> </table> <?php if(isset($_POST['submit'])) { while($row = mysql_fetch_array($sql)) { echo $row['name'] . "<br />"; } } ?> 

Но в этом случае пользователь может оставить поле пустым.

Попробуй это:

 if(isset($_POST['submit'])) { // define the list of fields $fields = array('name', 'address', 'city', 'state', 'zip'); $conditions = array(); // loop through the defined fields foreach($fields as $field){ // if the field is set and not empty if(isset($_POST[$field]) && $_POST[$field] != '') { // create a new condition while escaping the value inputed by the user (SQL Injection) $conditions[] = "`$field` LIKE '%" . mysql_real_escape_string($_POST[$field]) . "%'"; } } // builds the query $query = "SELECT * FROM TABLE "; // if there are conditions defined if(count($conditions) > 0) { // append the conditions $query .= "WHERE " . implode (' AND ', $conditions); // you can change to 'OR', but I suggest to apply the filters cumulative } $result = mysql_query($query);