当查询依赖于仅使用 PHP 的 $_GET 时,如何对表输出进行排序?
Posted
技术标签:
【中文标题】当查询依赖于仅使用 PHP 的 $_GET 时,如何对表输出进行排序?【英文标题】:How can I sort table output when the query is dependent on a $_GET with only PHP? 【发布时间】:2021-07-08 05:46:33 【问题描述】:我有一个网站,它展示了一个表格中的工具以及页面上另一个表格中的相应评级,称为 f_toolseite.php。我希望用户能够根据最佳评分和最差评分对评分进行排序。但是,由于我只使用 php,因此当我按下按钮对评级进行排序时,正在查看的工具的信息将被删除。我的意思是,我用来访问工具的 $_GET 变量和用户希望看到的评分正在从地址栏中删除。 我很难实施会议,但我无法让它发挥作用。有什么办法可以只用php解决这个问题?
这是我的代码 对于 f_toolseite.php '''
<html>
<head>
<center>
<div class="tool-container">
<?php
$name = mysqli_real_escape_string($conn, $_GET['name']);
$sql = "SELECT * FROM Tools WHERE t_name = '$name' ";
$result = mysqli_query($conn, $sql);
$queryResults = mysqli_num_rows($result);
if($queryResults > 0 )
while ($row = mysqli_fetch_assoc($result))
## $image = base64_encode($row['t_bild']);
## echo "
## <img src=data:image/png;base64,'$image'>";
echo " <div class='tool-box'>
<img src=".$row['t_logo']. " width= 200>
<h3> ".$row['t_kategorie']."</h3>
<br>
<img src=".$row['t_bild']. " width= 800>
<br>
<br>
<p>".$row['t_beschreibung']."<p>
<br>
<p><b>Probier's doch gleich aus!</b></p>
<a href=".$row['t_link']."> ".$row['t_link']."</a>
</div>";
?>
<br>
<br>
<br>
<br>
<div class="avg-container">
<?php
$id = mysqli_real_escape_string($conn, $_GET['id']);
$sql3 = "SELECT ROUND (AVG (b_nivg)) AS average FROM Bewertungen WHERE t_id = '$id'";
$result3 = mysqli_query($conn, $sql3);
$row = mysqli_fetch_assoc($result3);
$average = $row['average'];
echo ("ALLES IN ALLEM EINE $average VON 10 ");
$sql4 = "SELECT b_industrie
COUNT(b_industrie) AS oft
FROM Bewertungen WHERE t_id = '$id'
GROUP BY b_industrie
ORDER BY oft DESC
LIMIT 1";
$result4 = mysqli_query($conn, $sql4);
$row = mysqli_fetch_assoc($result4);
$industry = $row['oft'];
echo ("Am beliebtesten in der $industry Industrie ");
?>
</div>
<br>
<br>
<br>
<div class="filter-container">
<form action="f_toolseite.php" method="post">
<select name="sort">
<option value="" selected="selected">Nach den neusten Bewertungen geordnet</option>
<option value="b_nivg ASC">Am besten bewertet</option>
<option value="b_nivg DESC">Am schlechtesten bewertet</option>
</select>
<input name="search" type="submit" value="Ordnen"/>
</form>
<?php
if(isset($_POST['sort']))
$sort = $_POST['sort'];
?>
</div>
<div class="rate-container">
<?php
$id = mysqli_real_escape_string($conn, $_GET['id']);
if(!empty($sort))
$sql2 = "SELECT * FROM Bewertungen WHERE t_id = '$id' ORDER BY b_datum DESC,'$sort'";
else
$sql2 = "SELECT * FROM Bewertungen WHERE t_id = '$id' ORDER BY b_datum DESC";
$result2 = mysqli_query($conn, $sql2);
$queryResults2 = mysqli_num_rows($result2);
$crown= "https://project-disti.wbs.hs-rm.de/learn/ss2021/workspace/dbmgruppe2/Collatio%20(22.06.2021)/img/Webtool-Bilder/crown_PNG16.png";
if($queryResults2 > 0 )
while ($row = mysqli_fetch_assoc($result2))
echo " <div class='rating-box'>
<p>".$row['b_vorname']." ".$row['b_nachname']."</p>
<br>
<p>".$row['b_industrie']."</p>
<p>".$row['b_dauer']."<p>
<p>".$row['b_niveau']."<p>
".( $row['b_exp'] == 'pro' ? "<img src= $crown width:10 />" : "" )."
<p>Design: ".$row['b_niv1']." / 10 </p>
<p>Intuitivität: ".$row['b_niv2']." / 10 </p>
<p>Vielseitigkeit: ".$row['b_niv3']." / 10 </p>
<p>Mehrwert: ".$row['b_niv4']." / 10 </p>
<p>Einzigartigkeit: ".$row['b_niv5']." / 10 </p>
<p>Gesamteindruck: ".$row['b_nivg']." / 10 </p>
<p>".$row['b_pro']."<p>
<p>".$row['b_con']."</p>
<p>".$row['b_kommentar']."</p>
<p>".$row['b_datum']."</p>
<br>
<br>
</div>";
?>
</div>
<footer>
<?php include '../Include/footer.php';?>
</footer>
</body>
</html> '''
【问题讨论】:
将您的排序表单更改为 GET。然后,如果您想保留id
,则只需在表单中添加一个名为id
的隐藏输入,并使用id 填充该输入值。这将使它与排序表单一起提交。
【参考方案1】:
您需要像这样更改您的 html 表单,并从 get 请求而不是 post 中获取排序值
<form action="f_toolseite.php" method="get">
<input type = "hidden" name = "name" value = "<?= $_GET['name'] ?>" />
<input type = "hidden" name = "id" value = "<?= $_GET['id'] ?>" />
<select name="sort">
<option value="" selected="selected">Nach den neusten Bewertungen geordnet</option>
<option value="b_nivg ASC">Am besten bewertet</option>
<option value="b_nivg DESC">Am schlechtesten bewertet</option>
</select>
<input name="search" type="submit" value="Ordnen"/>
【讨论】:
以上是关于当查询依赖于仅使用 PHP 的 $_GET 时,如何对表输出进行排序?的主要内容,如果未能解决你的问题,请参考以下文章
如何处理 PHP 中 file_get_contents() 函数的警告?
htaccess 重写 URL 以仅删除一个 php 文件的 $_GET 查询[重复]