php - 我的代码有什么问题?

标签 php mysql

<分区>

我试图让用户根据名称、价格等对 mysql 查询进行排序。这个下拉菜单赋予他们这样做的能力,它根据用户的选择更改“ORDER BY”子句。现在是凌晨 3 点,我就是找不到错误:

    <?php
        $sortBy = $_POST['sortBy'];
        if ($sortBy) {

            $priceLowToHigh = $_POST['price-low-to-high'];
            $priceHighToLow = $_POST['price-high-to-low'];
            $dateMostRecent = $_POST['date-most-recent'];
            $dateOldest = $_POST['date-oldest'];
            $alphabeticalOrder = $_POST['alphabetical-order'];

            if ($priceLowToHigh) {
                $sortOrder = "price ASC";
            } elseif ($priceHighToLow) {
                $sortOrder = "price DESC";
            } elseif ($dateMostRecent) {
                $sortOrder = "date DESC";
            } elseif ($dateOldest) {
                $sortOrder = "date ASC";
            } elseif ($alphabeticalOrder) {
                $sortOrder = "name ASC";
            }

        } else {
            $sortOrder = "date DESC";
        }
    ?>
    <form action="" method="post">
        <select name="sortBy" onchange="this.form.submit()">
            <option>Sort By</option>
            <option value="price-low-to-high">Price (low to high)</option>
            <option value="price-high-to-low">Price (high to low)</option>
            <option value="date-most-recent">Date (most recent)</option>
            <option value="date-oldest">Date (oldest)</option>
            <option value="alphabetical-order">Alphabetical Order</option>
        </select>
    </form>

后面的 ORDER BY 子句是这样使用的:

    $query = mysql_query("SELECT * FROM products WHERE category = $categoryId ORDER BY $sortOrder");

最佳答案

您对菜单的处理不正确。您的 $sortBy 变量已经是用户选择的内容,而不是单独的 $_POST 字段。

这是你应该做的——

<?php
    $sortBy = $_POST['sortBy'];
    if($sortBy == 'price-low-to-high') {
        $sortOrder = "price ASC";
    } else if($sortBy == 'price-high-to-low') {
        $sortOrder = "price DESC";
    } else if($sortBy == 'date-most-recent') {
        $sortOrder = "date DESC";
    } else if($sortBy == 'date-oldest') {
        $sortOrder = "date ASC";
    } else if($sortBy == 'alphabetical-order') {
        $sortOrder = "name ASC";
    } else {
        $sortOrder = "date DESC";
    }
?>

关于php - 我的代码有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3170497/

相关文章:

mysql - Count 函数仅返回一行,但仅显示一位客户的前 5 个航类号的计数。这里有什么问题?

mysql - 如何将列的值分配给变量?

php - 不使用 php 的电子邮件表单提交

php - 跟踪帖子浏览量

php - Laravel Http::get 无法在 Controller 上工作

php - Doctrine 模型数组数据类型

php - 获得完整的结果

php - 删除记录后的Mysql递减其他ID

php - 使用外键获取值时出现问题

php - MySQL中基于两个年龄字段的年龄范围查询