переменные переменные в $ _POST и ассоциативные массивы - PullRequest
2 голосов
/ 27 августа 2010

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

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

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

Ответы [ 6 ]

7 голосов
/ 27 августа 2010

Простой, просто $_POST[$variable].(Или $_GET или, возможно, $_REQUEST, в зависимости от ситуации.)

Однако учтите, что при выводе текста в HTML вы должны его кодировать, иначе вы будете уязвимы для атак с использованием межсайтовых сценариев:1006 *

<input type="text"
    name="<?php echo htmlspecialchars($variable);?>"
    value="<?php echo htmlspecialchars($_POST[$variable]);?>" 
    size="20" maxlength="150"
/>

(я обычно определяю функцию с именем h, которая выполняет echo htmlspecialchars, чтобы сократить это чрезмерное количество печатания.)

2 голосов
/ 27 августа 2010

У меня есть некоторые формы взаимодействия, похожие на ваши, но я не могу понять, почему вы используете $ _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>
1 голос
/ 27 августа 2010

вы можете избавиться от всего $$ сумасшествия и просто сделать $_POST[$variable].

1 голос
/ 27 августа 2010

Вы уверены, что имели в виду $_POST[$$variable] вместо $_POST[$variable]

1 голос
/ 27 августа 2010

$ _ POST - это массив, не так ли?

$_POST[$variable]
0 голосов
/ 27 августа 2010

Использование переменных переменных непосредственно из глобальных переменных $ _SUPER - ПЛОХАЯ идея и угроза безопасности, особенно если любой ваш код имеет открытый код Можно изменить ввод для поиска и определения значения любой переменной, которую вы пропустите. Например, они могут передать '$ _ENV', что даст им дамп переменных вашей среды. На самом деле, зарегистрировать глобальные переменные в любом случае - плохая идея.

Об этом говорится в ответе @ bobince.

И, что касается вашего вопроса, именно поэтому ваш пример не работает с отключенными глобальными переменными регистров PHP. PHP более строгий (по уважительной причине) с отключенным регистром global, афаик, сложнее сделать трюк с переменной переменной.

...