我通常只是插入到我的数据库之前使用mysql_real_escape_string
上的每个变量,因此,例如:在逃避一个数组变量和分配逃脱值原始变量值动态
$first_name = mysql_real_escape_string($first_name); // Bill
$last_name = mysql_real_escape_string($last_name); // O'Rielly
$email = mysql_real_escape_string($email); // [email protected]
$insert = mysql_query("
INSERT INTO `users` (first_name, last_name, email)
VALUES ('$first_name', '$last_name', '$email')
") or die(mysql_error());
但在某些形式的我能有可能我想要转义20个不同的变量,所以我希望有一种方法可以使用数组,通过函数运行它来转义每个数组。然后使原始变量($first_name
,$last_name
,$email
)具有数组中已转义字符串的值。我想出了以下内容,但这是我所得到的。
$form_array = array($first_name, $last_name, $email);
print_r($form_array);
echo("<br />".$last_name."<br />");
function cleanInput($array) {
return array_map('mysql_real_escape_string', $array);
}
$clean_array = cleanInput($form_array);
print_r($clean_array);
echo("<br />".$clean_array[1]."<br />");
,它输出以下内容:
Array ([0] => Bill [1] => O'Rielly [2] => [email protected])
O'Rielly
Array ([0] => Bill [1] => O\'Rielly [2] => [email protected])
O\'Rielly
所以,我们可以看到,它的逃逸正确,但我和整个制作$first_name
难倒有$clean_array[0]
值,$last_name
具有的价值$clean_array[1]
等
我当然知道我可以只写:
$first_name = $clean_array[0];
$last_name = $clean_array[1];
但它有点让这个数组/函数根本没有意义,因为我可能只是分别将每个变量/字符串转义出来,我总是这样做。所以我希望有一种方法可以在函数中做某种循环,根据数组中的内容动态地执行此操作。
因为当谈到在未来做验证我只能
- 全部分配$ _ POST数据到变量
- 把它们放在变量数组
- 运行通过功能的阵列和所有原始的$ _POST变量现在都有函数的转义值
- 使用开头提到的插入方法,使用变量的原始名称
$first_name
,$last_name
等。
相反则:
$insert = mysql_query("
INSERT INTO `users` (first_name, last_name, email)
VALUES ('$clean_array[0]', '$clean_array[1]', '$clean_array[2]')
") or die(mysql_error());
这可能吗?
更新
从hakre的有关compact
和extract
功能后,我现在已经想出了以下内容:
$array = compact(array("first_name", "last_name", "email"));
echo("<strong>Before:</strong><br />First Name: ".$first_name."<br />Last Name: ".$last_name."<br />Email: ".$email."<br /><br />");
extract(array_map('mysql_real_escape_string', $array), EXTR_OVERWRITE);
echo("<strong>After:</strong><br />First Name: ".$first_name."<br />Last Name: ".$last_name."<br />Email: ".$email."");
,它输出以下细节如何,我想他们:
之前:
名字:
比尔姓:O'Rielly
电子邮件:[email protected]
后:
名字:
比尔姓: O'Rielly
Email:[email protected]
我试过把extract
放到一个函数中,但是它不起作用?
function cleanInput($array) {
$clean_array = extract(array_map('mysql_real_escape_string', $array), EXTR_OVERWRITE);
return $clean_array;
}
$array = compact(array("first_name", "last_name", "email"));
echo("<strong>Before:</strong><br />First Name: ".$first_name."<br />Last Name: ".$last_name."<br />Email: ".$email."<br /><br />");
cleanInput($array);
echo("<strong>After:</strong><br />First Name: ".$first_name."<br />Last Name: ".$last_name."<br />Email: ".$email."");
我敢肯定,我一定要退回提取功能,但我已经尝试了一些不同的东西,它要么不给任何输出或$last_name
只是打印转义值。
只是通过这些文档快速阅读,因为我现在有点忙,但这看起来像我以后!一旦我以后陷入困境,我会再次联系,谢谢! – Joe
hakre,我用'compact'和'extract'做了一个小提琴,我有一个工作的例子,但不是100%我想要它,我已经用我目前所得到的更新了我的问题,你能看一看,如果你能让我更深入了解从哪里出发?为了向我展示这两个功能+1! – Joe
你使用它是错误的,因为函数有它自己的变量表。紧凑和提取提供了一些基本的变量处理功能。你应该明智地使用它们,让它们做你想做的事。我并不是说这些解决了你的问题或者你完全面对的设计问题。 – hakre