【问题标题】:How to POST an associative array in PHP如何在 PHP 中发布关联数组
【发布时间】:2012-12-12 14:45:49
【问题描述】:

我有以下表格:

<form action="options.php" method="post">
    <input type="text" name="deptid" id="deptid" />
    <input type="text" name="deptname" id="deptname" />
    <input type="submit" name="submit" id="submit" value="save" />
</form>

编辑

是否可以将这两个值传递到一个关联数组 BEFORE 提交? 我想以这种形式传递它:

array('deptid'=>'deptname')

我需要这个,因为我避免修改目标 php 文件(options.php)的脚本

谢谢。

【问题讨论】:

  • @HankyPanky - cURL 与此有什么关系?
  • 因为他说“只使用php脚本”。因此,如果他必须仅使用 php 脚本在此页面上发布数据,那么对于初学者来说,我认为 cURL 会很好。
  • @HankyPanky - 如果服务器正在联系另一台服务器以将信息拉回服务器。这是客户端到服务器到客户端并返回到服务器......?我不知道 cURL 会出现在图片的哪个位置。
  • 也许我当时误解了这个问题。很抱歉。

标签: php html associative-array


【解决方案1】:

$_POST 已经是一个关联数组,并且我建议您不要将其复杂化,因为$_POST 已经保存了来自您的表单的数据

$myassoc = $_POST;
print_r($myassoc);

并且您将收到的关联数组在表单中输入元素的名称属性中组织和命名相同(包括文本区域)

其他见解

当我看到您的代码时,您希望将deptname 数据放入deptid,因为它到达 PHP 服务器端代码。那么你可以做的就是把它分配给键deptid

$_POST['deptid'] = $_POST['deptname'];
$myassoc = $_POST;
print_r($myassoc);

【讨论】:

  • 我有一些完全不同的东西,我认为 OP 追求的是; POST 是关联的,但我认为 OP 希望 keys and values 与 POST 数组中的 within 相关联。
  • 所以他想用 POST 数组 merge 它?
【解决方案2】:

您为什么要这样做? 但是,您可以通过以下形式发送“数组”:

<form method="post">
    <input type="text" name="textboxes[]" />
    <input type="text" name="textboxes[]" />
    <input type="submit" />
</form>

<?php
    if(isset($_POST['textboxes']))
        var_dump($_POST['textboxes']);
?>

【讨论】:

    【解决方案3】:

    这是一种使用纯 HTML 的方法,可以几乎准确到达您想要的位置,并且只使用 HTML:

    <form action="options.php" method="post">
        <input type="text" name="options[deptid]" id="deptid" />
        <input type="text" name="options[deptname]" id="deptname" />
        <input type="submit" name="submit" id="submit" value="save" />
    </form>
    

    这会给你在 PHP 中:

    $post_options = array(
        'options' => array(
            'deptid '=> '[that input element value]',
            'deptname' => '[that input element value]'
        )
    );
    

    然后您可以(包括清理)访问,例如:

    $post_options = array('options');
    
    if (is_numeric($post_options['deptid'] && $post_options['deptid'] > 0) {
        // Do whatever 
    }
    
    if (is_string($post_options['deptname'] && strlen($post_options['deptname'] > 2)) {
        // Do whatever 
    }
    

    编辑

    或者...您想在input name 属性中引用deptid 并使用它来修改部门名称所在的行?这似乎表明这样的事情:

    <?php
    
    $deptid = 1;
    $deptname = 'Department of Silly Walks';
    
    ?><input type="hidden" name="options[<?=$deptid?>]" value="<?=$deptname?>">
    

    哪些输出:

    <input type="hidden" name="options[1]" value="Department of Silly Walks">
    

    http://codepad.org/DtgoZGe7

    问题在于$deptid 值变成了一个实际上并没有直接命名或引用的值。我认为由于从服务器到客户端再返回的值的这种抽象,实现这可能会出现问题,所以我会推荐我在顶部拥有的东西。这在实践中并没有太大的不同,但它或多或少是自我记录的。

    注意,如果您想对部门列表进行序列化,那就有点棘手了。例如,您可以试试这个:

    <input type="text" name="options[][deptid]" id="deptid" />
    <input type="text" name="options[][deptname]" id="deptname" />
    

    这将为每个 input 添加一个索引值。但是……它们不会直接关联。因此,您将获得每个键对应的两个零索引数组。

    在这种情况下,我的建议是使用 Javascript 来添加每个新部门的 input 元素,这样您就可以给每个元素一个数字,例如:

    <input type="text" name="options[0][deptid]" id="deptid" />
    <input type="text" name="options[0][deptname]" id="deptname" />
    <br/>
    <input type="text" name="options[1][deptid]" id="deptid" />
    <input type="text" name="options[1][deptname]" id="deptname" />
    <br/>
    <input type="text" name="options[2][deptid]" id="deptid" />
    <input type="text" name="options[2][deptname]" id="deptname" />
    <br/>
    <input type="text" name="options[3][deptid]" id="deptid" />
    <input type="text" name="options[3][deptname]" id="deptname" />
    

    或者使用老式的 POSTBACK 方法并使用 PHP 计算 $POST['options'] 并“手动”添加具有相同索引的新“行”输入。这是一个常见的陷阱,所以你只需要考虑一下,如果这是你在某个时候所追求的。

    【讨论】:

    • 在这种情况下它仍然是一样的......另一个数组中的一个数组
    • @Mahan - 没错。它非常有用;当您有多个新条目并且希望通过 POST options 数组直接管理部门列表时,请参阅我的编辑以获取联合示例。
    • 好吧,我只是按照OP的代码,让我们看看他以后会不会改变它
    • @Mahan - 这是提供的内容:array('deptid'=&gt;'deptname')。也就是说,如果没有客户端 Javascript 操作 input 值(例如,作为修改 onsubmit 的隐藏值),这似乎表明将名称与行 ID 分离。所以它可能只是 OP 需要&lt;input type="hidden" name="&lt;?=$deptid?&gt;" value="&lt;?=$deptname?&gt;"&gt;。我刚刚想到的。唔。所以希望我们能听到 OP 的消息。
    • @user1134475 - 您必须使用 PHP 从您的数据库或源中获取 $deptid$deptname 并将其插入(例如,使用模板方法)。它就在您存储该数据的任何地方。一个典型的方法是Model-View-Controller (MVC) 设计模式。
    【解决方案4】:
    $deptid = $_POST['deptid'];
    $array = array($$deptid => $_POST['deptname']);
    print_r($array);
    

    【讨论】:

      【解决方案5】:
      <form method="post">
          <input type="text" name="formdata['deptid']" />
          <input type="text" name="formdata['deptname']" />
          <input type="submit" />
      </form>
      
      <?php
          if(isset($_POST['formdata']))
          {
             $deptid = $_POST['formdata']['deptid'];
             $deptname = $_POST['formdata']['deptname'];
          }
      ?>
      

      【讨论】:

        【解决方案6】:

        $_POST 已经是一个关联数组。

        您可以通过将$_POST 分配给一个变量来重建您需要的表单数组

        $myarray = $_POST;
        

        现在 $myarray 就是您所需要的。做var_dump($myvar);

        【讨论】:

        • 谢谢,但我不想修改服务器中的 php 脚本 (options.php)
        【解决方案7】:

        构建一个具有适当结构的 JS 对象,使用JSON.stringify() 将其转换为 JSON,发布它,然后执行json_decode($_POST['data'],true)

        您将获得从 JS 对象到 PHP 关联数组的精确副本。去掉true的第二个参数,得到一个PHP对象。

        【讨论】:

          猜你喜欢
          • 2019-08-14
          • 2016-04-27
          • 2018-03-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-01-04
          • 2019-09-30
          • 2021-08-01
          相关资源
          最近更新 更多