我通常只是插入到我的數據庫之前使用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