【问题标题】:PHP Array'd POST Variable NamePHP Array'd POST 变量名
【发布时间】:2011-09-11 05:18:38
【问题描述】:

我正在尝试使用以下代码:

  1. 测试是否已提交动态分配的字段名称之一;
  2. 使用“可操作​​代码”处理提交的信息。

我的问题在于我无法检索适当的动态变量名称。 $this->get_field_name('email_to') 会输出一个名称变量如widget-mywidget[3][email_to];但是要通过 PHP 访问这个值,我需要以 $_POST['widget-mywidget'][3]['email_to'] 的形式。

我该如何解决这个难题?

输出的 HTML:

<form id="widget-mywidget-3-osiris_contact" method="post" action="">
<fieldset>
<input type="text" name="widget-mywidget[3][user_name]">
<input type="text" name="widget-mywidget[3][user_email]">
<textarea name="widget-mywidget[3][user_message]"></textarea>
</fieldset>
<fieldset>
<input type="hidden" name="widget-mywidget[3][email_to]" value="">
<input type="hidden" name="widget-mywidget[3][email_subject]" value="">
<button type="submit" name="widget-mywidget[3][email_send]">Send</button>
</fieldset>
</form>

处理 PHP:

if(in_array($this->get_field_name('email_to'), $_POST)){ // <--- Where I need help.
    // Actionable Code
}

【问题讨论】:

    标签: php arrays forms multidimensional-array wordpress-theming


    【解决方案1】:

    这就是$this-&gt;get_field_name 所做的:

      function get_field_name($field_name) {
         return 'widget-' . $this->id_base . '[' . $this->number . '][' . $field_name . ']';
      }
    

    我建议你 print_r($_POST) 并在视觉上比较它以获得更好的调试...
    (或者使用调试器...)

    【讨论】:

    • 数据返回,没问题;问题是我不知道如何测试或访问动态命名的变量。
    • 哈哈……你真是个天才!我花了一段时间才意识到你在说什么,但完美。我使用了以下内容: isset($_POST['widget-' . $this->id_base][$this->number]。谢谢。
    【解决方案2】:
    $thing  = "widget-mywidget[3][email_to]";
    $exp    = explode("[", $thing);
    $get_it = $_POST['".$exp[0]."[".$exp[1]."[".$exp[2]."'];
    

    试试看,如果可行的话。

    【讨论】:

    • 一般来说,这不是处理变量的方法......而且你有一个 API 来处理它......
    • 你所拥有的不会完全有效,但我明白你在做什么。我会玩弄它的。
    猜你喜欢
    • 2012-06-13
    • 2011-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多