【问题标题】:Query to select value from drop down menu for given range查询以从给定范围的下拉菜单中选择值
【发布时间】:2018-12-31 19:00:37
【问题描述】:

我正在制作 metrimonial 网站,我想根据下拉菜单中具有不同年龄组的条件进行搜索查询

<select class="form-input" id="age" name="age"  >
    <option value="Age"> <div class="dot"></div> Age</option>
    <option value="1"> <div class="dot"></div> 0-20/option>
    <option value="2"> <div class="dot"> </div>21-30</option>
    <option value="3"> <div class="dot"></div> 31-40</option>
    <option value="4"> <div class="dot"></div> >40 </option>
</select>

我想显示所有满足上述任何年龄条件的用户 我尝试在 sql 中使用上述 switch case,但没有得到任何结果。

$age = mysqli_real_escape_string($db, $_POST['age']);
echo $age;

switch ($age) {
    case 1: $age = ' AND age BETWEEN 100 AND 130 ';  break;
    case 2: $age = ' AND age BETWEEN 131 AND 150 ';  break;
    case 3: $age = ' AND age BETWEEN 151 AND 200 ';  break;
}

$result = mysqli_query($db,
    "SELECT * 
    FROM approved_user 
    WHERE 
        first_name= '$fn'
        OR age=$age "
) or die(mysqli_error($db));

while ($row3 = mysqli_fetch_array($result)) {
    $id     = $row3['id'];
    $fname  = $row3['first_name'];
    $lname  = $row3['surname'];
    $dob    = $row3['dob'];
    $gender = $row3['gender'];
    $age    = $row3['age'];
}

所以请帮忙。

【问题讨论】:

  • 如果您检查mysqli errors,您会注意到您遇到了语法错误,因为WHERE (first_name = 'bob') OR ( AND age between 100 and 130) 不是有效的语法。删除 AND
  • 还是不行
  • 在查询后检查 mysqli errors 以找出失败的原因。由于您没有使用prepared statements,因此您可以尝试回显您的查询并直接在数据库中运行它以查看它是否在那里工作。

标签: php html sql input


【解决方案1】:

您生成的查询没有意义。

例如给定以下值:

$age = "  AND age BETWEEN 100 AND 130 ";

这个表达式:

"SELECT * FROM approved_user WHERE (first_name= '$fn') OR  (age=$age)"

实际会生成:

"SELECT * FROM approved_user WHERE (first_name= '$fn') OR  (age= AND age BETWEEN 100 AND 130)"

这不是有效的 SQL。你可能想要:

switch ($age) {
    case 1: $filter = "100 AND 130";  break; 
    case 2: $filter = "131 AND 150";  break;  
    case 3: $filter = "151 AND 200";  break;   
 }

 $result = mysqli_query($db,
    "SELECT *
    FROM approved_user 
    WHERE 
        first_name= '$fn' 
        OR age BETWEEN $filter"
) or die(mysqli_error($db));

【讨论】:

  • 当我执行上面的查询时它不工作我的页面继续加载
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-02
  • 2013-04-20
  • 2019-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多