Я создал пустой ассоциативный массив, чьи ключевые слова относятся к представленным данным сообщения. Я могу зафиксировать 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); } }
Дал мне именно то, что хотел, спасибо, ребята!
Вы вообще не получаете доступ к $ _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);