$ _POST和多个数组的Foreach未定义偏移量错误

时间:2015-07-20 02:13:35

标签: 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 payments SET payment=:payment,payment_date=:date WHERE pay_id=:id");
        // $preparedStatement = $db->prepare($sqlupdate);
        }

我暂时注释了我的UPDATE,只是试图解决这个错误。 echo现在也只是用于测试。这是$ _POST的var_dump:

 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)

所以,我在$ _POST中完全拥有我想要的东西,但它的行为并不像我期望的那样。这是我得到的错误:

Notice: Undefined offset: 2 in C:\foo on line 98

当然第98行是:

foreach ($_POST as list ($id, $payment,$date))

那么,我对foreach的理解是什么?因为它是一个foreach,一旦它到达终点,它应该停止,但它似乎正在预示一个额外的时间。想法?建议?

而且我认为我想做的事情很简单(至少对我而言),但我会解释。我有一个表单,允许我一次更新多行。它将它们提交为$ _POST ['ID'],$ _POST ['payment']和$ _POST ['pay_date']。我的var_dump显示我正在从表单中获得我正在需要的内容。但是,当我尝试构建我的查询时,我遇到了从数组中获取正确值的问题。我想要做的是从每个数组中取出[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));
         }
    }

3 个答案:

答案 0 :(得分:0)

不幸的是,list()不能像我们期望的那样使用关联数组和多维数组。你可以在这里参考:PHP list issue ( Undefined offset: )

但是,如果你想使用list()无论如何你可以像这样使用它:

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

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

答案 1 :(得分:0)

UNSET会重置$_POST个值。所以在你的工作完成后使用它

Example is here

<?php
    $xyz='w3resource.com';
    echo 'Before using unset() the value of $xys is : '. $xyz.'<br>';
    unset($xyz);
    echo 'After using unset() the value of $xys is : '. $xyz;
?> 

<强>输出

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']);
}

答案 2 :(得分:-1)

您没有获得正确的值。

尝试添加:

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

也许你会通过了解前面的答案告诉你的事情来学习一些东西。