<?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时,行数没有改变。
我真的不确定我犯了什么错误。
真的很感激任何帮助。
答案 0 :(得分:1)
$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,而不是&#34; connect_errorno&#34;。如果运行了该代码块,它将生成通知:PHP Notice: Undefined property: mysqli::$connect_errorno
。因此,这证明您连接到数据库的代码从未运行过。
$stmt=$db->prepare($query);
$stmt->bind_param('sss', $username, $email, $password);
$stmt->execute();
您应该始终检查prepare()和execute()的返回值。如果语句有任何问题,则返回 false 。就像你有语法错误,或违反了一个独特的约束或什么。现在你的INSERT可能会失败,但你永远不会知道。在@sanketh的评论中也有提及。
否则,如果出现错误,您可以设置mysqli_report(MYSQLI_REPORT_STRICT)以引发例外情况。然后,您不需要编写代码来检查返回值,因为如果有任何mysqli错误,您的脚本将会死亡。您必须在连接到数据库之前设置此报告模式。
此外,您从未为$username
设置值。