【问题标题】:PHP - sorting a list using a drop down menuPHP - 使用下拉菜单对列表进行排序
【发布时间】:2012-02-21 23:46:04
【问题描述】:

我被这个困住了,我整个星期都在通过 PHP 速成课程制作一个类似亚马逊的假网站!我想使用下拉菜单订购我的餐桌,但不知道怎么做!我知道 SQL 很简单,但我尝试这样做的方式如下:

例如设置变量

$query = "SELECT bookname, bookauthor, bookpub, bookisbn
                FROM booktable
                ORDER BY bookname ASC";

$query2 = "SELECT bookname, bookauthor, bookpub, bookisbn
            FROM booktable
            ORDER BY bookauthor ASC";

然后我有我的表格=

<form name="sort" action="products.php" method="post">
<select name="order">
   <option value="choose">Make A Selection</option>
   <option value="title">Title</option>
   <option value="author">Author</option>
   <option value="publisher">Publisher</option>
   <option value="isbn">Book ISBN-10</option>
</select>
<input type="submit" value=" - Sort - " />
</form>

现在是我不能做的,

我设置了变量:

$sort = $_POST['order']; 

这样无论下拉菜单的值是什么,都会分配给变量 $sort.....(对吗?)

然后我想说如果 $sort 的值与假设“作者”而不是 $query = $query2 相同 但我不知道该怎么说才不会出现 XAMPP 的巨大错误!

我希望这一切都有意义,并且我尝试实现它的方法接近正确

谢谢

【问题讨论】:

  • if (isset($_POST['order']) &amp;&amp; $_POST['order'] == 'author') { // run query 2 } else { // run query one }

标签: php html drop-down-menu sql-order-by


【解决方案1】:

要排序,我会执行以下操作:

更改选项值以匹配表中的列名 如果他们没有选择任何内容,请设置您的排序选项,包括默认值:

$sort=$_POST["order"]!="choose"?$_POST["order"]:"bookname";

然后只需将您的查询设置为使用:

ORDER BY ".mysql_real_escape_string($sort)." ASC

这样你只需要一个查询,而不是每个案例一个查询。

【讨论】:

  • 非常感谢....这似乎相对简单,但我离它很远!谢谢!
【解决方案2】:

对于这种类型的排序,您不需要 2 或 3 个查询,您可以使用它来完成

<?php
 $sort = @$_POST['order']; 
if (!empty($sort)) { // If you Sort it with value of your  select options
echo $query = "SELECT bookname, bookauthor, bookpub, bookisbn
                FROM booktable
                ORDER BY '".$sort."' ASC";

} else { // else if you do not pass any value from select option will return this
echo    $query = "SELECT bookname, bookauthor, bookpub, bookisbn
                FROM booktable
                ORDER BY bookname ASC";
}
?>


<form name="sort" action="" method="post">
<select name="order">
   <option value="choose">Make A Selection</option>
   <option value="title">Title</option>
   <option value="author">Author</option>
   <option value="publisher">Publisher</option>
   <option value="isbn">Book ISBN-10</option>
</select>
<input type="submit" value=" - Sort - " />
</form>

【讨论】:

  • 虽然之前的答案已经解决了(不知道谁也回答了但他先回答了)但是你的回答很有帮助非常感谢你
【解决方案3】:

有很多方法可以做到这一点,但让我们坚持您的基本方法 - 使用 SQL 的 ORDER BY 子句为您进行排序。您需要做的是根据用户使用下拉菜单所做的选择来修改您的查询(或使用不同的查询)。这是我会做的:

$query = 'SELECT bookname, bookauthor, bookpub, bookisbn FROM booktable';
switch( $_POST['order'] ){
    case 'title':
        $query .= ' ORDER BY bookname ASC';
        break;
    case 'publisher':
        $query .= ' ORDER BY bookpub ASC';
        break;
    case 'author':
        $query .= ' ORDER BY bookauthor ASC';
        break;
    case 'isbn':
        $query .= ' ORDER BY bookisbn ASC';
        break;
}
$results = mysql_query( $query ); // or however you are processing the query

现在,这是正确的,但我个人认为这种类型的 switch 语句是矫枉过正的。如果您只是使用 switch 块根据另一个值更改一个特定值,那么使用 PHP 数组将一个值映射到另一个值会更容易阅读,所以这是另一个我觉得更精简的版本:

$fieldNameMapping = array( 'title'     => 'bookname',
                           'publisher' => 'bookpub',
                           'author'    => 'bookauthor',
                           'isbn'      => 'bookisbn',    );

$query = 'SELECT bookname, bookauthor, bookpub, bookisbn
             FROM booktable ORDER BY ' . $fieldNameMapping[ $_POST['order'] ] . ' ASC';

$results = mysql_query( $query ); // or however you are processing the query

使用这两种方法中的任何一种,请确保在使用之前对$_POST['order'] 进行一些基本的完整性检查。我在示例中省略了任何输入验证或清理,但在获取用户数据并使用它来构建 SQL 查询时,您总是希望格外小心。

【讨论】:

    猜你喜欢
    • 2010-10-14
    • 1970-01-01
    • 2015-11-20
    • 2023-03-03
    • 1970-01-01
    • 2011-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多