Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 不带限制语句和排序的页面计数_Php_Mysql - Fatal编程技术网

Php 不带限制语句和排序的页面计数

Php 不带限制语句和排序的页面计数,php,mysql,Php,Mysql,我有一个供几个用户使用的文章系统。文章有自己的权限,可以根据我的while循环中运行的每一篇文章的查看器ID进行检查。如果允许用户查看文章,我通过增加$printcount来限制文章,循环在达到$limit时终止。我还有排序选项,可以按姓名、插入日期、修改日期和提交人进行排序 在不使用MySQL限制功能的情况下,如何使用下一页/上一页按钮?下面是一个简短的版本,我的代码可能不是100%的功能性,但应该能让人明白这一点 <?php $sort=$_GET['sort']; // date_a

我有一个供几个用户使用的文章系统。文章有自己的权限,可以根据我的while循环中运行的每一篇文章的查看器ID进行检查。如果允许用户查看文章,我通过增加$printcount来限制文章,循环在达到$limit时终止。我还有排序选项,可以按姓名、插入日期、修改日期和提交人进行排序

在不使用MySQL限制功能的情况下,如何使用下一页/上一页按钮?下面是一个简短的版本,我的代码可能不是100%的功能性,但应该能让人明白这一点

<?php
$sort=$_GET['sort']; // date_added
$direction=$_GET['dir']; // ASC
$limit=$_GET['limit']; // 25
$query="SELECT * FROM `article` ORDER BY '$sort' '$direction'";

$result=mysql_query($query);
if(mysql_num_rows($result)==NULL) {
  echo '<tr><td colspan="4">NO RECORDS FOUND</td></tr>';
}
$printcount=0;
while(($row=mysql_fetch_assoc($result))&&($printcount<$limit+1)) {
  //if user is owner of article $readable=true;
  //load permissions from permission column (comma separated integers) into array, if user's group ID is in that array $readable=true;
  //if article "global_read" flag=1, $readable=true;
  //if $printcount<$limit, and $readable echo the table row with data
  //if $readable, $printcount++;
}
?>

如果我只按ID ASC排序,我可以很容易地将ID存储为last_ID,在下一页的查询中将有一个额外的:WHERE`ID`>$last_ID,但是,由于存在不同的排序选项和方向选项,这似乎要复杂得多。

我假设您会问这个问题,因为您的权限模型是在php应用程序中处理的,并且防止您在查询中轻松使用LIMIT

您应该将每个用户的权限存储在数据库表中,然后使用联接,以便仅检索用户可以查看的文章。这样,您就不必在应用程序中处理分页或排序逻辑;您只需在mysql中使用LIMIT和ORDER BY即可


您可能还应该使用基于参数的查询。您的代码有一个巨大的sql注入漏洞。

良好、稳定、快速的分页不使用偏移量,但保持限制,因此用户可以从一页移动到另一页,响应时间不会随着他们移动到下一页而增加 本文档对使用MySQL的分页非常有教育意义,但其主要思想也可以在其他dbms中考虑


我认为一个需要解决的问题是为什么。为什么您要/需要这样做?没有限制,您也可以让应用程序服务器处理它,这样您就不必一直从数据库中获取相同的数据。我构建了一个内部wiki,它限制对用户组的访问。我有一个groups表,它以字符串形式存储组中的用户ID,并用逗号分隔。我不希望有一个专门的权限表,每个文章都有一个条目,因为我的应用程序可能会在数千条条目之后爬行。除了使用内置有自己权限集的平面文件之外,我不知道还有什么其他方法可以做到这一点。这是我第一次尝试合并权限系统,目前我正在使用explode/Inclode对数据库中的字符串进行分解/内爆。我已经知道如何使用一个单独的表来实现我需要的功能,同时保留MySQL查询中的限制。查询示例:从文章中选择行,其中id在文章中选择文章,id在文章中选择文章,权限在文章中选择文章,id在文章中选择文章,权限在文章中选择文章,id在文章中选择文章,id在文章中选择文章,id在文章中选择文章,权限在文章中选择文章,id在文章中选择文章,id在文章中选择文章,id在文章中选择文章,id在文章中选择文章,id在文章中选择文章,权限在文章中选择文章,id在文章中选择文章,id在文章中工作起来很有魅力!谢谢你的回复。上面的脚本$\u GET vars并没有实际使用,只是为了便于阅读。在将所有变量放入SQL查询之前,我严格检查了它们。我决定使用每文章样式的权限表,共有6列:权限PK、文章ID FK、用于确定权限类型的整数标志全局权限、组权限和用户权限,目标ID整数FK引用相应的组或用户ID,读/写tinyint 0表示无访问权,1表示访问权。感谢您提供该文档,但我已经了解如何在基本表单中创建快速分页概念。这里的问题是添加权限检查,以查看组和用户是否有权查看内容。这是我以前使用脚本的方式,但由于我使用了LIMIT,结果的数量不能准确表示可见文章的数量,因为查询不知道我正在进行权限检查。我想我正在寻找一个实用的解决方案,以有效地合并多个组和/或用户权限,并可以扩展。再次感谢!呃,如果是那样的话,我会支持琼昌的回答。