Php Foreach未定义的偏移量错误,带有$\u POST和多个数组

Php Foreach未定义的偏移量错误,带有$\u POST和多个数组,php,arrays,foreach,Php,Arrays,Foreach,这是我的密码: if (isset($_POST['editbutton'])) { UNSET ($_POST['editbutton']); foreach ($_POST as list ($id, $payment,$date)){ echo $id; echo $payment; echo $date;} // $sqlupdate = ("UPDATE paymen

这是我的密码:

if (isset($_POST['editbutton']))
        {
            UNSET ($_POST['editbutton']);
        foreach ($_POST as list ($id, $payment,$date)){
        echo $id;
        echo $payment;
        echo $date;}
        // $sqlupdate = ("UPDATE payments SET payment=:payment,payment_date=:date WHERE pay_id=:id");
        // $preparedStatement = $db->prepare($sqlupdate);
        }
我现在已经把我的更新注释掉了,只是想克服这个错误。echo现在也只是用于测试。以下是我的$u帖子的var\u转储:

 array (size=3)
  'id' => 
    array (size=2)
      0 => string '66' (length=2)
      1 => string '61' (length=2)
  'payment' => 
    array (size=2)
      0 => string '67.00' (length=5)
      1 => string '125.00' (length=6)
  'date' => 
    array (size=2)
      0 => string '2015-07-19' (length=10)
      1 => string '2015-07-15' (length=10)
所以,我在$\u POST中有我想要的东西,但foreach的表现并没有达到我的预期。下面是我得到的错误:

Notice: Undefined offset: 2 in C:\foo on line 98
当然,第98行是:

foreach ($_POST as list ($id, $payment,$date))
那么,我对foreach有什么不理解呢?因为这是一个foreach,一旦它到达终点,它应该停止,但它似乎是foreach一个额外的时间。思想?建议

我想我想做的很简单(至少对我来说),但我会解释的。我有一个表单,允许我一次更新多行。它将它们作为$u POST['ID']、$u POST['payment']和$u POST['pay\u date']提交。我的var_转储显示我正从表单中得到我所需要的东西。然而,当我尝试构建我的查询时,我遇到了从数组中获取正确值的问题。我要做的是从每个数组中获取[0]位置,并将它们放入我准备的查询中,运行更新查询,然后从每个数组的[1]值重新开始,运行更新,然后重复


编辑:我得到了一个完美的答案,这是我的工作代码

 if (isset($_POST['editbutton']))
    {
      UNSET ($_POST['editbutton']);
      $sqlupdate = ("UPDATE payments SET payment=:payment, payment_date=:date WHERE pay_id=:id");
      $preparedStatement = $db->prepare($sqlupdate);
      list($id, $payment, $date) = array_values($_POST);
      foreach ($id as $key => $items)
         {
           $preparedStatement->execute(array(':payment' => $payment[$key], ':date' => $date[$key], ':id' => $items));
         }
    }
不幸的是,list()不能像我们预期的那样处理关联数组和多维数组。你可以在这里查阅:

但是,如果您想以任何方式使用list(),可以这样使用它:

list($id, $payment, $date) = array_values($_POST);
foreach ($id as $key => $items) {
    echo $items;
    echo $payment[$key];
    echo $date[$key];
}

您可以根据需要使用其他变体来代替foreach。

您没有得到正确的值

尝试添加:

echo 'id is ' .$id;
echo 'payment is '.$payment;
echo 'date is..well not valid ' .$date;

也许你也可以通过理解上一个答案来学到一些东西。

UNSET
将重置你的
$\u POST
值。所以在你的工作完成后使用它

所以最终的井型代码是

<?php
if (isset($_POST['editbutton']))
{
    foreach ($_POST as list ($id, $payment,$date))
    {
        echo $id;
        echo $payment;
        echo $date;
    }
    //unset after doing the job
    UNSET ($_POST['editbutton']);
}

我正在取消设置数组的[editbutton]部分,而不是全部$\u POST。在我这么做之前,它一直试图将editbutton的输入标记的名称放入foreach的输出中。通过取消设置,它至少解决了这个问题。它解决了[editbutton]数组值进入我的foreach的问题,这就是我在那里取消设置的原因,它解决了我添加它来修复的问题。我的问题,我张贴我的问题是没有固定的,但我还没有机会尝试下面的建议。我很快会的。是的,在我写了我的问题之后,我洗了个澡,并且有了一个很棒的淋浴时间体验。我的大部分好主意都发生在淋浴时!哈哈,我没有得到我期望的输出,我把所有的[id]转储到$id中,然后所有的[payment]转储到$payment中,依此类推。不仅仅是每个数组的第一个值。foreach只是没有按照我预期的方式行事。谢谢。嗯:P我已经用php工作了大约3年,在循环数据时我从不使用列表。我认为,如果您不使用list()foreach,从我在您的链接中读到的内容来看,似乎会更容易理解,list()尝试处理数值数组,但在关联数组中效果不佳,正如您所说。我在别的地方读到过,所以我使用了foreach($editinfo[]){},当我把$editinfo转储到var_时,它去掉了“名称”,而是创建了一个数字数组。但当我运行foreach($editinfo as list($id,$payment,$pay_date))时,仍然会遇到同样的错误。因此,我将仔细考虑你上面的建议,看看我能用它做些什么。谢谢我已经读过关于使用foreach的文章,就像你在上面展示的那样,但是我不是100%理解它是如何工作的,我将把它放到我的代码中,并转储变量,直到我这样做。我还更新了我的问题,加入了我写问题后意识到的一些东西,并澄清了我想做什么。非常感谢到目前为止的建议!完美的这正是我想要的!我不确定它到底在做什么:(,我会盯着它看,希望它开始对我更有意义。但它做了我所需要的,而不必用于循环和计算迭代次数等等。非常感谢!我甚至不知道你可以使用这种格式的列表,我以前从未在任何地方见过它。这是非常好的信息!好的,我花了一整晚的时间来转储变量看看这段代码,我仍然不明白它是如何工作的。我不知道列表是如何工作的,foreach也不知道它是如何得到结果的。它工作的,但我就是不明白。有人有任何链接可以解释这里发生了什么事吗?谢谢!!
Before using unset() the value of $xys is : w3resource.com
After using unset() the value of $xys is :
<?php
if (isset($_POST['editbutton']))
{
    foreach ($_POST as list ($id, $payment,$date))
    {
        echo $id;
        echo $payment;
        echo $date;
    }
    //unset after doing the job
    UNSET ($_POST['editbutton']);
}