【问题标题】:Using an array for GET variables为 GET 变量使用数组
【发布时间】:2009-07-10 09:41:00
【问题描述】:

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

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

【问题讨论】:

    标签: php arrays


    【解决方案1】:

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

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

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

    你会得到 $_GET['details'] 形式的结果,可以通过 using 进行迭代

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

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

    【讨论】:

      【解决方案2】:

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

      来自文档:

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

      检查每个键是否有 一个有效的变量名。它还检查 对于与现有变量的冲突 在符号表中。

      但请注意:

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

      【讨论】:

        【解决方案3】:

        将默认值分组到一个数组中:

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            猜你喜欢
            • 2015-01-17
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-02-19
            • 2022-11-27
            • 1970-01-01
            • 2013-12-02
            • 1970-01-01
            相关资源
            最近更新 更多