2012-02-07 2 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

+0

Вы можете возвращать только один и только один элемент (где «элемент» - это одна переменная, которая также может быть массивом, содержащим несколько значений, тогда). Чтобы использовать автоматически создаваемые переменные вне функции, вам необходимо установить их как глобальные. Но, как упоминалось выше, вы должны подумать о более надежном решении. – djot

+0

Привет, @Phil: Я читаю указанную вами страницу –

ответ

0

Назначение произвольных переменных, предоставленных пользователем, может быть ЧРЕЗВЫЧАЙНО ОПАСНО! Они могут перезаписать любую из ваших переменных.

Причина, по которой она не работает, заключается в том, что они не находятся в глобальном scope. Вам нужно было бы сделать что-то вроде $GLOBALS[$variable] = 'something';

Вместо этого вы должны назначить переменные массиву, чтобы они были изолированы от глобальной области. т.е. $input[$$var] = $escaped_value;

+0

Спасибо, ваше предложение сделать переменную global внутри цикла foreach само работало. Но я рассматриваю возможность конфликта, как вы и другие указали. –

Смежные вопросы