【问题标题】:Sending multi-dimensional array by POST通过 POST 发送多维数组
【发布时间】:2016-07-25 09:34:42
【问题描述】:

我正在使用以下方式通过 POST 发送多维数组:

<form action="fixtures.php" method="POST">

    <input type="hidden" name="day" value="<?= $day ?>">
    <input type="hidden" name="month" value="<?= $month ?>">
    <input type="hidden" name="year" value="<?= $year ?>">
    <input type="hidden" name="league" value="<?= $league ?>">
    <input type="hidden" name="addFixtures" value="1">

    <?php

    for($i = 0; $i < count($fixtures); $i++){

         $team_a_name = $fixtures[$i]['team-a-name'];
         $team_b_name = $fixtures[$i]['team-b-name'];
         $fixtDate = $fixtures[$i]['Date'];

         echo "<input type='hidden' name=\"fixtures[$i]['team-a-name']\" value='$team_a_name'>";
         echo "<input type='hidden' name=\"fixtures[$i]['team-b-name']\" value='$team_b_name'>";
         echo "<input type='hidden' name=\"fixtures[$i]['date']\" value='$fixtDate'>";

    }

    ?>

    <input type="submit" value="Add Fixtures">

</form>

但是,当我尝试访问存储在 $_POST['fixtures'] 中的值时,使用以下命令:

if(isset($_POST['addFixtures'])){

    print_r($_POST['fixtures'][0]);
    echo "<br><br>";
    print($_POST['fixtures'][0]['date']);

    exit;

}

我得到这个输出:

数组(['team-a-name'] => TEAM A ['team-b-name'] => TEAM B ['date'] => 5-4-2016)

注意:未定义的索引:日期在 /Applications/XAMPP/xamppfiles/htdocs/soccerdome/fixtures.php 上线 33

如果我尝试访问“team-a-name”或“team-b-name”,则会出现相同的通知。 当$_POST['fixtures'][0] 上的print_r 清楚地显示它们在数组中时,为什么我不能访问这些值!

编辑

当打印出$_POST[] 时,我得到:

    Array
(
    [day] => 5
    [month] => 4
    [year] => 2016
    [league] => prem
    [addFixtures] => 1
    [fixtures] => Array
        (
            [0] => Array
                (
                    ['team-a-name'] => TEAM A
                    ['team-b-name'] => TEAM B
                    ['date'] => 5-4-2016
                )

            [1] => Array
                (
                    ['team-a-name'] => TEAM C
                    ['team-b-name'] => TEAM D
                    ['date'] => 5-4-2016
                )

            [2] => Array
                (
                    ['team-a-name'] => TEAM A
                    ['team-b-name'] => TEAM D
                    ['date'] => 12-4-2016
                )

            [3] => Array
                (
                    ['team-a-name'] => TEAM B
                    ['team-b-name'] => TEAM C
                    ['date'] => 12-4-2016
                )

            [4] => Array
                (
                    ['team-a-name'] => TEAM A
                    ['team-b-name'] => TEAM C
                    ['date'] => 19-4-2016
                )

            [5] => Array
                (
                    ['team-a-name'] => TEAM D
                    ['team-b-name'] => TEAM B
                    ['date'] => 19-4-2016
                )

        )

)

编辑 2

由于某种原因,它现在可以工作了!我不知道怎么回事,只是多次刷新页面,错误消息消失了,并且打印了 POST 中的值!

【问题讨论】:

  • 您在日期$fixtDate = $fixtures[$i]['Date']; 中使用大写字母“D”并在输入名称中使用“日期”
  • 尝试从表单输入中的键名中删除单引号。将 name=\"fixtures[$i]['team-a-name']\" 更改为 name=\"fixtures[$i][team-a-name]\"
  • 删除这样的引号:- echo "&lt;input type='hidden' name=\"fixtures[$i][team-a-name]\" value='$team_a_name'&gt;";
  • @GhulamAli 那么team-a-name 是如何工作的?
  • @PraveenKumar 我尝试删除引号并显示相同的错误

标签: php post multidimensional-array


【解决方案1】:

遍历帖子数据的最简单方法是使用foreach。你可以这样做:

if(isset($_POST['addFixtures']))
{
    foreach($_POST['fixtures'] as $key=>$value)
    {
      echo "<br><br>";
      print($value['date']);
    }
}
exit;

【讨论】:

    【解决方案2】:

    由于date中没有任何特殊字符,最好不要'

     echo "<input type='hidden' name=\"fixtures[$i]['team-a-name']\" value='$team_a_name'>";
     echo "<input type='hidden' name=\"fixtures[$i]['team-b-name']\" value='$team_b_name'>";
     echo "<input type='hidden' name=\"fixtures[$i][date]\" value='$fixtDate'>";
    

    或者改成:

     echo "<input type='hidden' name=\"fixtures[$i][team-a-name]\" value='$team_a_name'>";
     echo "<input type='hidden' name=\"fixtures[$i][team-b-name]\" value='$team_b_name'>";
     echo "<input type='hidden' name=\"fixtures[$i][date]\" value='$fixtDate'>";
    

    始终使用var_dump($_POST)print_r($_POST) 来检查现实情况。 :)

    【讨论】:

    • 我在原始问题中使用print_r($_POST) 时已将输出放入,但此代码我已尝试过,但它不起作用
    • @sam 看起来很适合我。
    • 说我上次尝试删除引号,我会将您的答案标记为正确答案
    【解决方案3】:

    print_r 整个 post 数组。即 print_r($_POST)。然后您将获得分配的确切键和值,并将成功显示该数组。

    【讨论】:

      猜你喜欢
      • 2013-04-22
      • 2011-05-14
      • 1970-01-01
      • 2013-04-02
      • 2014-12-10
      • 1970-01-01
      • 2016-05-11
      • 2015-01-31
      • 1970-01-01
      相关资源
      最近更新 更多