2012-11-16 43 views
1

对于我的学校作业,我必须创建一个函数,它使用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','email'和'wachtwoord'(密码)。

请帮我:(!我关于PHP初学者,所以请尽量详细解释。

+0

为什么你试图设置键值等于? – sofl

+0

我想要这样: $ _POST ['voorletters'] =“输入” 最终给出: $ voorletters =“imput”; 随着安全检查course. – Lisa

+0

一个非常简单的解决方案可能是这样的:'foreach($ _ POST为&$ val)$ val = mysql_real_escape_string(htmlspecialchars(trim($ val)));'..it通过任何帖子值通过引用和掩码/转义它。 – sofl

回答

2

这个怎么样

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

其中your_filter()是你的函数调用修剪, 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()函数的例子

+0

好吧,当我需要应用多个过滤器时,我可以这样做吗? 'foreach($ _ POST为$ key => $ value){ echo'$ _POST [“'。$ key。'”]中的当前值为:'。 $值。'
'; $ _POST [$ key] = trim($ value); \t $ _POST [$ key] = htmlspecialchars($ value); \t $ _POST [$ key] = mysql_real_escape_string($ value); }' – Lisa

+0

不,因为这样做,您不会更改$值,因此您只会存储mysql_real_escape_string($ value);的结果。我更新了我的答案,以显示一个功能来做你想做的事情。您也可以直接在foreach中执行 – koopajah

+0

好的。我怎样才能获得像$ voorletters(从$ _POST ['voorletters'])变量中的$ _POST变量? – Lisa

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

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

} 
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; 
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'];