【问题标题】:MySqli adding multiple rows to dbMySqli 向 db 添加多行
【发布时间】: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


【解决方案1】:

您的网站上有一些愚蠢的 seo 友好链接实现,使其在每个请求上运行您的 php 代码,以及 5 个指向您的 html 中不存在的资源的链接。

【讨论】:

    猜你喜欢
    • 2015-01-13
    • 1970-01-01
    • 1970-01-01
    • 2011-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-23
    • 2013-02-11
    相关资源
    最近更新 更多