Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/237.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP中的SQL插入两行而不是一行_Php_Sql - Fatal编程技术网

PHP中的SQL插入两行而不是一行

PHP中的SQL插入两行而不是一行,php,sql,Php,Sql,下面的代码将向我的数据库中插入两条记录,但我只希望它插入一条。为什么要将行插入两次 <? if (!$con) { die('Could not connect: ' . mysql_error()); } $i=1; while($i<=1) { if (isset($_POST['submit'])) { $sql="INSERT INTO customers (company, salutati

下面的代码将向我的数据库中插入两条记录,但我只希望它插入一条。为什么要将行插入两次

<?
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++;
}
?>

客户表是否至少定义了一个主键来停止重复


如果CUSTOMERS表中的列组合条目已经存在于表中,那么您的PHP webapp是否足够聪明,可以阻止某人访问此页面?

我不能仅从这一点来判断。代码几乎不可读缩进比不存在缩进更糟糕,并且在查询中嵌入post变量的方式也没有让它变得更清晰(而且它实际上可能会导致安全漏洞)


尝试编写
echo$sql在你的
$sql=…
怪物之后。您将能够看到是否执行了两个查询,或者是否只有一个查询插入了两行,在最后一种情况下,它可能会给您一个很好的提示。如果这对你没有帮助,把你的结果贴在那里,我或其他人可以在这里看一下。但是请注意,使用这种不友好的代码对我们来说并不容易,也不愉快。

我已经研究了您的代码,我不认为有任何理由进行双重插入。还有什么我们应该知道的吗?它不应该引起问题,但是为什么在代码中有一个while循环呢?这个页面有没有可能被提交两次?有触发器吗

我猜是因为它被执行了两次。(这不是小题大做——这很可能是控制流问题,因为似乎没有任何东西会导致上述内容插入两次。)


也就是说,这里有很多令人担忧的事情,比如缺少输入转义等。例如:$i变量的用途是什么?

首先,您应该使用mysql\u real\u escape\u string之类的东西来转义您的输入数据;第二,为什么要使用while循环?也许代码中的某些顺序是:P$_POST[company]应该是$_POST['company']@bitter:为什么要使用while循环/