gpt4 book ai didi

php - 用户信息未保存到我的数据库中

转载 作者:行者123 更新时间:2023-11-29 07:06:23 24 4
gpt4 key购买 nike

好吧,我的数据库有问题。我正在尝试创建一个注册页面,一切正常。我正在使用 xampp phpmyadmin,每次输入一些信息后点击注册按钮时,我的数据库中什么也没有出现。

<?php
session_start();

$db = mysqli_connect("localhost", "root", "", "saver",);


if (isset($_POST[ 'register_btn'])) {
session_start();
$username = mysql_real_escape_string($db,$POST['username']);
$email = mysql_real_escape_string($db,$POST['email']);
$password = mysql_real_escape_string($db,$POST['password']);
$password2 = mysql_real_escape_string($db,$POST['password2']);

if ($password == $password2) {
//create user
$password = md5($password); //hashes password before entering into database
$sql = "INSERT INTO users(username, email, password) VALUES('$username', $email', $password,)";
mysqli_query($db, $sql);
$_SESSION['message'] = "You are now logged in";
$_SESSION['username'] = $username;
header("location: home.php"); // Redirect to home page
}else{
$_SESSION['message'] = "The two passwords do not match";
}
}
?>

<html>
<head>
<title> Submission form </title>
</head>

<body>
<form method="post" action="saver.php">
<table>
<tr>
<td>Username:</td>
<td><input type="text" name="username" class="textInput">
</tr>

<tr>
<td>Email:</td>
<td><input type="email" name="email" class="textInput">
</tr>

<tr>
<td>Password:</td>
<td><input type="password" name="password" class="textInput">
</tr>

<tr>
<td>Password again:</td>
<td><input type="password" name="password2" class="textInput">
</tr>

<tr>
<td></td>
<td><input type="submit" name="register_btn" value="Register">
</tr>
</table>
</form>
</body>
</html>

最佳答案

You can discover and solve all of the issues you are having by TURNING ON AND READING PHP ERROR LOGGING. Read How to do that.

您的问题在于以下几行:

$db = mysqli_connect("localhost", "root", "", "saver",);

$username = mysql_real_escape_string($db,$POST['username']);

首先,您的$db末尾有一个逗号,请将其删除。这可能会导致致命的 PHP 错误,您应该通过 error reporting 来发现它。 。

其次,$db对象是一个MySQLi标识符,而不是MySQL标识符,但您已将其传递给MySQL_函数。因此,脚本要么因错误而停止,要么数据库将插入空值。这就是为什么你没有保存任何东西。

此外(正如 Luke 所指出的)MySQL_ 函数具有反转的参数顺序,因此您可能只是忘记将 i 添加到函数名称中!


您也没有在 MySQL 中正确封装您的值 - 每个值都需要用单引号括起来,就像您对 '$username' 所做的那样,您需要执行相同的操作$email$arseword

您还需要从 MySQL VALUES 集合中删除尾随逗号...

一些额外的说明:

  • 您在代码中同时使用了 mysqli_mysql_ 函数。您应该使用 MySQLi_ 函数。
  • 您应该认真考虑(例如:这样做!!!)使用 Prepared Statements而不是过程式 SQL。
  • MD5绝对是not suitable用于散列密码。停下来。使用password_hash .
  • header(Location:); 重定位指令应立即后跟脚本终止符,例如 exit;die( );
  • session_start() 只能在脚本顶部调用一次
  • 说真的,使用准备好的陈述。周围有数百个很好的例子。
  • 通过使用、阅读 PHP Error Logging 并使用react,您将为自己(以及 SO 上的许多人)节省数百小时的压力。 !

编辑:
正如 Luke 所澄清的:

The actual problem is mysql_real_escape_string accepts only one parameter (i.e. mysql_real_escape_string($POST['username']);). It can be used regardless of MySQLi being in use or not, but it should of course be avoided for using prepared statements instead.

关于php - 用户信息未保存到我的数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41454414/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com