【问题标题】:PHP Instert will not insert into DatabasePHP Insert 不会插入数据库
【发布时间】:2019-06-15 13:28:51
【问题描述】:

(所以首先我是一名高中生,所以不是最擅长使用术语,所以尽量指导而不是告诉你是否可以)当使用插入将数据从网站放入我的数据库时,它似乎可以工作但数据库中没有出现任何内容,但没有错误代码。

我正在使用 Mysqli、PHP 和 Wampserver 运行本地服务器,网站不会将数据发送到数据库。

<?php 
include 'connect.php';
include 'header.php';

?>
Sign Up<br>
<form method="post" action="">

Username: <input type="text" name="user_name"><br>
password: <input type="password" name="user_pass"><br>
password <Check: input type="password" name="user_pass_check"><br>
Email: <input type="text" name="user_email"><br>
<input type="submit" value="Register">

</form>


<?php

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $sql = "INSERT INTO users(user_name, user_pass,  user_email) VALUES('".mysqli_real_escape_string($con, $_POST['user_name'])."', '".sha1($_POST['user_pass'])."', '".mysqli_real_escape_string($con, $_POST['user_email'])."', NOW(), 0)";
    $result = mysqli_query($con, $sql);
    if (!$result) {
        echo 'Something went wrong';
        echo mysqli_error($con);
    } else {
        echo "you have successfully registered. you can now <a href='signin.php'>sign in</a> and start posting";
    }
}
}

include 'footer.php'?>

在我用于连接的文件中

<?php

$host = 'localhost';
$user = 'root';
$pass = '';
$dbname = 'seqevents';
$con = new mysqli($host, $user, $pass, $dbname) or die("cannot connect");

session_start();
if (!isset($_SESSION['user_level'])) {
    $_SESSION['user_level'] = 0;
}

我没有收到任何错误消息,网站上什么也没有发生,它只是重新加载并删除文本框中的任何输入。

【问题讨论】:

  • 似乎很清楚您的代码甚至没有达到您的条件。我建议转出$_SERVER['REQUEST_METHOD'] 看看它是否符合您的期望。调试的一个好习惯是,当您不确定自己为什么没有到达某个地方时,转储出应该让您到达那里的变量(或设置 XDebug,尽管这可能有点复杂)。
  • 你有一个额外的}挂在第一个文件中。

标签: php mysqli


【解决方案1】:

首先是(可能的)问题,然后是其他一些重要的指针:

插入时,插入设置 3 列(用户名、用户密码、用户电子邮件),然后将 5 个值加载到其中(NOW() 和 0)是多余的,它不知道将这些值放在哪里。


  • 不要使用 MD5。如果您在想“是的,但我的网站不是很有趣,为什么要关心”,请再次阅读此行。 不要使用 MD5。或sha1:

    切勿以明文形式或使用 MD5/SHA1 存储密码!仅存储密码哈希值。使用 PHP 的 password_hash() 和 password_verify() 。如果您运行的 PHP 版本低于 5.5(我真的希望您不是),您可以使用 password_compat 库来获得相同的功能。 – Dharman

  • 使用准备好的语句。 mysqli_real_escape_string 是很好的第一步,但还不够。准备好的语句为您保护查询。更复杂一点,很多更安全。

  • 我建议删除$_SERVER['REQUEST_METHOD'] === 'POST'。如果您的页面上有两个表单怎么办?你被困住了。取而代之的是,为您的提交按钮命名,例如 submitRegForm。那你就可以if( isset($_POST['submitRegForm']) )

  • 不要使用 MD5 或 SHA1

【讨论】:

  • 可能没有理由将我的用户名链接到您的帖子。我相信该评论最初是由@MagnusEriksson 提出的。无论哪种方式,内容都是最重要的。
猜你喜欢
  • 1970-01-01
  • 2020-03-02
  • 1970-01-01
  • 1970-01-01
  • 2016-02-10
  • 2013-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多