我有這樣的:PHP:的foreach和數組問題
foreach($_POST as $key => $value) {
$data[$key] = filter($value);
}
filter();
條如果任何標籤,而真正的逃避它們。
現在我在POST表單中也有一個數組,所以我在strip_tags()
和mysql_real_escape_string
中收到錯誤。我應該如何讓只有$_POST["Searching"]
不被filter();
過濾?
我有這樣的:PHP:的foreach和數組問題
foreach($_POST as $key => $value) {
$data[$key] = filter($value);
}
filter();
條如果任何標籤,而真正的逃避它們。
現在我在POST表單中也有一個數組,所以我在strip_tags()
和mysql_real_escape_string
中收到錯誤。我應該如何讓只有$_POST["Searching"]
不被filter();
過濾?
使用is_array():
array_walk_recursive($_POST,'filter');
,讓你的函數filter
如參考取值
foreach($_POST as $key => $value) {
if (!is_array($value))
$data[$key] = filter($value);
}
您可以使用array_walk_recursive
。
function filter(&$value) {
// apply strip_tags and real escape to $value.
$value = mysql_real_escape(strip_tags($value));
}
小的語法 - 不應該'array_walk_recursive($ _ POST,過濾器);'是'array_walk_recursive($ _ POST, '過濾器');' ?另外,就像我自己的教化問題一樣 - 這個函數不是在原地嘗試和修改源數組,而是將它轉錄到一個新的數組中,比如問題中的'$ data'?我從php.net看到,這個函數只返回true或false。 – 2010-10-06 15:53:32
也不建議使用引用時間傳遞參考,並會引發警告。應該是'array_walk_recursive($ _ POST,'filter');' – meagar 2010-10-06 15:59:22
@ Lucanos,@ meagar:謝謝。 – codaddict 2010-10-06 16:09:10
<?php
foreach($_POST as $key => $value){
if(!is_array($_POST[$key])){
$data[$key] = filter($value);
}else{
$data[$key] = $value;
}
}
?>
此解決方案不完整 - 如果遇到數組,它什麼也不做。雖然它防止了filter()在嘗試處理數組時拋出錯誤,但這也意味着該數組會丟失數據(因爲任何子數組都會被丟棄)。 – 2010-10-06 15:51:04
你是對的。我太快地輸入了我的原始解決方案。 – FallenRayne 2010-10-06 16:02:21
首先,你可以使用array_map()
加快這,所有你需要做的就是允許函數識別數組並遞歸地調用它自己。
function filter($inVar){
if(is_array($inVar))
return array_map('filter' , $inVar);
return mysql_real_escape(strip_tags($inVar));
}
然後調用它像這樣:
$data = array_map('filter' , $_POST);
在哪裏? – Johnson 2010-10-06 15:48:14
是的,在foreach中,但用$ value改變$ _POST ['Searching']。我改變了答案。 – CristiC 2010-10-06 15:49:55