Php 查询中使用select opion的多个位置

Php 查询中使用select opion的多个位置,php,mysql,where,Php,Mysql,Where,我想做一个像这样的多重选择 <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

我想做一个像这样的多重选择

<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>
如果有人能帮助我,我需要使用multi-where按我的选择对结果进行排序


Thx

试试这样的东西。性别和年龄字段应在表中

 $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)." ");

}

您需要使用和

您需要构建一个动态查询来执行此操作。从基本存根开始

$sql = "SELECT * FROM users ";
然后需要将初始子句设置为WHERE

 $clause = " WHERE ";//Initial clause
检查是否设置了$_POST['filter']

然后使用switch case开始构建查询

//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;      
}
您将需要重新编号年龄选项

<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_uuu函数已被弃用

您想在表单中使用多选吗?是的,用于对我的工作结果进行排序,但我想进行筛选,只有当我单击“提交”时,如果我不单击“提交”,我会看到所有未经筛选的行,这是可能的?在您的情况下:如果$POST['filter']{echo//statement}我明白了,但是如果我为年龄和女性选择任何,他在我的“年龄”中不工作,在我的性别选择中选择en-female,他不工作如果你选择任何你想显示所有结果吗?
//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>