Переменные переменные в пределах $ _POST и ассоциативных массивов
-
01-10-2019 - |
Вопрос
Я, вероятно, немного толстый, но я не могу найти ответ на это. Я перехожу с сервера с регистраторами зарегистрируйтесь на один с ним. Это хорошая вещь, но, к сожалению, я привык к годам, и годы, работающие с регистрами, находящиеся на том, находящиеся на том, что привело к записи небрежно. Я сейчас пытаюсь это исправить.
Я пытаюсь переписать какой-то старый код, который имеет переменные переменные в пределах $ _POST.
Я знаю, что это глупый пример, но это иллюстрирует проблему, которую я пытаюсь решить. Следующее будет работать с регистрами глобал на:
<?php $variable = "fullname";?>
<form action="/test/" method="post">
<label for="fullname">Full Name:</label> <input name="fullname" type="text" value="<?php echo $$variable;?>" size="20" maxlength="150" />
<input name="submit" type="submit" value="Go!" />
</form>
Как мне сделать эту работу с отключенными глобалами? Следующее, очевидно, не работает:
<?php $variable = "fullname";?>
<form action="/test/" method="post">
<label for="fullname">Full Name:</label> <input name="fullname" type="text" value="<?php echo $_POST[$$variable];?>" size="20" maxlength="150" />
<input name="submit" type="submit" value="Go!" />
</form>
Пожалуйста, идите легко на меня - я знаю, что я, вероятно, буду глупый, но я не могу, казалось, не смотрите голову вокруг этого.
Решение
Просто, просто $_POST[$variable]
. Отказ (Или $_GET
или, может быть $_REQUEST
, в зависимости от ситуации.)
Однако обратите внимание, что при выходе из текста на HTML вы должны кодировать его, или вы будете уязвимы для атак на скрипты на сайт:
<input type="text"
name="<?php echo htmlspecialchars($variable);?>"
value="<?php echo htmlspecialchars($_POST[$variable]);?>"
size="20" maxlength="150"
/>
(Я обычно определяю функцию под названием h
это делает echo htmlspecialchars
, чтобы сократить это чрезмерное количество печати.)
Другие советы
У меня есть некоторые формы взаимодействия, похожие на ваши, но я не могу понять, почему вы используете $ _POST в форме. То, что вы должны иметь, это:
<?php $variable = $_POST["fullname"];?>
<form action="/test/" method="post">
<label for="fullname">Full Name:</label> <input name="fullname" type="text" value="<?php echo $variable; ?>" size="20" maxlength="150" />
<input name="submit" type="submit" value="Go!" />
</form>
$ _POST - это массив, не будет ли это просто.
$_POST[$variable]
Вы можете избавиться от всего $$
сумасшествие и просто сделать $_POST[$variable]
.
Вы уверены, что вы имели в виду $_POST[$$variable]
в отличие от $_POST[$variable]
Использование переменных переменных непосредственно от $ _super Globals - это плохое представление и риск безопасности, особенно если какой-либо из вашего кода является открытым исходным кодом. Можно изменить вход, чтобы ткать и узнать значение любой переменной, которую вы пропустите. Например, они могли бы передать в «$ _env», который бы доставит их свалка ваших переменных окружающей среды. На самом деле, регистрирование глобалов в любом случае плохая идея.
Это упоминается в ответе @ бобинса.
И, в отношении вашего вопроса, именно поэтому ваш пример не работает с Globals регистрирования PHP. PHP является более строгим (по причинам) с регистром Global's Off, afaik, сложнее сделать вариабельный вариабельный трюк.