используя цикл foreach для инициализации переменных

Я создал пустой ассоциативный массив, чьи ключевые слова относятся к представленным данным сообщения. Я могу зафиксировать postdata просто отлично, но я столкнулся с трудностями при попытке создать переменные, имена которых соответствуют ключу массива.

например:

$insArray = array('rUsername'=>'', 'rPass'=>'', 'rQuestion'=>'', 'rAnswer'=>'', 'rFName'=>'', 'rLName'=>'', 'rBDateD'=>'', 'rBDateM'=>'', 'rBDateY'=>'', 'rHCheck'=>'', 'rHCeckOption'=>'', 'rEmail'=>''); foreach($insArray as $key=>$value){ if (filter_input(INPUT_POST, $key) != ''){ $key = stripslashes(filter_input(INPUT_POST, $key)); $insArray[$key] = $key; } } 

Первая строка создает пустой массив, затем foreach проходит через этот массив. Теперь это становится сложно.

filter_input(INPUT_POST, $key) фиксирует значение, находящееся в столбце данных, соответствующих текущему ключу, rUsername в этом случае

$key – вот где проблема. Я хочу, чтобы NAME новой переменной являлось ассоциативным именем ключа, например, я хочу заменить $ key на $ rUsername в первой итерации, $ rPass во втором и т. Д. Я попытался использовать две $$, но я знаю, что это неправильно. Никогда не пробовал делать это раньше, но было бы полезно, если бы я мог понять это.

ОБНОВИТЬ:

Это окончательный код, который был комбинацией двух из представленных ответов.

 if (isset($_POST['submit'])) { //Build array of variables to be put into database $insArray = array('rUsername'=>'', 'rPassword'=>'', 'rQuestion'=>'', 'rAnswer'=>'', 'rFName'=>'', 'rLName'=>'', 'rBDateD'=>'', 'rBDateM'=>'', 'rBDateY'=>'', 'rHCheck'=>'', 'rHCheckOption'=>'', 'rEmail'=>''); foreach(array_keys($insArray) as $key){ $insArray[$key] = filter_input(INPUT_POST, $key); $$key = filter_input(INPUT_POST, $key); } } 

Дал мне именно то, что хотел, спасибо, ребята!

Solutions Collecting From Web of "используя цикл foreach для инициализации переменных"

Вы вообще не получаете доступ к $ _POST, так что все, что вы делаете, – это взять некоторые члены массива, которые вы сами определили, фильтруя их для опасных символов POST (зачем вы пытаетесь ввести свой собственный код?), А затем создайте новый массив из те самоопределенные значения ключа.

Если я догадываюсь, что вы хотите, это должно быть так:

 foreach(array_keys($insArray) as $key) { $insArray[$key] = stripslashes(filter_input(INPUT_POST, $_POST[$key])); } 

Использование stripslashes предполагает, что вы находитесь на версии Braindead PHP, которая включает magic_quotes. Вы должны перейти на современную версию PHP и / или отключить их.

Решение – это изменение

 $key = stripslashes(filter_input(INPUT_POST, $key)); 

в

 $$key = stripslashes(filter_input(INPUT_POST, $key)); 

См. http://www.php.net/manual/en/language.variables.variable.php.

Также перепроверьте свой код, который совершает некоторые ошибки.

Если я правильно вас пойму, я собираюсь предложить такой подход:

 $defaultValues = array('rUsername'=>'', 'rPass'=>'', 'rQuestion'=>'', 'rAnswer'=>'', 'rFName'=>'', 'rLName'=>'', 'rBDateD'=>'', 'rBDateM'=>'', 'rBDateY'=>'', 'rHCheck'=>'', 'rHCeckOption'=>'', 'rEmail'=>''); $values = array_map('stripslashes', array_merge($defaultValues, array_filter($_POST))); extract($values, EXTR_SKIP); echo $rUsername; echo $rPass; ......... 

Используя вышеприведенный фрагмент, вы должны принять во внимание следующее

  • Я использую функцию extract с EXTR_SKIP, чтобы вы не перезаписывали существующие переменные. Обязательно используйте только переменные, которые вам нужны в вашем коде, и тщательно их дезинфицируйте.

  • Используя array_filter на супер-логарифме $ _POST, он «стирает» все пустые или нулевые переменные. поэтому, если ожидаемый ключ не был отправлен через $ _POST, он по умолчанию задает значение, заданное массивом $ defaultValues.

  • Я не совсем понимаю, почему вы используете filter_input без третьего параметра (константы фильтра).

Надеюсь, это поможет, если не может быть, я неправильно понял проблему.

Вместо

 $key = stripslashes(filter_input(INPUT_POST, $key)); $insArray[$key] = $key; 

Пытаться

 $insArray[$key] =stripslashes(filter_input(INPUT_POST, $key)); 

Затем после цикла foreach

 extract($insArray);