【问题标题】:Blank row inserted before new data row in Mysql database在Mysql数据库中的新数据行之前插入空白行
【发布时间】:2016-08-31 19:45:50
【问题描述】:

在我的 MySQL 数据库中,在实际数据行之前插入了一个空白行。这是为什么呢?

这是我的代码:

<?php

define('DB_NAME','my_db_name');
define('DB_USER','my_db_user');
define('DB_PASSWORD','my_db_pass');
define('DB_HOST','localhost');

$link = mysql_connect(DB_HOST,DB_USER,DB_PASSWORD);

if (!$link){
 die('Could no connect'.mysql_error());

}

$db_selected = mysql_select_db(DB_NAME, $link);

if(!$db_selected){
 die('Can\'t no connect'. DB_NAME .':'.mysql_error());

}

$name = $_POST['name'];

$sql ="INSERT INTO demo (name) VALUES ('$name')";

if(!mysql_query($sql)){

  die('Error:'.mysql_error());
}

mysql_close();

?>
<html>
<body>
<form  action="demo2.php" method="post">
<input id="name" name="name" type="text" placeholder="" class="form-control input-md" required="">
<input type="submit" class="btn btn-success" value="Add Client">
</form>
</body>
</html>

这是我的 MySQL 数据库结构:

这是在“gunk”名称数据条目之前有一个空白条目的表格:

我已经花时间将此问题隔离为一个表单输入,其中一个成功的数据库连接并添加了我的数据,只是在它之前有一个空白行。

为什么在我的数据库中的新数据行之前插入一个空白行?

【问题讨论】:

  • 上面的代码只会插入一行——如果你得到两行,那么上面的代码会被调用两次。很可能是因为您不必费心检查表单是否已提交。因此,代码为原始 GET 运行一次,然后为表单提交 POST 再次运行。请注意,您很容易受到sql injection attacks
  • 每次您在 mew 代码中使用 the mysql_ 数据库扩展时一只小猫在世界某处被勒死 它已被弃用并且已经存在多年并且在 PHP7 中永远消失了。如果您只是学习 PHP,请花精力学习 PDOmysqli 数据库扩展。 Start here

标签: php mysql database forms


【解决方案1】:

您正在使用相同的脚本来显示表单并处理表单提交。但是当它插入数据库时​​,它不会检查它是否正在运行以响应用户第一次打开表单或提交它。当他们第一次访问 URL 时,$_POST 为空,因此您插入一个空白值。为此添加一个检查。

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $link = mysql_connect(DB_HOST,DB_USER,DB_PASSWORD);

    if (!$link){
     die('Could no connect'.mysql_error());

    }

    $db_selected = mysql_select_db(DB_NAME, $link);

    if(!$db_selected){
     die('Can\'t no connect'. DB_NAME .':'.mysql_error());

    }

    $name = $_POST['name'];

    $sql ="INSERT INTO demo (name) VALUES ('$name')";

    if(!mysql_query($sql)){

      die('Error:'.mysql_error());
    }

    mysql_close();

}

【讨论】:

    【解决方案2】:

    您的插入操作会在每个请求上执行,而不仅仅是在提交表单时,因此空行会在首次访问页面时插入到数据库中。纠正这种行为的一种简单方法是使用以下条件:

    if (isset($_POST['name'])) {
        // Your insert command here
    }
    

    上面的代码可以工作,但是您还应该在代码中包含一些额外的步骤,例如清理或验证用户输入。

    【讨论】:

      【解决方案3】:

      您正在使用不确定是否存在的数据进行 MySql 查询!
      &lt;?php?&gt; 中这样做

      if(isset($_POST['name'])){
          if(!empty($_POST['name'])){
              //do your stuff
          }
      }
      

      因此,请确保该页面不只是加载(发布请求也即将到来)
      然后你确保用户在name输入中插入了一些东西

      【讨论】:

        【解决方案4】:

        您需要重构代码...在页面加载时,插入查询实际上正在执行!这会插入一个空白行;然后在提交表单时插入发布的数据。重构为:

        <?php
        
            if (!empty($_POST)) {
        
                // all of your php here
        
            }
        
        ?>
        

        【讨论】:

          猜你喜欢
          • 2013-09-19
          • 1970-01-01
          • 2015-03-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多