使用数组作为GET变量

时间:2009-07-10 09:41:00

标签: php arrays

我目前正在使用以下代码获取变量,并想知道转换为数组的最佳方法。这样做的主要优点是美观,还是有性能/效率方面?

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 个答案:

答案 0 :(得分:3)

基本上,如果你像上面那样重复,那么通常会有一种更好的做事方式。如果你有一个收集数据,就像你看到的一样,通常最好将它保存在一个数组中。

如果从表单中获取它,您可以使用以下命令将其实际放入表单中的数组中:

<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>";
}

哪个应显示表单中输入的所有数据的值。您在循环中处理它的代码取决于您。例如,您可以在foreach中构建一个SQL语句,该语句将在提交时编写 - 只需注意SQL注入和用户添加字段。

答案 1 :(得分:2)

你可以使用extract,但不要,除非你要小心。

来自doc:

  

将数组中的变量导入   当前的符号表。

     

检查每个键是否有   有效的变量名称。它也检查   与现有变量发生冲突   在符号表中。

但要注意:

  

不要在不受信任的情况下使用extract()   数据,如用户输入($_GET,...)。如果   例如,如果你愿意的话   运行依赖的旧代码   暂时register_globals,制作   确定你使用其中一个   非重写extract_type值   例如EXTR_SKIP并注意到这一点   你应该以相同的顺序提取   在variables_order中定义   在php.ini中。

答案 2 :(得分:1)

将数组中的默认值分组:

$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." );

答案 3 :(得分:0)

不确定这个问题。 $ _GET是一个数组。