Я хочу сделать множественный выбор, как это
<form method="POST" action="">
<select name="age">
<option value="">Any</option>
<option value="0">18-20</option>
<option value="1">21-23</option>
<option value="2">24-27</option>
<option value="3">28-32</option>
<option value="4">33-39</option>
<option value="5">40-49</option>
<option value="6">50+</option>
</select>
<select name="gender">
<option value="">Any</option>
<option value="male">Male</option>
<option value="female">Female</option>
</select>
<input type="submit" name="filtrer" value="Submit">
</form>
и мой запрос это
$retour_messages = mysql_query('SELECT * FROM users ORDER BY id DESC LIMIT '. mysql_real_escape_string ($premiereEntree) .', '. mysql_real_escape_string ($messagesParPage) .'');
Мне нужно сделать несколько, где для сортировки результатов по моему выбору, если кто-то может мне помочь.
Спасибо
Вам нужно построить динамический запрос для выполнения этого. Начните с основной заглушки
$sql = "SELECT * FROM users ";
Затем вам нужно установить начальное предложение в WHERE.
$clause = " WHERE ";//Initial clause
проверить, если $_POST['filtrer']
установлено
if(isset($_POST['filtrer'])){//to run PHP script on submit
Затем начните строить запрос, используя регистр
//age
if(!empty($_POST['age'])){
switch ($_POST['age']) {
case 1:
$sql .= "$clause (age >18 AND <20)";
break;
case 2:
$sql .= "$clause (age >21 AND <23)";
break;
case 3:
$sql .= "$clause (age >24 AND <27)";
break;
case 4:
$sql .= "$clause (age >28 AND <32)";
break;
case 5:
$sql .= "$clause (age >33 AND <39)";
break;
case 6:
$sql .= "$clause (age >40 AND <49)";
break;
case 7:
$sql .= "$clause age >50";
break;
}
Установить пункт И
$clause = " AND ";// Set clause to AND
}
//gender
if(!empty($_POST['gender'])){
switch ($_POST['gender']) {
case 'male':
$sql .= "$clause gender = male";
break;
case 'female':
$sql .= "$clause gender = female";
break;
}
}
$sql .=" ORDER BY id DESC LIMIT";//. mysql_real_escape_string ($premiereEntree) .", ";
echo $sql;
}
Вам потребуется изменить номер возраста
<form method="POST" action="#">
<select name="age">
<option value="">Any</option>
<option value="0">18-20</option>
<option value="2">21-23</option>
<option value="3">24-27</option>
<option value="4">28-32</option>
<option value="5">33-39</option>
<option value="6">40-49</option>
<option value="7">50+</option>
</select>
Было бы целесообразно использовать PDO или Mysqli, поскольку функции mysql_ устарели
Попробуйте что-то вроде этого. Пол и возраст поля должны быть в вашей таблице
$where = array();
if(isset($_POST['age']) && $_POST['age'] !== ''){
$where[] = ' `age` = ' . (int)$_POST['age'];
}
if(isset($_POST['gender']) && $_POST['gender'] !== ''){
$where[] = " `gender` = '" . mysql_real_escape_string(htmlspecialchars(trim($_POST['gender']))) . "' ";
}
$retour_messages = mysql_query('SELECT * FROM users ' . implode(' AND ', $where) . ' ORDER BY id DESC LIMIT '. (int)$premiereEntree .', '. (int)$messagesParPage .'');
Я должен порекомендовать:
if ($_POST['filtrer']){
$age = $_POST['age'];
$gender = $_POST['gender'];
$age_ct = count($age);
$gender_ct = count($gender);
$i=0;
while($i < $age_ct){
$age_SQL .= "'$age[$i]',";
$i++;
}
if ($age_ct < 1){
$age_SQL = " age IN('')";
}else{
$age_SQL = eregi_replace(",$",'',$age_SQL);
$age_SQL = " AND age IN($age_SQL)";
}
$i=0;
while($i < $gender_ct){
$gender_SQL .= "'$gender[$i]',";
$i++;
}
if ($gender_ct < 1){
$gender_SQL = " gender IN('')";
}else{
$gender_SQL = eregi_replace(",$",'',$gender_SQL);
$gender_SQL = " AND gender IN($gender_SQL)";
}
$retour_messages = mysql_query("SELECT * FROM users WHERE 1=1 $age_SQL $gender_SQL ORDER BY id DESC LIMIT ". mysql_real_escape_string($premiereEntree).",".mysql_real_escape_string($messagesParPage)." ");
}
Вам нужно использовать <select name="age[]" multiple>
а также <select name="gender[]" multiple>