【问题标题】:PHP/MySQLi - Sort, then undo sort?PHP/MySQLi - 排序,然后撤消排序?
【发布时间】:2017-07-27 09:50:12
【问题描述】:

我将我的数据库信息放入我网站上的一个表中。单击下面的链接时,我对表格进行了排序,但我想通过再次单击相同的链接来撤消排序。 我怎么做?我研究了rsort & unsset,但我无法得到解决方案。

例如,我有一个表头为“名字”的表,其中当然包含所有名称。当我点击“名字”时,它会对名字进行排序。

$sqli = "SELECT * FROM data_base"

 if ($_GET['sort'] == 'firstname')
  {
      $sqli .= " ORDER BY firstname ASC"; 
  }


 <th><a href=\"test.php?sort=firstname\">Firstname</a></th>

【问题讨论】:

  • 您无需删除任何内容。如果再次单击该链接,它将再次排序,因为参数sort 再次设置为名字或姓氏。您需要从链接中删除该参数
  • 另一种方法是从查询中删除 ORDER BY 并根据需要在 PHP 中执行排序。
  • 总有办法吗?你真正想做的是什么?注意:您的代码有语法错误,所以它只是它的一部分!?如果您不想排序,那么只需在if 之前执行$_GET['sort']=null;。但如果你想要更多,那就展示真实的代码而不是它的一部分。
  • 或者只是添加&lt;a href=\"test.php?sort=null\"&gt;No Sorting&lt;/a&gt; !?通往罗马的道路有很多……
  • 或者只添加&lt;a href="test.php"&gt;No Sorting&lt;/a&gt;,甚至根本不指定参数。您必须在 Javascript 中切换您想要发送到服务器的内容。服务器只执行它在单个请求中看到的内容

标签: php html sorting get


【解决方案1】:

根据您之前点击的链接传递您的参数

$sqli = "SELECT * FROM data_base";
$fname="firstname";
$lname="lastname";
 if ($_GET['sort'] == 'firstname')
  {
      $sqli .= " ORDER BY firstname ASC"; 
      $fname="";
  }
  else if ($_GET['sort'] == 'lastname')
  {
      $sqli .= " ORDER BY lastname ASC";
      $lname="";
  }


 echo "<a href=\"test.php?sort=$fname\">Firstname</a>";
 echo "<a href=\"test.php?sort=$lname\">Lastname</a>";

【讨论】:

    【解决方案2】:

    根据点击的内容,链接必须不同:

      if ($_GET['sort'] == 'firstname')
      {
          $sqli .= " ORDER BY firstname ASC"; 
      }
      else if ($_GET['sort'] == 'lastname ')
      {
          $sqli .= " ORDER BY lastname ASC";
      }
    
     if ($_GET['sort'] == 'firstname'){
         echo '<a href=\"test.php\">Firstname</a>';
     }
     else {
         echo '<a href=\"test.php?sort=firstname\">Firstname</a>';
     }
    
     if ($_GET['sort'] == 'lastname'){
         echo '<a href=\"test.php\">Lastname</a>';
     }
     else {
         echo '<a href=\"test.php?sort=lastname\">Lastname</a>';
     }
    

    【讨论】:

      【解决方案3】:

      我推荐一种新方法:

      在您的表中添加一个 ID 列并将其用作主键,这可以是您的默认排序。 最好在数据库级别而不是 php 级别进行排序(例如:数组)。

      Link1:默认排序
      Link2:按名字排序
      Link3:按姓氏排序

      此外,您可以在同一链接中使用 ASC 和 DESC 来排序 ASCending 或 DESC。

      【讨论】:

        【解决方案4】:
        session_start();
        
        $sqli = "SELECT * FROM data_base"
        
        if ($_GET['sort'] == 'firstname'){
              if(!isset($_SESSION['first']))//checks if there is a no session
              {
                 $sqli .= " ORDER BY firstname ASC";//sorting 
                 $first='1';
                 $_SESSION['first']=$first;//start a session
              }
        
              if(isset($_SESSION['first']))//checks if their is a session
              {
                  $sqli .= "";        //no sorting
                  unset($_SESSION['first']); destroys the session so next time it will sort the results
              }
        }
        
        else if ($_GET['sort'] == 'lastname ')
        { 
            if(!isset($_SESSION['first']))     //checks if there is a no session
            {
                $sqli .= " ORDER BY lastname ASC";  //sorting 
                $first='1';
                $_SESSION['last']=$last;  //start a session
            }
            if(isset($_SESSION['last']))     //checks if their is a session
            {
                $sqli .= "";        //no sorting
                unset($_SESSION['last']); 
            }
        }
        
         <a href=\"test.php?sort=firstname\">Firstname</a>
         <a href=\"test.php?sort=lastname\">Lastname</a>
        

        你可以通过会话来做到这一点,只需添加 session_start(); 在顶部之后

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-05-19
          • 2017-08-30
          • 1970-01-01
          • 2012-10-04
          • 2018-09-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多