У меня есть таблица MySQL, которую я хочу искать через форму POST. Проблема в том, что существует около 17 переменных, которые конечный пользователь может пожелать запросить по отдельности или в комбинации. Это приводит к слишком большому количеству возможностей для выражений else-if. Спросив здесь, я построил следующий запрос:
$query = "SELECT * FROM profiles";
$postParameters = array("name","height","gender","class","death","appro","born","tobiano","modifier","adult","birth","sire","dam","breeder","owner","breed","location");
$whereClause = " WHERE 1 = 1";
foreach ($postParameters as $param) {
if (isset($_POST[$param]) && !empty($_POST[$param])) {
switch ($param) {
case "name":
$whereClause .= " AND ProfileName='".$_POST[$param]."' ";
break;
case "height":
$whereClause .= " AND ProfileHeight='".$_POST[$param]."' ";
break;
case "gender":
$whereClause .= " AND ProfileGenderID='".$_POST[$param]."' ";
break;
case "class":
$whereClause .= " AND ProfileBreedClassID='".$_POST[$param]."' ";
break;
case "death":
$whereClause .= " AND ProfileYearOfDeath='".$_POST[$param]."' ";
break;
case "appro":
$whereClause .= " AND ProfileYearApproved='".$_POST[$param]."' ";
break;
case "born":
$whereClause .= " AND ProfileYearOfBirth='".$_POST[$param]."' ";
break;
case "tobiano":
$whereClause .= " AND ProfileTobianoTest='".$_POST[$param]."' ";
break;
case "modifier":
$whereClause .= " AND ProfileColourModifier='".$_POST[$param]."' ";
break;
case "adult":
$whereClause .= " AND ProfileAdultColourID='".$_POST[$param]."' ";
break;
case "birth":
$whereClause .= " AND ProfileBirthColourID='".$_POST[$param]."' ";
break;
case "sire":
$whereClause .= " AND ProfileSireReg='".$_POST[$param]."' ";
break;
case "dam":
$whereClause .= " AND ProfileDamReg='".$_POST[$param]."' ";
break;
case "breeder":
$whereClause .= " AND ProfileBreederID='".$_POST[$param]."' ";
break;
case "owner":
$whereClause .= " AND ProfileOwnerID='".$_POST[$param]."' ";
break;
case "breed":
$whereClause .= " AND ProfileBreedID='".$_POST[$param]."' ";
break;
case "location":
$whereClause .= " AND ProfileLocationCountryID='".$_POST[$param]."' ";
break;
}
}
}
$query .= $whereClause;
$result = mysql_query("$query");
while ($row = mysql_fetch_array($result)) {
echo $row['ProfileName'] . '<br/>';
}
Спасибо Сагги Малахи за этот метод!