在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”名称数据条目之前带有空白条目的表:
我花了很多时间将这个问题分解为一个表单输入,并且数据库连接成功,我的数据被添加,只有空白行。
为什么我在数据库中的新数据行之前插入空行?
答案 0 :(得分: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();
}
答案 1 :(得分:1)
您正在使用您不确定是否存在的数据进行MySql查询!
在<?php?>
内只需执行此操作
if(isset($_POST['name'])){
if(!empty($_POST['name'])){
//do your stuff
}
}
所以请确保该页面未被加载(邮件请求也即将到来)
然后确保用户在name
输入中插入了一些内容
答案 2 :(得分:1)
您的插入操作是在每个请求上执行的,而不仅仅是在提交表单时执行,因此在第一次访问页面时,空行会插入到数据库中。纠正此行为的一种简单方法是使用以下条件:
if (isset($_POST['name'])) {
// Your insert command here
}
上面的代码可以使用,但是您还应该在代码中包含一些额外的步骤,例如清理或验证用户输入。
答案 3 :(得分:0)
您需要重构代码...在页面加载时,插入查询实际上正在执行!这会插入一个空行;然后在表单提交时插入已发布的数据。重构为:
<?php
if (!empty($_POST)) {
// all of your php here
}
?>