<?php
session_start();
//Obtain data from register page
$email = $_POST['email'];
$password = $_POST['password'];
//Check to see user has input
if ($username !='' || $password !='' || $confirmpassword !='' || $email !='') {
if ($password1 == $password2) {
// connect to database
$db = new mysqli('removed', 'removed','removed' ,'removed');
// Check to see if connection was successful
if ($db->connect_errorno) {
die ('Sorry, we are having some issues with our database. We should be back online soon.');
}
// Prepare statement
$query = "INSERT INTO `database`.`users` (
`id` ,
`minecraftusername` ,
`email` ,
`password` ,
`joined` ,
`rank`
)
VALUES (
NULL , ?, ?, ?, NOW( ) , '1'
);";
$stmt=$db->prepare($query);
$stmt->bind_param('sss', $username, $email, $password);
//Execute query
$stmt->execute();
// header("Location: ../default.php");
echo 'You have successfully registered an account!';
} else {
// header("Location: ../default.php");
echo 'Passwords do not match.';
}
} else {
// header("Location: ../default.php");
echo 'Please fill out all the fields';
}
?>
当您尝试注册时,它确实会回显注册成功消息,但是当我转到phpmyadmin时,行数没有改变。
我真的不确定我犯了什么错误。
任何帮助将不胜感激。
$password = $_POST['password'];
在这里你只设置了$password
,但你期望其他变量存在,
if ($username !='' || $password !='' || $confirmpassword !='' || $email !='') {
if ($password1 == $password2) {
$confirmpassword
、$password1
和$password2
永远不会设置。在@RobP和@Ali的评论中指出。
仅当$password1 == $password2
时,才连接到数据库,并且也只能在该块中die()
。因此,您可能很容易跳过整个块,而不是die()
,并继续尝试在不连接到数据库的情况下运行 INSERT。在@Erico的评论中指出。
if ($db->connect_errorno) {
这是connect_errno,而不是"connect_errorno"。如果运行该代码块,它将生成一个通知:PHP Notice: Undefined property: mysqli::$connect_errorno
。因此,这证明您连接到数据库的代码从未运行过。
$stmt=$db->prepare($query);
$stmt->bind_param('sss', $username, $email, $password);
$stmt->execute();
您应该始终检查 prepare(( 和 execute(( 的返回值。如果语句有任何问题,它们将返回 false。就像你有一个语法错误,或者违反了一个独特的约束或其他东西。现在您的插入可能失败了,但您永远不会知道。在@sanketh的评论中也指出。
或者,您可以设置 mysqli_report(MYSQLI_REPORT_STRICT( 以在出现错误时引发异常。然后,您无需编写代码来检查返回值,因为如果出现任何mysqli错误,您的脚本将死亡。在连接到数据库之前,必须设置此报告模式。
此外,您永远不会为 $username
设置值。