【问题标题】:Data from PHP form is inserted into mysql database several timesPHP表单中的数据多次插入mysql数据库
【发布时间】:2013-09-19 10:36:34
【问题描述】:

我是 PHP 和 MYSQL 的新手。我有这个表格,用于将数据输入到我创建的数据库中。我将不同列中两个字段的值相加,然后将值插入第三列 (TOTAL_IN)。然后我从第三列 (TOTAL_IN) 的字段中的值中减去另一个字段中的另一个值 (VALUE3),并将该值放在不同的列中。所有这些都在同一张表中。它工作得很好,但问题是当我打开我的数据库时,我看到数据已经被插入了 20 或 100 次!如何阻止数据插入这么多次?

请注意提交按钮只被点击过一次。

这是我使用的:

$sql="INSERT INTO $tbl_name (id, date, value1, value2, total_in, value3, value4)
      SELECT '','$date','$value1','$value2',('$value1'+'$value2') AS SUM,
              '$value3',(('$value1'+'$value2')-$value3) AS SUM
      FROM $tbl_name";
$result=mysql_query($sql);

有什么帮助吗?

提前致谢!

编辑::: 在您提出建议后,我的代码现在看起来像这样:

//From Ruddy's post
$total_in=$value1+$value2;
$value4=($value1+$value2)-$value3;

//From Amit's post
$sql="INSERT INTO $tbl_name(id, date, value1, value2, total_in, value3, value4) VALUES ('', '.$date.', '.$value1.', '.$value2.', '.$total_in.', '.$value3.', '.$value4.')";
$result=mysqli_query($sql);

它可以工作,但它仍然多次输入数据。

【问题讨论】:

  • 你不应该使用mysql_query,因为它已被弃用!改用 PDO 或 MySQLi php.net/manual/en/function.mysql-query.php
  • 我把它改成了 mysqli_query($sql) 但现在它给了我一个错误
  • 我不明白您为什么要插入从同一个表中获取的值。好像某种递归?我的意思是 INSERT INTO $tbl_name 和 FROM $tbl_name.??
  • @admiralchip:你把它改成了mysqli_query,这很好,但是你也改变了连接调用吗?
  • @EliasVanOotegem 谢谢!我就是这么做的:)

标签: php mysql forms insert sum


【解决方案1】:
$sql="INSERT INTO $tbl_name (id, date, value1, value2, total_in, value3, value4)
 VALUES( '', '".$date."', ".$value1.", ".$value2.", ".$value1+$value2.", 
".$value3.",".$value1+$value2-$value4.")";
$result=mysql_query($sql);

在写查询时需要在php中连接变量,请看语法。

here

您所做的是选择表的所有行并插入所有行。

【讨论】:

  • 尊敬的上将,请检查语法,因为您需要在 sql 查询中使用时连接变量。我的意思是在点的帮助下。
  • 哦!好的,我没有看到这些点:)
  • 尊敬的上将,如果您发现任何语法错误,例如缺少点,请进行适当的编辑,以便对其他人也有帮助...干杯!!
  • 它正在工作。我将您的解决方案中的双引号添加到@Ruddy 的解决方案中。 :) 非常感谢! :)
【解决方案2】:
$sum= $value1+$value2;
$sum2= ($value1+$value2)-$value4;

$sql="INSERT INTO $tbl_name (id, date, value1, value2, total_in, value3, value4) VALUES ('', '$date', '$value1', '$value2','$sum','$value3','$sum2')"
$result=mysql_query($sql);

我讨厌报表中的数字,所以我把它们去掉了。

【讨论】:

  • 欢迎您,至少您现在遇到了这个问题,所以您将来会知道如何解决它。
【解决方案3】:

事实上,您的查询将插入与 SELECT 语句返回的行数一样多的行!看起来您的 SELECT 返回的行数与 $tbl_name 中的行数一样多,并且您正在将它们重新插入同一个表中!!

【讨论】:

  • 太棒了!!!好吧,我明白你的意思了。我该怎么做?让我发布我的代码现在的样子。
  • @Amit Kumar 的答案是正确的。连接变量时只需添加双引号:$sql="INSERT INTO $tbl_name (id, date, value1, value2, total_in, value3, value4) Values( '', '".$date."', '".$value1."', '".$value2."', ('".$value1+$value2."') AS SUM, '".$value3."',('".$value1+$value2-$value4."') AS SUM2)"; $result=mysql_query($sql);
  • 试试@Ruddy 的提议。它更干净。至于多个插入,你确定你不是在看以前的插入吗?查询中只列出了一组值!
猜你喜欢
  • 1970-01-01
  • 2014-04-04
  • 1970-01-01
  • 2013-11-30
  • 1970-01-01
  • 1970-01-01
  • 2015-07-20
  • 2013-05-01
  • 1970-01-01
相关资源
最近更新 更多