【问题标题】:I want to set sort function default as DESC but error is Occuring in php我想将排序函数默认设置为 DESC,但在 php 中发生错误
【发布时间】:2018-02-10 14:21:26
【问题描述】:

您好,我正在尝试在我的代码中添加不同的排序功能。所以添加了升序和降序排序,但我试图在代码中添加的是,当没有选择值时,它应该按默认降序排列。当它选择值时,它应该在下拉菜单中显示选择了哪个值。假设用户选择降序,那么它应该在框中显示降序。这是我的代码。

这是我的 PHP 代码

<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "videoplay";

$conn = mysqli_connect($servername, $username, $password, $dbname) or die("Connection failed: " . mysqli_connect_error());
/* check connection */
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
} 
  
$limit = 20;  
if (isset($_GET["page"])) { $page  = $_GET["page"]; } else { $page=1; };  
$start_from = ($page-1) * $limit;  
$name = $_GET['name'];
$sort = $_GET['sort'];
$sql = "SELECT * FROM video where type= 'Video/Trailer' IF  ORDER BY vid  ".$sort." IS NULL THEN SET DESC  AS DEFAULT LIMIT $start_from, $limit";  
$rs_result = mysqli_query($conn, $sql);  
?> 

<form action="#">
<select class="select" onChange="top.location.href=this.options[this.selectedIndex].value;">
<option value="<?php echo $value ; ?>" selected="<?php echo $selected; ?>"><?php echo $name; ?></option>
<option  name="Ascending" value="videos.php?sort=ASC">Ascending </option>
<option name="Descending" value="videos.php?sort=DESC">Descending</option>
  
</select>
</form>     

【问题讨论】:

  • 为什么不检查 GET['sort'] 是否为空|null,而不是将 $sort 的默认值设置为 DESC?

标签: php mysql sorting


【解决方案1】:
<?php
    $servername = "localhost";
    $username = "root";
    $password = "";
    $dbname = "videoplay";

    $conn = mysqli_connect($servername, $username, $password, $dbname) or die("Connection failed: " . mysqli_connect_error());
    /* check connection */
    if (mysqli_connect_errno()) {
        printf("Connect failed: %s\n", mysqli_connect_error());
        exit();
    } 

    $limit = 20;  
    if (isset($_GET["page"])) { $page  = $_GET["page"]; } else { $page=1; };  
    $start_from = ($page-1) * $limit;  
    $name = $_GET['name'];

    $sort = isset($_GET['sort']) ? $_GET['sort'] : "DESC";

    $sql = "SELECT * FROM video WHERE type = 'Video/Trailer' ORDER BY vid $sort LIMIT $start_from, $limit";  
    $rs_result = mysqli_query($conn, $sql);  
?> 

您可以使用基本的三元运算符来检查是否发送了sort

$sort = isset($_GET['sort']) ? $_GET['sort'] : "DESC";

三元运算符由三部分组成:比较、真比较、假比较。

  1. isset($_GET['sort']) - 比较:sort 发送了吗?
  2. $_GET['sort'] - 真正的比较:如果,则将其分配给$sort 变量。
  3. "DESC" - 错误比较:如果不是,则分配默认的DESC 值。

我还从您的查询中删除了不必要的内容。

$sql = "SELECT * FROM video 
        WHERE type = 'Video/Trailer' 
        ORDER BY vid $sort 
        LIMIT $start_from, $limit";

需要注意的是,你应该使用prepared statements来防止SQL注入。

【讨论】:

  • 请解释您在代码中所做的修改。很难理解您所做的更改。
  • @PavanChanda 我再次更新了我的答案。我很高兴它有效,并确保使用我最新的代码。如果您可以投票并接受正确答案,那就太酷了:)。
  • @Spectarion 如何在未显示的 html 代码中显示选定的排序选项
猜你喜欢
  • 2022-09-28
  • 2011-10-27
  • 2015-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-07
  • 1970-01-01
相关资源
最近更新 更多