分页问题[PHP& is_numeric]

时间:2012-07-30 19:23:02

标签: php pagination

我发了一个分页问题:

$num_por_pagina = 5; 
$paginac = $_GET[paginac]; 
if (!$paginac) {
   $paginac = 1;
}

我想只使用整数来避免PHP / SQL注入

例如访问:

http://www.mysite.com/index.php?paginac=3.3http://www.mysite.com/index.php?paginac=3,3

结果您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以便在第7行的“4.6,2”附近使用正确的语法

自:

访问www.mysite.com/index.php?paginac=3.3或www.mysite.com/index.php?paginac=3,3

结果错误,此页面无效。

5 个答案:

答案 0 :(得分:1)

缺少引号

$paginac = $_GET["paginac"];

www.mysite.com/index.php?page=3.3

您将“page”作为get参数传递,捕获该参数而不是“paginac”

$paginac = $_GET["page"];

如果您在mysql中收到错误,请发布该代码。

答案 1 :(得分:1)

如果你知道你将收到一个号码(或者就此而言),你可以把它作为第一道防线:

$paginac = (int) $_GET['page'];

page表示常量。您应该使用密钥的引号。

如果您收到非数字字符串,则只需要请求第0页。

其次,你需要正确地阅读how to prevent injections,而不是仅仅使用一些黑客来在大多数情况下正确使用它。

答案 2 :(得分:1)

尝试

$paginac = intval($_GET[paginac]);

答案 3 :(得分:0)

看起来is_numeric()的测试仍然允许编写和执行SQL语句,这会引发错误。

确保如果GET变量不是数字,则查询不会执行。

此外,在访问关联数组索引时使用引号。如果您通过get:

传递 paginac
$paginac = $_GET['paginac'];

如果您通过get:

传递页面
$paginac = $_GET['page'];

答案 4 :(得分:-1)

我会做这样的事情:

if ($paginac < 2)
{
    $paginac = 1;
}

如果它仍然是一个字符串,PHP会将变量强制转换为1,因此这个方法会将任何文本转换为1并且还有助于反对负数