插入到数据库中,echo显示正确的值,UPDATE倍增它?

时间:2011-12-21 17:29:56

标签: php mysql

我想更新数据库中的一些条目,基本上我正在计算在上一页上选中的复选框的数量,并将它们乘以25,然后将该值添加到数据库中的当前值。

这是我的代码:

<?php
  if($_POST['code_approve'])
  {
    for($i=0;$i<count($_POST['checkbox']);$i++)
    {
      $approval_id = $checkbox[$i];
      $checkboxCount = count($_POST['checkbox']);
      $countx25 = $checkboxCount * 25;
      $sql = "UPDATE table SET status='approved', used='processed' WHERE id='$approval_id'";
      $sql2 = "UPDATE members SET balance = balance+'$countx25'";
      $result2 = mysql_query($sql2);
      $result = mysql_query($sql);
    }
    if($result)
    {
      echo "$countx25";
    }
   }
 ?>

看来,由于某种原因,在将其插入MySQL之前,它会将$ countx25与复选框的数量相乘。这if($result){echo "$countx25";}}总是向我展示正确的价值。

如果我选择1它打印25,2打印50,3打印75等等,但对于MySQL部分,如果我选择1它将25加到当前值,2加100,3加225?!

这里的错误是什么?

3 个答案:

答案 0 :(得分:3)

在您的SQL查询中:

$sql2 = "UPDATE members SET balance = balance+'$countx25'";

您没有告诉数据库要更新哪一行,因此所有行都会更新。在测试时,您首先测试一次,然后一次又一次测试,因此它可能会添加到您不期望的字段中。可能这是你的问题。

要指定要更新的行,请使用WHERE clause­Docs

要防止多次更新同一字段,请仅执行一次查询。

答案 1 :(得分:1)

正如我在评论中所述。您正在为通过$ _POST获得的每个复选框运行此操作。如果使用count计算复选框,为什么甚至使用for循环。删除for循环,它将按照您的意图运行。

答案 2 :(得分:1)

代码中的for循环是问题所在。我想在这里你试图使用上一页中的所有复选框,为你的代码循环所有复选框,所以如果有4个复选框,for循环将运行4次。所以请确定你想要做什么。

这是你的代码。

<?php
if($_POST['code_approve'])
{
    for($i=0;$i<count($_POST['checkbox']);$i++)
    {
        $approval_id = $checkbox[$i];
        $checkboxCount = count($_POST['checkbox']);
        $countx25 = $checkboxCount * 25;
        $sql = "UPDATE table SET status='approved', used='processed' WHERE id='$approval_id'";
        $sql2 = "UPDATE members SET balance = balance+'$countx25'";
        $result2 = mysql_query($sql2);
        $result = mysql_query($sql);
    }
    if($result)
    {
        echo "$countx25";
    }
}

&GT;