循环语句破坏

时间:2012-02-15 08:45:48

标签: php

请问为什么循环语句断开,在乘法后它只更新最后一行,尝试在update语句中使用$ totalprice的foreach循环,它表示无效参数。

if(array_key_exists('item', $_POST)){


// $items = $_POST['item'];
  //foreach($_POST['item'] as $item){
    //echo $item['Pquantity'] . ", ";
    //echo $item['Pidno'] . ", ";
   // }
    //Loop through $_POST items, updating the database for each item
    foreach ($_POST['item'] as $item) { 
        $Pquantity = intval($item['Pquantity']);
        $Pidno = ($item['Pidno']); 
        //echo $Pquantity . ", ";
        //echo $Pidno . ", ";
        //$totalprice = intval($item['Pquantity']) 
        $queryreg = mysql_query("
            UPDATE repplac
                 SET Pquantity = {$Pquantity}
                 WHERE
                       Pidno = '{$Pidno}'
                 AND
                       Uname = '{$_SESSION['username']}'
        ") or die(mysql_error());  

    }
    }
    $pplresult = mysql_query("SELECT * FROM repplac WHERE Uname = '{$_SESSION['username']}'") or die(mysql_error());
  while ($row = mysql_fetch_assoc($pplresult)) 
  {
  $totalprice = $row['Price'] * $row['Pquantity'];
  //echo "$totalprice";
  //die();
   $queryreg = mysql_query("
  UPDATE repplac
  SET Tprice = {$totalprice}
  WHERE
                       Pidno = '{$Pidno}'
                 AND
                       Uname = '{$_SESSION['username']}'
    ") or die(mysql_error());  
  }

2 个答案:

答案 0 :(得分:2)

第二个条件中的参数都没有在循环中改变:

WHERE
                   Pidno = '{$Pidno}'
             AND
                   Uname = '{$_SESSION['username']}

也许您忘了更新$Pidno

另外,我不认为以下是安全的:

"SELECT * FROM repplac WHERE Uname = '{$_SESSION['username']}'"

您可能希望在将$_SESSION['username']传递给查询之前对其进行清理。

答案 1 :(得分:0)

在您的foreach内,您使用以下代码更新$Pidno

$Pidno = ($item['Pidno']);

因此,您正在更新数据库中的不同记录。但是在while循环$Pidno内部,整个时间都保持不变。因此,您一遍又一遍地更新相同的记录。要解决此问题,请在while循环

的开头添加以下代码
while ($row = mysql_fetch_assoc($pplresult)) 
{
    //get the correct Pidno for this row
    $Pidno = ($row['Pidno']); 
    $totalprice = $row['Price'] * $row['Pquantity'];

    // ... the rest of your while loop
相关问题