排序列ASC/DESC:SQL/PHP
有一个错误导致它不能在ASC/DESC之间切换,我90%确定它在这几行之内。。我想我需要有一个“第一”循环,它将“保存”$sort,以便稍后翻转。但当我这样做时,它会导致一个数组错误 SQL很可能是正确的。。。 我并不担心SQL注入/PDO/安全性,因为我稍后会添加这些代码 完整链接: 做: 在查询字符串键/值对之间只写一个“&”:排序列ASC/DESC:SQL/PHP,php,sql,Php,Sql,有一个错误导致它不能在ASC/DESC之间切换,我90%确定它在这几行之内。。我想我需要有一个“第一”循环,它将“保存”$sort,以便稍后翻转。但当我这样做时,它会导致一个数组错误 SQL很可能是正确的。。。 我并不担心SQL注入/PDO/安全性,因为我稍后会添加这些代码 完整链接: 做: 在查询字符串键/值对之间只写一个“&”: <a ... href="?order=id&sort=$sort"> 或者你可以直接使用这个: <?php //... $sort
<a ... href="?order=id&sort=$sort">
或者你可以直接使用这个:
<?php
//...
$sort = ((isset($_GET['sort']) ? $_GET['sort'] : 'ASC') == 'ASC') ? 'DESC' : 'ASC';
$query = "SELECT * FROM employees ORDER BY $order $sort";
//...
答案:
您的最终代码如下所示:
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);
更新:
你的链接需要更改
它应该是这样或ASC,并从链接中删除一个&
现在是这样的:您正在将$order
设置为ASC
。我怀疑这是一个列名。与大多数这类问题一样,在变量替换后查看代码通常可以解决问题。如果(isset($\u GET['order')){$order=$\u GET['order'];}或者{$order='id';}你确定没有错误吗?Gordon,我修复了我发现的小错误,这有帮助(消除了一个错误)但是仍然没有对ASC/DESC进行排序。谢谢您找到了这个输入错误。您知道$sort=='DESC'吗$sort='ASC':$sort='DESC';它是无用的吗?如果设置了$\u GET,则取该值,如果不设置,则取ASC(默认值)。这是一个问题,但它仍然是排序DESC。好的,谢谢,我更改了您的编辑,但它仍然不是ASC/DESC。有一位声誉很高的人告诉我在一点上尝试两个&&&(我认为这只是&).你的新编辑完全有道理,我有信心这可以完全修复它。。。我正在研究正确的语法可能需要几分钟…@ScottSchmidt您的html代码有误!一个“th”中有2个锚!完成!谢谢当我再获得3个声望时,将+1和mark作为答案,哈哈。很不幸,这周我失去了一些名声,哈哈。非常感谢!!这就是我现在拥有的。。。或者可能我忽略了区别。这是url:请看排序参数的值是PHP可变的,而不是它的值,并且您放置了两个&
,希望这不是一个问题,只是更新了&。好的,说得好。是的,我不认为$sort正在保存,这就是为什么我认为我可能需要$sort嵌套在一个循环中,这样它就“保存”了,如果你这样放置:solenoid slate.000webhostapp.com/?order=id&sort=DESC它可以工作
<a ... href="?order=id&sort=$sort">
<?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";
//...
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);