Как я могу получить все отправленные значения формы в PHP и автоматически назначить их переменным? - PullRequest
3 голосов
/ 22 апреля 2011

Я пытаюсь перенести сайт с одного хоста на другой.На первом хосте, когда вы отправляете форму, все значения формы автоматически вставляются в переменные с входным именем (это PHP).На новом хосте все эти значения будут нулевыми, если я не сделаю это:

$data = $_GET['data'];

Существует ли параметр конфигурации PHP, вызывающий это?Если нет, есть ли простой способ перебрать все переменные $ _GET и автоматически присвоить их значения переменной с тем же именем?

Спасибо!

Ответы [ 4 ]

6 голосов
/ 22 апреля 2011

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

Если вам абсолютно необходимо, вы можете сделать это следующим образом:

foreach ($_GET as $key=>$value) {
    $$key = $value;
}

или, болеепросто:

import_request_variables("g");

или, чтобы сделать его немного более безопасным:

import_request_variables("g", "myprefix_"); // This way forces you to use "myprefix_" 
// in front of the variables, better ensuring you are not unaware 
// of the fact that this can come from a user

extract ($ _ GET) также может работать, как кто-то еще указал, и также позволяет спецификацию (через дополнительные аргументы) добавления префикса или что делать, если ваше извлечение конфликтует с уже существующей переменной (например, если вы извлекли после того, как вы определили некоторые другие переменные).

3 голосов
/ 22 апреля 2011

Посмотрите на функцию извлечения: http://www.php.net/manual/en/function.extract.php

1 голос
/ 22 апреля 2011

Вы можете сделать что-то вроде этого:

foreach ($_GET["data"] as $name => $value){
  $$name = $value;
}

Проблема заключается в том, что людям легко играть с переменными в вашем скрипте. Я мог бы посетить http://yoursite.com/?sql=DELETE+FROM...

Я бы посоветовал не делать этого и просто придерживаться $ _GET.

0 голосов
/ 22 апреля 2011

Ваш вопрос означает, что вы не выполняете никакой фильтрации или проверки при назначении $ _GET ['data'] для $ data, если только вы не выполняете такого рода проверки далее по вашему сценарию.

Из того, что у меня естьВидно, что большинство программистов делают это в первую очередь, пытаясь рано потерпеть неудачу, если ожидаемые данные не соответствуют ожиданиям, так что вышеупомянутое назначение в случае ожидания положительного значения int станет чем-то вроде:

if( isset($_GET['data']) && (int)$_GET['data'] === 0){
//fail
}else{
$data = $_GET['data'];
}

Такпросто видение

$data = $_GET['data'] 

заставляет меня вздрогнуть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...