2011-12-18 277 views
1

你好,只接受数字作为GET变量

我想只允许在$_GET方法中的数字。我用这是分页确保

$page = (isset($_GET['page']) && is_numeric($_GET['page']) ? (int) $_GET['page'] : 1);

如果我输入特殊字符或字母,则返回错误

这不应该是可能的:

index.php?page=AAindex.php?page='[email protected]#$%^&*()

仅此: index.php?page=12 ...

任何人都有这个解决方案? :)在此先感谢...

+0

SO是什么问题?你线的PHP似乎检查存在的价值,如果它是数字。什么不适合你? – Nanne 2011-12-18 13:17:13

+0

你会得到哪些错误? – middus 2011-12-18 13:17:31

+0

作为什么iv'e发布这是在分页 '$ offset = 3; $ limit =($ page - 1)* $ offset; $ onset = $ limit + $ offset;' 如果我在参数上加零,它会返回错误,也会给alpa和特殊字符... – 2011-12-18 13:20:21

回答

4

我会建议使用filter_input()

$page= filter_input (INPUT_GET, 
         'page', 
         FILTER_VALIDATE_INT, 
         array('options'=>array('min_range' => 1))); 
if(!$page)$page=1; 
+0

ahh whew ..明白了:)谢谢你brooo :) – 2011-12-18 13:45:21

0

我只想用intval()$page默认值:

$page = 1; 

if (isset($_GET['page'])) 
    $page = intval($_GET['page']); 
+0

是否有页面0?大部分时间'1'不是第一页? – PeeHaa 2011-12-18 13:30:03

+0

我刚把它改为1;)我以为他直接把这个变量放到MySQL查询中:'SELECT * FROM tbl LIMIT $ page,10'。但他用下面的公式计算极限值:'$ limit =($ page - 1)* $ offset;' – ComFreek 2011-12-18 13:31:45

+0

这个计算结果不错,但只有在alpa和特殊字符中。 – 2011-12-18 13:37:46

0

使用intval然后检查其转换为数字。如果该值不是数字,intval将返回0:

if (isset($_GET['page'])) 
    if (intval($_GET['page'] == 0) 
     $page = 1; 
    else 
     $page = intval($_GET['page']); 

或更紧凑:

$page = (isset($_GET['page']) && intval($_GET['page'] != 0) ? intval($_GET['page']) : 1; 
+0

这是好的兄弟,但是当我把alpa和特殊字符的参数返回对象没有找到! – 2011-12-18 13:39:43

+0

已解决...谢谢大家...... :)谢谢你so muchh ,,, – 2011-12-18 13:44:48

0

你已经有了一个封闭支架在错误的地方 - 应该是:

$page = (isset($_GET['page']) && is_numeric($_GET['page'])) ? (int) $_GET['page'] : 1; 
+0

注意'is_numeric()后的第二个右括号 – Chris 2011-12-18 13:39:33