Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/240.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
排序列ASC/DESC:SQL/PHP_Php_Sql - Fatal编程技术网

排序列ASC/DESC:SQL/PHP

排序列ASC/DESC:SQL/PHP,php,sql,Php,Sql,有一个错误导致它不能在ASC/DESC之间切换,我90%确定它在这几行之内。。我想我需要有一个“第一”循环,它将“保存”$sort,以便稍后翻转。但当我这样做时,它会导致一个数组错误 SQL很可能是正确的。。。 我并不担心SQL注入/PDO/安全性,因为我稍后会添加这些代码 完整链接: 做: 在查询字符串键/值对之间只写一个“&”: <a ... href="?order=id&sort=$sort"> 或者你可以直接使用这个: <?php //... $sort

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

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

完整链接:

做:

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

<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);