简单的GET验证

时间:2011-11-18 09:35:32

标签: php forms

我有GET []输入,并希望进行验证。输入数据始终是一个数字。架构。我想确保传递号和适当的数量 - 不要抛出sql查询。

此刻我正在使用程序

$cc = $_GET['cc'];
if ($cc=='') $cc='9012';$find=array("..", "/", "\\");
$replace=array("", "", "");
$cc=str_replace($find, $replace, $cc);

$eic = $_GET['eic']; 
.... ect.

// where f.ex. 9012 is an real existing data (in dbase) to generate sucure sql question

GET []变量数据模式

$_GET[$cc] - always 4 digits
$_GET[$eic] - always 4 digits
$_GET[$iy] - always 4 digits
$_GET[$ir] - always 1 digit

你能告诉我一个更好的方法来保护我的GET吗?

3 个答案:

答案 0 :(得分:1)

如果你得到的查询总是一个数字,你可以使用PHP中的intval()函数来确保它是一个int。

$eic = intval($_GET['eic']);

http://php.net/manual/en/function.intval.php

答案 1 :(得分:0)

您可以使用intval()强制数值。 但是,您不能使用此方法表示具有前导0的值,例如0123

如果您没有带前导零的值,请使用:

<?php
    $_GET['cc'] = intval($_GET['cc']);
    strlen($_GET['cc']) == 4 ? $_GET['cc'] : $_GET['cc'] = 0; // Replace 0 with default/error value

    // Repeat the steps above for all parameters...
?>

答案 2 :(得分:0)

  

变量中的位数变化导致查询

嗯,验证的全部内容是您“验证”数据,并且在数据未经过验证的情况下甚至不会打扰您的SQL数据库。你为什么要打扰执行一个你知道无效的查询呢?

我不同意使用intval()进行验证。使用intval(),您将强制更改用户输入的值,这不是真正的验证。更好的方法是使用is_int()代替。

为了安全起见?没有什么能比“准备好的陈述”更胜一筹了

http://php.net/manual/en/pdo.prepared-statements.php