表格排序使用PHP在页面上单击分页

时间:2018-05-17 10:25:30

标签: javascript php pdo pagination

当我点击书籍链接时,它按升序订购书籍,如果我再次点击链接,它会按顺序订购书籍,我的问题是,当我点击书籍链接时,他订购了两本书对我来说很明显,,,即使书在下一页,我也希望他订购这些书。

这个功能让书籍显示在表格中

u

这个JavaScript函数以Ascending降序排列



   public function getBooks($start = 0, $limit = 2)
{
   $sql_start = $start * $limit;
   $sql_limit = $limit;

   $query = "SELECT Library.nameOfBook, userBook.book_id, userBook.user_id FROM loginUser JOIN userBook JOIN Library ON userBook.user_id = loginUser.id AND userBook.book_id = Library.id WHERE loginUser.username=:username LIMIT $sql_start, $sql_limit";
   $statment = $this->db->prepare($query);
   $statment->execute([
       ':username' => $this->username
   ]);
   $result = $statment->fetchAll();

  echo "<table id='myTable' border='1'>

  <tr>
   <th><a onclick='sortTable(1)' href='#'>Books</a></th>
   <th>Action</th>
   </tr>";
   foreach($result as $row){
       echo "<tr>";
       echo "<td>" . $row['nameOfBook'] . "</td>";
       echo "<td>" ."<input type='submit' id='delete".$row['book_id']."-".$row['user_id']."' onclick='deleteBook(this)' name='delete' value='Delete'>" . "</td>";
       echo "</tr>";
   }

   echo "</table>";
   echo "";

 }
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:1)

好像你在php端而不是javascript端执行分页。这意味着你应该类似地在php端进行列排序 - 单击标题会导致对“getBooks”的新调用使用不同的“ORDER BY”子句。

所以sortTable()函数应该是对服务器的ajax调用,其中“getBooks”再次执行,ORDER BY由单击的标题指示(如果顺序是升序或降序)。如果用户单击“Books”标题,则查询如下所示:

$query = "SELECT Library.nameOfBook, userBook.book_id, userBook.user_id FROM loginUser JOIN userBook JOIN Library ON userBook.user_id = loginUser.id AND userBook.book_id = Library.id WHERE loginUser.username=:username LIMIT $sql_start, $sql_limit ORDER BY nameOfBook " //add DESC if necessary

修改

快速解释:

当对表进行分页时,您可以在客户端(在本例中为javascript)或服务器端(在本例中为php)中执行此操作。

做客户端的事情意味着您可以从服务器获取所有数据(因此库中的所有书籍),作为JSON对象(可能是XML或其他),然后从该数据生成表在Javascript中,限制每页的书籍数量,但允许您访问其他书籍,因为您拥有所有要处理的数据。这意味着在SQL查询中不使用“LIMIT”,因为您正在发送所有内容。这样做的好处是可以限制对服务器的调用(如果这是一个问题),但如果你有大量数据,可能意味着在客户端进行大量的数字处理。

或者,你在php端完成了分页。在这种情况下,查询将包括LIMIT以保持数据较小,但您可能还希望向客户端发送完整数量的条目,以便可以计算页数(这可以使用SQL_CALC_FOUND_ROWS完成)。从javascript您发送AJAX请求到服务器的数据。以下是一些资源:

AJAX: https://www.w3schools.com/xml/ajax_intro.asp

https://www.tutorialspoint.com/ajax/index.htm

SQL_CALC_FOUND_ROWS: https://dev.mysql.com/doc/refman/8.0/en/information-functions.html#function_found-rows

JSON格式: https://www.w3schools.com/js/js_json_intro.asp

ajax请求转到php页面,该页面执行sql查询并返回数据。数据可以是对象(最有可能是JSON),也可以是表格的HTML。前者最适合大型项目,但第二种可能更快。一旦服务器发送回数据,您将显示它(通过从JSON对象生成Javascript中的表,或者只是插入HTML,如果这就是你要去的那样)。

对不起,如果这可能比你原先计划的更重要。