Переменные переменные в пределах $ _POST и ассоциативных массивов

StackOverflow https://stackoverflow.com/questions/3585277

Вопрос

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

Я пытаюсь переписать какой-то старый код, который имеет переменные переменные в пределах $ _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, сложнее сделать вариабельный вариабельный трюк.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top