对于我的学校作业,我必须创建一个函数,它使用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的初学者,所以请尝试彻底解释。
答案 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'];