Использование массива для переменных GET - PullRequest
0 голосов
/ 10 июля 2009

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

if (isset($_GET["cmd"]))
  $cmd = $_GET["cmd"];
else
die("Invalid URL");
  if (isset($_GET["username"]))
 { $username = $_GET["username"];}
  if (isset($_GET["firstname"]))
 { $firstname = $_GET["firstname"];}
  if (isset($_GET["lastname"]))
 { $lastname = $_GET["lastname"];}
  if (isset($_GET["street1"]))
 { $street1 = $_GET["street1"];}
  if (isset($_GET["city1"]))
 { $city1 = $_GET["city1"];}
  if (isset($_GET["postcode1"]))
 { $postcode1 = $_GET["postcode1"];}
  if (isset($_GET["street2"]))
 { $street2 = $_GET["street2"];}
  if (isset($_GET["city2"]))
 { $city2 = $_GET["city2"];}
  if (isset($_GET["postcode2"]))
 { $postcode2 = $_GET["postcode2"];}  
 if (isset($_GET["phone"]))
 { $phone = $_GET["phone"];}  
 if (isset($_GET["mobilephone"]))
 { $mobilephone = $_GET["mobilephone"];}  
 if (isset($_GET["fax"]))
 { $fax = $_GET["fax"];}  
 if (isset($_GET["email"]))
 { $email = $_GET["email"];}  
 if (isset($_GET["website"]))
 { $website = $_GET["website"];}  
 if (isset($_GET["bank"]))
 { $bank = $_GET["bank"];}  
 if (isset($_GET["banknumber"]))
 { $banknumber = $_GET["banknumber"];}  
 if (isset($_GET["accountnumber"]))
 { $accountnumber = $_GET["accountnumber"];}  
  if (isset($_GET["subcat"]))
 { $subcat = $_GET["subcat"];}

Ответы [ 4 ]

3 голосов
/ 10 июля 2009

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

Если вы получаете его из формы, вы можете поместить его в массив в самой форме, используя:

<input type="text" name="details[username]" />
<input type="text" name="details[first_name]" />
etc.

Вы получите результаты в виде $ _GET ['details'], который можно повторить с помощью

foreach ($_GET['details'] as $field_name=>$value)
{
    echo "<p>{$field_name} = {$value}</p>";
}

Который должен отображать значения всех данных, введенных в форму. Код, который вы поместите в цикл для его решения, зависит от вас. Например, вы можете построить SQL-оператор внутри foreach, который будет написан при отправке - просто следите за SQL-инъекцией и добавлением пользователем полей.

2 голосов
/ 10 июля 2009

Вы можете использовать извлекать , но не используйте, если не будете осторожны.

Из документа:

Импорт переменных из массива в текущая таблица символов.

Проверяет каждый ключ на наличие допустимое имя переменной. Это также проверяет для столкновений с существующими переменными в таблице символов.

Но будьте осторожны:

Не используйте extract () для недоверенных данные, такие как пользовательский ввод ($_GET, ...). Если вы делаете, например, если вы хотите запустить старый код, который опирается на register_globals временно, сделай уверен, что вы используете один из не перезаписывающие значения extract_type такие как EXTR_SKIP и помните, что вы должны извлечь в том же порядке это определено в variables_order внутри php.ini.

1 голос
/ 10 июля 2009

Группировка значений по умолчанию в массиве:

$default = array(
    'email' => '',
    'name' => NULL,
    //...
);

Затем объедините вашу таблицу и извлеките результат в переменные:

extract( array_merge( $default, $_GET ), EXTR_PREFIX_SAME, 'param' );
// here already existing variable names will be prefixed with 'param_'

И использовать с empty() тестом, когда необходимо:

if( empty( $name ) )
    die( "You must specify the name." );
0 голосов
/ 10 июля 2009

Не уверен насчет вопроса. $ _GET - это массив.

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