2012-02-07 48 views
-3

我編寫了一個foreach循環並保存在多行代碼中。它基本上佔用了所有的$ _POST變量,並使用它們的名字來創建正常的php變量。PHP:自定義函數中的foreach返回值

foreach(array_keys($_POST) as $str) 
{ 
${$str}=mysqli_real_escape_string($connection,trim($_POST["$str"])); 
} 

它按預期工作,動態創建變量。

現在,我希望把它放在一個自定義函數裏面,所以我修改了它這樣的:

function createvariablesfromPOST() 
{ 
    foreach(array_keys($_POST) as $str) 
    { 
    ${$str}=mysqli_real_escape_string($GLOBALS["connection"],trim($_POST["$str"])); 
    } 
    return //something; 
} 

它沒有明顯的工作,因爲我不知道如何使這個函數返回//東西(不管它事情可能會)到全球範圍。這裏應該做什麼?

我不能讓foreach循環返回任何東西,直到循環完成。不是嗎?

請幫忙。

+7

你正在做什麼是你應該永遠** **做 – zerkms 2012-02-07 06:25:43

+0

的很好的例子,你可以只返回一次,並且只有一個項目(其中,「項目」是一個變量,它也可能是一個數組持有多個值,那麼)。要在函數外部使用自動創建的變量,您必須將它們設置爲全局變量。但如上所述,您應該考慮一個更可靠的解決方案。 – djot 2012-02-07 06:30:13

+0

嗨,@菲爾:我正在閱讀你提到的頁面 – 2012-02-07 06:35:35

回答

0

分配由用戶提供的任何變量可能是非常危險的!他們可以覆蓋你的任何變量。

它不工作的原因,是因爲他們沒有在全球scope。你將不得不做一些像$GLOBALS[$variable] = 'something';

相反,你應該分配變量數組所以他們從全球範圍隔離。即$input[$$var] = $escaped_value;

+0

謝謝,你在foreach循環內部創建變量global的建議已經奏效。但我正在研究你和其他人指出的衝突的可能性。 – 2012-02-07 06:53:23