编辑:从接受的答案中添加解决方案
我在这里提出的提示是最明智的方法。
首先需要说的是:我恳请您避免建议数据表和类似内容。
我在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";
答案 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>