Есть какой-нибудь более простой способ сделать $ name = $ _REQUEST [«name»];?

#php #html #forms

#php #HTML #формы

Вопрос:

Итак, я новичок в PHP и пытаюсь создать форму. Я принимаю кучу параметров и хочу обработать их на той же странице. Я не уверен, как это сделать без гигантского if-else, содержащего всю страницу как if($_POST) . Это не кажется идеальным.

Кроме того, я обнаружил, что часто делаю следующее. Есть ли какой-нибудь способ сократить это? Все имена остаются прежними.

 $name = $_REQUEST["name"];
$gender = $_REQUEST["gender"];
$age = $_REQUEST["age"];
  

И у меня есть много строк, которые как раз это и делают, и это кажется ужасно неэффективным

Комментарии:

1. Почему вы хотите выполнить переименование переменных? Вы можете получить доступ к значению, просто используя массив. <?php echo $_REQUEST['foo']; ?> для меня выглядит просто отлично. Для формы: я использую следующую структуру: <?php if(isset($_POST[‘submit’])) { … // выполнить код здесь } ?><html><!— вот форма … —>….

2. GeneSys намекает на то, что полезно знать, исходит ли ваша переменная от вас или от пользователя. С переименованием становится трудно сказать. Возможно, вы захотите принять некоторые меры предосторожности наряду с переименованием. «Правила современного мира: предполагайте злой умысел».

Ответ №1:

Для этого вы можете использовать функцию extract(). Но у этого есть недостаток безопасности: существующие переменные могут быть перезаписаны, если кто-то добавит переменные в заголовок публикации.

Редактировать: решение hsz лучше

Ответ №2:

Какой процесс вы выполняете с if ..else .. если вам нужно опубликовать код, чтобы мы могли сообщить вам, как это можно сократить.

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

 extract($_POST);
  

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

Комментарии:

1. Опасный ход! Это приводит к перезаписи ваших переменных пользователем, если пользователь установит некоторые значения в address (GET) !

2. Вы действительно не должны. Есть причина, по которой register_globals в эти дни по умолчанию отключено. Это вызывает больше проблем, чем того стоит.

Ответ №3:

Прекратите использовать $_REQUEST, потому что это комбинация $ _COOKIE , $ _POST и $_GET. Это становится угрозой безопасности.

Комментарии:

1. Это не так. «Угроза безопасности» — это неправильное присвоение. Проблема, которую это создает, заключается в «фиксации cookie», которая в зависимости от варианта использования становится неудобством для удобства использования, а не проблемой безопасности; особенно в примере OPs. (Я знаю, что на SO это описано лишь бегло, но все же.)

Ответ №4:

Вместо использования $_REQUEST вам следует использовать $_POST здесь.

 $keys = array('name', 'gender', 'age');
foreach ( $keys as $key ) {
  if ( isset($_POST[$key]) ) {
    $$key = $_POST[$key];
  }
  // optional:
  else {
    $$key = ''; // default value
  }
}
  

Комментарии:

1. Хотя это почти то же самое, что extract ().

2. С extract у вас нет контроля над передаваемыми данными.

3. Вы и здесь ничего не контролируете. isset() нет функции безопасности. С extract проще применить префикс к входящим переменным или array_map к экранирующей функции.

4. Я имею в виду, что если пользователь разместит дополнительные переменные, подобные $_POST['password'] then using extract function , она будет перезаписана и rapidash не будет иметь об этом ни малейшего представления — это доставит гораздо больше проблем, чем того стоит.

5. Ладно, ты прав. Вы фильтруете по именам переменных. Но так и есть EXTR_SKIP . И EXTR_PREFIX_ALL мне кажется лучшим вариантом относительно того, чего хочет OP. (Меньше кода для извлечения его переменных.)

Ответ №5:

Волшебные кавычки? http://php.net/manual/en/security.magicquotes.php

Ответ №6:

Для начала: переверните это. Не делайте

 if ($_POST) {
 // Your handling code
} else {
 echo "No data!";
}
  

сделать

 if (!$_POST) {
 die("No data!");
}
// Your handling code
  

Ответ №7:

Вы можете использовать extract(), однако это означает, что вы вводите множество переменных, о которых вы (возможно, не знаете), в свою текущую область.

Мое предложение состояло бы в том, чтобы перебрать ваш массив и что-то сделать с переменными там (например, — проверка)

 foreach ($_POST as $key => $valu) {
   //do something with the variables
}
  

Также не используйте $_REQUEST , если вы действительно не хотите проверить $ _GET, $ _POST и $ _COOKIE. Используйте правильный массив при доступе к переменным, иначе люди могут отправлять данные, которых вы не ожидаете.