【问题标题】:i cannot insert my data of php form into mysql ?? my code is following? [closed]我无法将我的 php 表单数据插入 mysql ??我的代码如下? [关闭]
【发布时间】:2015-07-23 03:41:26
【问题描述】:
<?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);
?>

【问题讨论】:

  • 错误是什么?
  • 未知数太多。检查错误,一定有什么地方出错
  • 还要确保在将输入放入查询之前对其进行清理
  • 当我尝试将数据从表单添加到“串行”时,它显示 mysql 中的空行。我将“串行”类型设置为“文本”

标签: php mysql


【解决方案1】:

您在不检查错误的情况下假设成功,这样做会发出语法错误的信号:

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在“串行”附近使用的正确语法

在您的代码中使用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 可能抱怨的任何内容,您还应该转义您的数据。

例如: James O'Neil 会导致撇号出现问题。逃脱它:

$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 方法,并且所有输入都具有它们的“名称”属性并且没有拼写错误。 洞察力

即:

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

等等

编辑:

根据您为表单留下的链接:

&lt;input type="text" name="name" id="serial" /&gt;

这应该读作 &lt;input type="text" name="serial" id="serial" /&gt; 你使用“名称”而不是“序列”,错误报告会发现这一点。

然后&lt;input type="text" name="name" id="date_of_reg" /&gt; 再次使用错误的名称属性,即“名称”。

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

你不能只依赖“id”。


连接:

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

  • 这些不同的 API不会混合使用。

参考资料:

【讨论】:

  • 你假设成功就足够了。
  • @NorbertvanNobelen true ;-)
  • 注解,name 也是保留字所以也应该反引号
  • 是的,很抱歉更改记录,但我认为在已经引用保留字的答案上更合适。
  • @Rizier123 记住,我种仙人掌;-)
猜你喜欢
  • 2015-12-02
  • 2017-11-08
  • 1970-01-01
  • 2017-01-24
  • 1970-01-01
  • 2021-11-17
  • 1970-01-01
  • 2014-09-25
  • 1970-01-01
相关资源
最近更新 更多