对于每个$ _POST变量一个mysql_real_escape_string?

时间:2012-11-16 10:09:16

标签: sql post foreach code-injection mysql-real-escape-string

对于我的学校作业,我必须创建一个函数,它使用trim()htmlspecialchars()mysql_real_escape_string()来阻止SQL和HTML注入。

我已经尝试了一段时间,但我无法让它发挥作用。我尝试了foreach循环和extract函数。我一定是做错了什么,或者错过了什么。

到目前为止,我已经得到了这个:(只是为了查看变量是否正在处理中)

foreach ($_Post as $Key => $Value) { $$Key = $Value; echo $$Key."<br>"; }

但它不会返回任何东西。

我可以在每个变量上使用trim等,但必须有一个更简单的方法。

我有$_POST变量'voorletters','tussenvoegsel','naam','adres','huisnummer'(数字),'telefoon'(数字),'邮政编码','woonplaats ','geslacht','电子邮件'和'wachtwoord'(密码)。

请帮助我:(!我是关于php的初学者,所以请尝试彻底解释。

4 个答案:

答案 0 :(得分:2)

这个怎么样?

foreach($_POST as $key => $value) {
    echo 'Current value in $_POST["' . $key . '"] is : ' . $value . '<br>';
    $_POST[$key] = your_filter($value);
}

其中your_filter()是调用trim,htmlspecialchars等的函数:

function your_filter($value) {
    $newVal = trim($value);
    $newVal = htmlspecialchars($newVal);
    $newVal = mysql_real_escape_string($newVal);
    return $newVal;
}

也要注意变量名称$_POST而不是$_Post。 你不需要在这里使用$$,你在$key的循环中有关键名称,你可以用$_POST[$key]

访问/替换数组中的值

编辑:添加回显以打印当前值

EDIT2:添加了your_filter()函数

的示例

答案 1 :(得分:1)

// $_POST = array('voorletters' => '<<', 'tussenvoegsel' => '>>', 'naam' => '<<');

foreach($_POST as &$val) //pass any post value by reference
   $val = mysql_real_escape_string(htmlspecialchars(trim($val)));


extract($_POST);
echo $voorletters;
echo $tussenvoegsel;
echo $naam;

答案 2 :(得分:0)

foreach ($_POST as $Key => $Value) { 

 echo yourFunctionName($Value)."<br/>"; 

}

答案 3 :(得分:0)

  

试试这个...

function real_escape_and_trim($value)
{
    $value = trim($value);
    $value = mysql_real_escape_string($value);
    return $value;
}

foreach($_POST as $key => $value)
{
    $_POST[$key] = real_escape_and_trim($value);
}

$field_name = $_POST['field_name'];