我正在对我的脚本进行分页,它基于一个搜索词对结果进行分页,但是我想出了一个小问题。
当搜索词是像笔记本电脑这样的英文字符串时,它的工作效果很好。
当单词不是英语时,(希腊语)甚至输出正确的匹配数,它只向我显示包含10个结果的第一页。当我单击第2页或下一页时,它会再次显示正确的匹配数,但它不会显示任何匹配项。如果我从第2页单击到第1页,那么它将再次显示第一页的结果。因此,通常只有第一页(登陆)工作。
我在编辑之前对代码进行了测试,以获得一个非拉丁字符串的术语,并做了同样的“错误”操作。这是教程http://papermashup.com/easy-php-pagination/的url
谢谢您的时间和答复。
发布于 2011-07-25 11:32:46
首先,您可以捕获无转义输入的SQL注入攻击。那么,我认为您的搜索项可能会破坏SQL查询。尝试使用字符串
$all = mysql_real_escape_string(implode(" +",$words)); 页面可能只是数字,这样就安全了:
$page = (int) $_GET['page'];没有转义字符串。
然后也是最重要的:查询计数和查询数据必须具有相同的JOIns和WHERE参数。如果在一个表中搜索匹配项,则可以获得100行。然后尝试将它与另一个表连接起来,其中只有10行。数据只有10行,页面只有100行。
$query = "SELECT COUNT(some_id_column) as num FROM products JOIN shops
ON products.shopid = shops.id WHERE MATCH (name) AGAINST ('+" . $all . "' IN BOOLEAN MODE)";如果在WHERE子句中已经包含了AND products.shopid = shops.id,则不需要将它包含到WHERE子句中。
然后,第一个查询的结果不是页面计数,而是行计数。如果您想在一个页面上显示10行,那么您的总页面计数将是ceiling($total_pages / 10)。
https://stackoverflow.com/questions/6815151
复制相似问题