【问题标题】:Modifying items in a $_POST array修改 $_POST 数组中的项目
【发布时间】:2013-09-17 12:10:56
【问题描述】:

我正在使用 CodeIgniter 验证表单数据,然后使用 php header() 函数将其发布到第三方站点,其中 $_POST 键值对作为 URL 参数。比如:

'first_name' => '克里斯' 'area_code' => '555' 'phone_number => '555-5555'

...会变成'http://thirdpartysite.com?first_name=chris&area_code=555&phone_number=555-5555'。

我能想到的最“优雅”的方法是像这样遍历 $_POST 数组...

$formValues = $this->input->post(NULL, TRUE);
foreach($formValues as $key => $value) 
{
    $postURL .= $key . '=' . $value . '&';
}

问题是第三方网站需要把一个完整的电话号码作为一个参数;它不能将“区号”和“电话号码”分成两部分,因为我的表格上有它。所以我需要做的是连接 area_code 和 phone_number 并将其存储在一个新变量中,该变量将附加到 URL 字符串中。

最好的方法是什么?我正在考虑可能在 foreach 循环中添加一个 if、else 语句来检查键是“area_code”还是“phone_number”并执行正确的操作,但是有没有更好的方法来做到这一点? php 或 CodeIgniter 中是否有本地方法可以在迭代 $_POST 数组之前对其进行修改?

谢谢!!

【问题讨论】:

  • 为什么不手动做呢? 'phoneNumber=' . area_code . '-' . phone_number(当然要使用URI转义)。

标签: php arrays forms codeigniter


【解决方案1】:

您可以像修改任何其他数组一样直接修改 $_POST 数组。

可以做:

$_POST['phone'] = $_POST['area_code'] . $_POST['phone_number'];
unset($_POST['area_code']);
unset($_POST['phone_number']);

然后运行您现有的代码。

但是,以这种方式处理用户输入并不是一个很好的理想选择 - 您实际上应该只使用您需要传递给第三方 URL 的字段,否则恶意人员可能会使用您的脚本来攻击第三方服务器。

【讨论】:

    【解决方案2】:

    您可以在 formValues 数组中将区号添加到电话号码的开头,然后删除区号元素:

    $formValues = $this->input->post (NULL, TRUE);
    
    $formValues['phone_number'] = $formValues['area_code'] . '-' . $formValues['phone_number'];
    unset ($formValues['area_code'];
    
    foreach ($formValues as $key => $value) 
    {
        $postURL .= $key . '=' . $value . '&';
    }
    

    【讨论】:

      【解决方案3】:

      保持很简单:

      $formValues = $this->input->post(NULL, TRUE);
      $postUrl = $address . "?first_name=" . $formValues["first_name"] . "&phone=" . $formValues["area_code"] . "-" . $formValues["phone_number"];
      

      这就是我的处理方式。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-16
        • 2018-10-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多