我的脚本有一个分页,它根据搜索词对结果进行分页,但是我遇到了一个小问题。
当搜索词是一个英文字符串,如laptop,它工作得很好。
当单词不是英语(希腊语)时,即使它输出找到的正确匹配数,它也只显示包含10个结果的第一页。当我单击第2页或下一页时,它再次显示正确的匹配数量,但它不显示任何匹配。如果我从第2页点击到第1页,它会再次显示第1页的结果。所以,一般来说,只有第一个(登陆)页面有效。
我在编辑之前测试了代码,以获取一个非拉丁字符串的术语,并做了同样的"错误"的事情。这是教程的url http://papermashup.com/easy-php-pagination/
感谢您的回复。
首先,您可以通过无转义输入捕获SQL注入攻击。然后,我认为你的搜索词可能会打破SQL查询。尝试使用mysql_real_escape_string:
$all = mysql_real_escape_string(implode(" +",$words));
页面可能只有数字,然后可以安全地执行:
$page = (int) $_GET['page'];
不转义字符串。
然后也是最重要的:查询计数和查询数据必须有相同的join和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)";
你不需要包括AND products.shopid = shops.id
到你的WHERE子句,如果你已经有它在HAVING子句。
那么,第一个查询的结果不是PAGES计数,而是ROWS计数。如果您想在一个页面上显示10行,那么您的总页数将是ceiling($total_pages / 10)
。