【问题标题】:Sort Column ASC/DESC: SQL/PHP排序列 ASC/DESC:SQL/PHP
【发布时间】:2017-10-28 19:27:12
【问题描述】:

有一个错误导致它不能在 ASC/DESC 之间翻转,我 90% 确定它在这几行之内。我认为我需要有一个“第一个”循环来“保存”$sort 所以它稍后翻转。但是当我这样做时会导致数组错误。

SQL 很可能是正确的... 我不担心 SQL 注入/PDO/安全性,因为我稍后会添加该代码。

完整链接:https://solenoidal-slate.000webhostapp.com/

if(isset($_GET['sort'])){
$sort = $_GET['sort'];
} else {
    $sort='ASC';
}

$sort == 'DESC' ? $sort ='ASC': $sort='DESC';
$query = "SELECT * FROM employees ORDER BY $order $sort";
$results = mysqli_query($con, $query); ?>

<th><a class="column_sort" id="id" href='?order=id&sort=$sort'>ID<span class="glyphicon glyphicon-sort-by-alphabet"></span></a></th>

上面这一行是“获取”$sort 变量的列示例。

编辑:为了节省时间,$order 不是问题。每个列名都按列成功排序。

  if(isset($_GET['order'])){
    $order = $_GET['order'];
    } else {
    $order = 'id';
    } 

【问题讨论】:

  • 您将$order 设置为ASC。我怀疑这是一个列名。与大多数此类问题一样,在变量替换后查看代码通常可以解决问题。
  • if(isset($_GET['order'])){ $order = $_GET['order']; } 其他 { $order = 'id'; }
  • 你确定没有错误吗?
  • Gordon,我修正了我发现的小错字,这有助于(消除错误)但仍然无法对 ASC/DESC 进行排序。感谢您找到那个错字。
  • 你知道 $sort == 'DESC' 吗? $sort ='ASC': $sort='DESC';没用?如果设置了 $_GET,则采用该值,否则采用 ASC(您的默认值)。

标签: php sql


【解决方案1】:

做:

$sort = ($sort == 'DESC') ? 'ASC': 'DESC';

在查询字符串键/值对之间只写一个“&”:

<a ... href="?order=id&sort=$sort">

并在“href”中正确应用 php 代码。否则你也会有 $sort 作为 html 代码。

所以,我会这样做,例如:

<?php

$order = isset($_GET['order']) ? $_GET['order'] : 'id';
$sort = isset($_GET['sort']) ? $_GET['sort'] : 'ASC';

$sort = ($sort == 'ASC') ? 'DESC': 'ASC';

$query = "SELECT * FROM employees ORDER BY $order $sort";
$results = mysqli_query($con, $query); ?>
//....
?>

<th>
    <a class="column_sort" id="id" href="?order=id&sort=<?php echo $sort; ?>">
        ID<span class="glyphicon glyphicon-sort-by-alphabet"></span>
    </a>
</th>

或者你可以直接使用这个:

<?php

//...
$sort = ((isset($_GET['sort']) ? $_GET['sort'] : 'ASC') == 'ASC') ? 'DESC' : 'ASC';

$query = "SELECT * FROM employees ORDER BY $order $sort";
//...

【讨论】:

  • 这是一个问题,但它仍在对 DESC 进行排序。
  • 好的,谢谢我更改了您的编辑,但它仍然没有 ASC/DESC。有很高声誉的人告诉我一次尝试两个 &&(我以为只有 &)。
  • 你的新编辑 完全有道理,我有信心这可以完全解决它...我正在研究正确的语法可能需要几分钟...
  • @ScottSchmidt 你的 html 代码有误! 1 个“th”中有 2 个锚点!
  • 完成!谢谢。一旦我获得 3 个声望,我会 +1 并标记为答案,哈哈。不幸的是,我这周失去了一些声誉,哈哈。非常感谢!!
【解决方案2】:

答案:

您的最终代码将是这样的:

if (isset($_GET['order'])) { // Check $_GET['order'] is in the predefined array
    $order = $_GET['order'];
} else {
    $order = 'id';
} 

if(isset($_GET['sort'])) { // Preferably you can check this also in_array($_GET['sort'], ['ASC', DESC])
    $sort = $_GET['sort'];
} else {
    $sort = 'ASC';
}

$query = "SELECT * FROM employees ORDER BY $order $sort";
$results = mysqli_query($con, $query); 

更新:

您的链接需要更改,

应该是这样的http://solenoidal-slate.000webhostapp.com/?order=id&sort=DESC 或 ASC 并从链接中删除一个&amp;

现在是这样的:https://solenoidal-slate.000webhostapp.com/?order=id&&sort=$sort

【讨论】:

  • 这就是我目前拥有的......或者我可能错过了差异。
  • 这是网址:solenoidal-slate.000webhostapp.com/?order=id&sort=$sort 看到排序参数的值是 PHP 变量而不是它的值
  • 还有两个&amp; 希望这不是问题
  • 你刚刚更新了 &。好的,好点。是的,我不认为 $sort 正在保存,这就是为什么我认为我可能需要将 $sort 嵌套在循环中以便它“保存”
  • 如果你这样写:solelinal-slate.000webhostapp.com/?order=id&sort=DESC 就可以了
猜你喜欢
  • 2017-10-27
  • 1970-01-01
  • 1970-01-01
  • 2015-04-12
  • 1970-01-01
  • 1970-01-01
  • 2011-11-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多