PHP:基于下拉列表更改变量值

3

我正在学习PHP,但遇到了一个问题。我知道PHP只有在函数中才有作用域,所以我不确定为什么我的switch语句不能改变变量的值。

目标:根据用户下拉菜单的选择更改mysql SELECT语句。

表单:

    <form action="contacts_show.php" method="POST">
    <select name="grade" id="grade">
    <option value="all">All Levels</option>
    <option value="elementary">Elementary</option>
    <option value="middle">Middle</option>
    <option value="senior">Senior</option>
<input type="submit" name="browse" id="browse" value="Browse" />
</form>

PHP(编辑以缩短代码):

$levelSelected = $_POST['grade'];

if ($levelSelected == "all") {
    $querySelect = "SELECT * FROM teachers ORDER BY school ASC";
} else {
    $querySelect = "SELECT * FROM teachers WHERE school LIKE %$levelSelected% ORDER BY school ASC";
}

$query = $querySelect;
$result = mysqli_query($connection, $query);
confirm_query($result);

如有必要,请使用 confirm_query 函数:
    function confirm_query($result_set) {
    if (!$result_set) {
        die("Database query failed.");
    }
}

当从下拉列表中选择“所有级别”时,代码按预期运行。当选择任何其他选项时,我的confirm_query函数会表明查询失败。
我不确定为什么变量的值没有切换。

3
LIKE %elementary% => LIKE '%elementary%',对其他的也做同样的修改。你没有检查数据库错误。如果还是无法运行,则可能是作用域问题。 - Funk Forty Niner
你可以通过使用 mysqli_error 函数来获取 mysqli 的精确错误信息,或者你也可以让 mysqli 抛出异常。 - jeroen
你正在尝试解析字符串而不是整数,应该会出现错误。 请尝试使用'%all%'代替%all%。 - Playdome.io
1个回答

3

进一步解释我的评论:

LIKE %elementary%更改为=> LIKE '%elementary%' 并对其他内容执行相同操作。

您需要在引号中包装模式匹配,根据手册:

mysql> SELECT 'David!' LIKE '%D%v%';
mysql> SELECT 10 LIKE '1%';

您还没有检查数据库错误。

mysqli_query()中添加or die(mysqli_error($connection))

如果仍然不起作用,则可能是范围问题。
将连接传递给您的函数,不要使其全局。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接