HTML TABLE PHP MySQL切换MySQL排序顺序ASC DESC在列标题单击

时间:2017-08-11 06:08:42

标签: php html mysql

编辑:从接受的答案中添加解决方案

我在这里提出的提示是最明智的方法。

首先需要说的是:我恳请您避免建议数据表和类似内容。

我在HTML表格中显示MySQL表格内容。

我的视图是OLEDB,它使用include showdbtable.php来查询数据库并回显表行。

所以在echohtmltable.php目前,这个问题涉及的内容很多

GET变量检查

echohtmltable.php

和随后的查询

if(isset($_GET['sortby'])){
    $sortby=$_GET['sortby'];
    $_GET['sortby']=''; }
else { 
    $sortby="id_ord"; }

下一个用于回显表行,同时在列标题

中创建排序机制
$query = "
        SELECT id_ord, fornitore, negozio, data_insord, data_prevcons 
        FROM tesord 
        ORDER BY ".$sortby." DESC 
        LIMIT :from_record_num, :records_per_page";

如你所知,第一部分有效。

当我点击上述链接之一时,查询可以正常工作,但目前在代码中显而易见,仅在DESC中。

善意的要求完全是一个建议。但请注意,我认为,echo "<th>".'<a href="showdbtable.php?sortby=fornitore">' . "Fornitore</th>"; echo "<th>".'<a href="showdbtable.php?sortby=negozio">' . "Negozio</th>"; echo "<th>".'<a href="showdbtable.php?sortby=data_insord">' . "Data_insord</th>"; echo "<th>".'<a href="showdbtable.php?sortby=data_prevcons">' . "Data_prevcons</th>"; ,我应该考虑分页。

在ASC和DESC之间切换的最智能,最有效的方法是在点击一个链接之后,例如, &#34; Negozio&#34;,再次点击&#34; Negozio&#34;它在ASC中排序,然后单击它将切换DESC,然后单击ASC,依此类推。

我确定查询会在变量中变异我可能会调用$ ascdesc

LIMIT :from_record_num, :records_per_page

如果当前是ASC或DESC并且需要进行管理并进行切换。

感谢您提供一些有效且智能的方法来实现目标。

<小时/> 解决方案:谢谢Rudy

为了帮助像我这样的其他新手,这就是我应用解决方案的方法

$query = "
        SELECT id_ord, fornitore, negozio, data_insord, data_prevcons 
        FROM tesord 
        ORDER BY " . $sortby . " " . $ascdesc . " 
        LIMIT :from_record_num, :records_per_page";

2 个答案:

答案 0 :(得分:0)

如果您已经发送了    排序方式 通过GET,为什么你不发送     ASC,DESC 选项也是,我的意思是,您可以使用1和0而不是实际的ASC / DESC并在代码中切换它,例如:

$ascdesc = ($_GET['ad'])? '0' : '1';

只需将var添加到链接

即可
echo "<th>".'<a href="showdbtable.php?sortby=negozio&ad='.$ascdesc.'">' . "Negozio</th>";

在你的查询中,类似

 $ascdesc = ($_GET['ad'])? 'asc' : 'desc';

这里非常重要的一点是,如果您通过GET接受用户输入,则必须清理var以避免SQL注入,不要忘记这一点。

<强>更新

可以使用您自己的代码实现:

$sortby = (isset($_GET['sortby']))? $_GET['sortby'] : "id_ord";
$ascdesc = ($_GET['ad']=='asc')? 'ASC' : 'DESC';

查询:

$query = "SELECT id_ord, fornitore, negozio, data_insord, data_prevcons 
          FROM tesord 
          ORDER BY ".$sortby." ".$ascdesc." 
          LIMIT :from_record_num, :records_per_page";

链接:

echo "<th>".'<a href="showdbtable.php?sortby=fornitore&ad=<?=(($_GET['ad']=='asc')? 'desc' : 'asc';)?>">' . "Fornitore</th>";

如果您需要添加页面,只需添加当前页面并更改排序,您也可以在链接中添加var

echo "<th>".'<a href="showdbtable.php?sortby=fornitore&ad=<?php echo (($_GET['ad']=='asc')? 'desc' : 'asc';)?>&page=<?php echo $_GET['page]?>">' . "Fornitore</th>";

还有许多其他方法可以处理分页和排序,但我认为,这可能是一种方式,但是,关于安全性,您可以使用mysql_real_escape

您还可以通过实现this

之类的内容将所有内容留给javascript / jQuery

希望这可以让你更好地理解,快乐编码。

答案 1 :(得分:0)

在看到这些帖子之前,我想出了一个简单的ASC / DESC分类器,仅添加了两行代码:

$SortType = (isset($_GET['SortType']) && $_GET['SortType'] === "DESC") ? "ASC" : "DESC";
$SortOrder = "ORDER BY `StorageArea` $SortType";

然后将其附加到查询中(点表示此处未显示的查询的较早部分):

... $SortOrder";

并且链接具有:

<a href="/index.php?SortOrder=StorageArea&SortType=<?=$SortType;?>" id="Sorter_StorageArea">Storage</a>