以下代码将两条记录插入到我的数据库中,但我只希望它插入一条。为什么要两次插入行?
<?
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
$i=1;
while($i<=1)
{
if (isset($_POST['submit']))
{
$sql="INSERT INTO customers
(company, salutation, first_name,
last_name, phone, email, fax,
street, town, county, postcode,
type, notes)
VALUES
('$_POST[company]',
'$_POST[salutation]',
'$_POST[first_name]',
'$_POST[last_name]',
'$_POST[phone]',
'$_POST[fax]',
'$_POST[email]',
'$_POST[street]',
'$_POST[town]',
'$_POST[county]',
'$_POST[postcode]',
'$_POST[type]',
'$_POST[notes]')";
if (!mysql_query($sql,$con))
{
die('Error: ' . mysql_error());
}
}
$i++;
}
?>
答案 0 :(得分:2)
猜测一下,我会说这是因为它被执行了两次。 (不是很好 - 它很可能是一个控制流问题,因为似乎没有任何东西会导致上面插入两次。)
那就是说,那里有很多令人担忧的事情,例如缺少输入转移等等。例如:$ i变量的目的是什么?
答案 1 :(得分:0)
CUSTOMERS表是否至少定义了一个主键来停止重复?
如果表格中已存在列组合的CUSTOMERS表中的条目,那么您的PHP网络应用程序是否足够聪明以阻止某人访问此页面?
答案 2 :(得分:0)
我不能仅仅这样说。并且该代码几乎不可读缩进比仅存在更糟糕,并且您在查询中嵌入post变量的方式也不会使它更清晰(并且它实际上可能导致安全漏洞)。
尝试在echo $sql;
怪物之后写$sql = ...
。您将能够看到是否执行了两个查询,或者它是否只是一个插入两行的查询,而在最后一种情况下,它可能会给你一个很明显的原因。如果它对您没有帮助,请在那里发布您的结果,我或其他人可以查看它。但请注意,使用这种不合适的代码对我们来说并不容易或令人愉快。
答案 3 :(得分:0)
我已经完成了你的代码,我没有看到任何双重插入的原因。还有其他我们应该知道的东西吗?它不应该导致问题,但为什么代码中有一个while循环?这个页面有两次提交的方式吗?是否有触发器?