这是我的代码:
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));
}
}
答案 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
个值。所以在你的工作完成后使用它
<?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;
也许你会通过了解前面的答案告诉你的事情来学习一些东西。