如何通过链接动态设置asc / desc的顺序

时间:2014-01-11 20:20:12

标签: php mysql href

我希望能够动态地将一组行的顺序从升序变为降序,反之亦然。

<a href="file.php?sort=">之类的东西,点击sort =“asc”后,再点击sort =“desc”所以我可以用$_GET得到它并把它放在变量上以便在mysql查询中使用它

这是我的一些代码

if(isset($_SESSION['is_logged']) === true)
{
    $url_array      =   array("date_added", "username", "title", "content");

    $order          =   "date_added";
    if (isset($_GET['order_by']) && in_array($order, $url_array))
    {
        $order      =   $_GET['order_by'];
    }

    echo '<table border="1" cellpadding="5" cellspacing="2">';
    echo '<tr>Sort: &#x25BC; <br />'
                . '<th><a href="?order_by=date_added&type=">somestuff</a></th>'
                . '<th><a href="?order_by=username">somestuff</a></th>'
                . '<th><a href="?order_by=title">somestuff</a></th>'
                . '<th><a href="?order_by=content">somestuff</a></th>'
        . '</tr>';


    $query          =   run_q('SELECT * FROM posts as p, users as u WHERE p.added_by=u.user_id ORDER BY '.$order.' DESC');

1 个答案:

答案 0 :(得分:0)

好吧,你的超链接不是指向任何特定的页面,只是一个查询字符串。

试试这个:

echo '<tr>Sort: &#x25BC; <br />'
            . '<th><a href="'.$_SERVER[PHP_SELF].'?order_by=date_added&type=">somestuff</a></th>'
            . '<th><a href="'.$_SERVER[PHP_SELF].'?order_by=username">somestuff</a></th>'
            . '<th><a href="'.$_SERVER[PHP_SELF].'?order_by=title">somestuff</a></th>'
            . '<th><a href="'.$_SERVER[PHP_SELF].'?order_by=content">somestuff</a></th>'
    . '</tr>';

此外,您的查询容易受到注入SQL攻击,因此请将$order变量更改为:

$order = ($order == ("date_added" || "username" || "title" || "content") ? $_GET['order_by'] : "date_added");

这也有减少之前$order = "date_added"行的好处。