当查询依赖于仅使用 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 查询[重复]

PHP:如何使用 $_GET 从字面上读取参数字符?

jquery中ajax方法load get post与脚本文件如php脚本连接时,脚本怎样接受数据?

PHP 从HTML选择标签发布查询