【发布时间】:2016-06-10 04:37:08
【问题描述】:
我正在从网络表单向数据库发送数据,但每次运行它时,数据都会以六行而不是一行的形式存储在数据库中。
该表单只是一个标准表单,带有电子邮件/密码输入和一个提交按钮。表单的操作是这样运行的:
<?php
// connect to db
$link = new mysqli("localhost", "root", "", "db_name");
if (!$link) {die('Database Error: Could not connect: ' . mysql_error());}
// username and password sent from form
$email = $_POST['email'];
$password = ($_POST['password']);
// encrypt
$salt = substr(base64_encode(mcrypt_create_iv(16, MCRYPT_DEV_URANDOM)), 0, 16);
$em = crypt($email, '$6$'.$salt);
$pw = crypt($password, '$6$'.$salt);
// insert to db
$insert = "INSERT INTO users (email, password) VALUES ('$em', '$pw')";
$link -> query($insert);
// check succes/fail
if ($link->query($insert) === TRUE) {
echo "New record created successfully";}
else {
echo "Error: " . $sql . "<br>" . $link->error;
}
// close the db connection
$link->close();
我知道这会引发一个关于使用加密/加盐对输入进行消毒的问题。 This page 说这是一种合理的方法。请随时提出这一点,但我并不是真的在寻找关于清理用户输入的最佳实践的争论。
我想知道是否有人告诉我为什么数据会被存储 6 次而不是一次。我将$6$ 更改为$1$,但它仍然添加了6 行。
【问题讨论】:
-
因为你跑了 6 次?
-
不,我只运行了一次,它增加了 6 行
-
我认为这可能是导致它的加盐,所以我尝试通过删除加盐并将表单输入发送到数据库而不加盐,将纯文本添加到数据库中(仅用于测试),但是它做了同样的事情。
-
我什至删除了表,然后删除了数据库并重新制作了它。它仍在这样做,所以我怀疑它可能不是功能失调的数据库。我怀疑某处的代码有问题,但不知道在哪里。
-
我可能已经找到了造成这种情况的原因:我在 Chrome 上进行了测试,它正在向数据库中添加一行。我以前使用 Blisk 浏览器。当我运行插入查询时,该浏览器仍在向数据库添加三行。
标签: php mysql mysqli sql-insert