我无法将我的php表格数据插入mysql?我的代码如下?

时间:2015-07-23 03:41:27

标签: php mysql

<?php 
include 'db.php';

$serial= $_POST['serial'];
$date_of_reg = $_POST['date_of_reg'];
$name = $_POST['name'];
$doc_type = $_POST['doc_type'];

$sql = "INSERT INTO clients (serial,date_of_reg,name,doc_type) VALUES ('$serial','$date_of_reg','$name', '$doc_type');";
$result = mysql_query($sql, $link);

if ($result == false) {
    include "src/header.php";
    include "src/mainmenu.php";
    echo '<p>Error: cannot execute query</p>';
    echo '<p><a href="register.php">Try again</a></p>';
    include "src/footer.php";
    exit;
}
else {
    header('Location: private.php');
}

mysql_close($link);
?>

1 个答案:

答案 0 :(得分:4)

你假设成功而没有检查错误,通过这样做,会发出语法错误信号:

  

您的SQL语法有错误;查看与MySQL服务器版本对应的手册,以便在'serial

附近使用正确的语法

在代码中使用or die(mysql_error())mysql_query()时。

使用MySQL保留字,serial(编辑)和name,但奇怪的是,许多人使用了(名称)没有问题,包括我自己让我感到困惑。

将其重命名为“serials”,可以安全使用,或将其包装在刻度中:

INSERT INTO clients (`serial`, date_of_reg, `name`, doc_type)

全行重写:

$sql = "INSERT INTO clients (`serial`,date_of_reg, `name`, doc_type)  
        VALUES ('$serial','$date_of_reg','$name', '$doc_type');";

$result = mysql_query($sql, $link) or die(mysql_error());

如果输入的数据包含MySQL可能会抱怨的任何内容,您也应该转义数据。

例如:詹姆斯奥尼尔会引起撇号问题。逃避它:

$name = mysql_real_escape_string($_POST['name']);

...正如您应该为所有输入所做的那样。

另外,对于SQL injection您可以使用的内容use mysqli with prepared statementsPDO with prepared statements,它们更安全

error reporting添加到文件的顶部,这有助于查找错误。

<?php 
error_reporting(E_ALL);
ini_set('display_errors', 1);

// rest of your code

旁注:错误报告应仅在暂存时完成,而不是生产。

如果您收到弃用通知,您将看到您必须做的事情;切换到MySQLi或PDO,无论如何都应该这样做,因为它将从未来的PHP版本中删除 领先于游戏

脚注:

由于您使用的是您未发布的表单,请确保它确实使用了POST方法,并且所有输入都具有“name”属性,并且没有拼写错误。 洞察力

即:

<form action="" method="post">
<input type="text" name="serial">
...
</form>

修改:

根据您留给表单的链接:

<input type="text" name="name" id="serial" />

那应该是<input type="text" name="serial" id="serial" />,您使用“name”而不是“serial”,错误报告会发现它。

然后<input type="text" name="name" id="date_of_reg" />再次使用错误的name属性,为“name”。

<input type="text" name="date_of_reg" id="date_of_reg" />

你不能单靠“id”。

<强>连接:

另外,由于我们不知道您要连接哪个MySQL API,因此请确保它实际上是mysql_而不是mysqli_或PDO,因为您需要使用相同的连接到查询。

  • 这些不同的API执行混合。

参考文献: