Недавно я узнал, как создавать системы входа с PHP и MYSQL. Я решил сделать один для своего сайта. Пользователь регистрируется по электронной почте, паролю, имени и фамилии. Я хотел, чтобы приветствие произносило «Мои приветствия», а затем их имя. Я мог бы сохранить имена в сеансе, но мне интересно, почему мой метод не работает полностью. Он работает каждый раз, ЗА ИСКЛЮЧЕНИЕМ сразу после регистрации. Это полный код Регистрация:Почему база данных не возвращает данные о пользователе после регистрации?
$error = "";
include("loginsession.php");
if(array_key_exists("id", $_SESSION)){
header("Location: index.php");
}
if(array_key_exists("submit", $_POST)){
include("connection.php");//database connection
$email = $_POST['email'];
$password = $_POST['password'];
$firstName = $_POST['firstname'];
$lastName = $_POST['lastname'];
$query = "SELECT * FROM users WHERE email='".mysqli_real_escape_string($link, $email)."'";
$result = mysqli_query($link, $query);
if(mysqli_num_rows($result) > 0){
$error = "<div class='alert alert-danger' role='alert'><strong>Error:<br><br></strong>This email already exists.<hr></div>";
}else{
$query = "INSERT INTO users(firstname, lastname, email, password) VALUES('".mysqli_real_escape_string($link, $firstName)."', '".mysqli_real_escape_string($link, $lastName)."', '".mysqli_real_escape_string($link, $email)."', '".mysqli_real_escape_string($link, $password)."')";
mysqli_query($link, $query);
$query = "UPDATE users SET password = '".md5(md5(mysqli_insert_id($link)).$password)."' WHERE id=".mysqli_insert_id($link)."";
mysqli_query($link, $query);
$_SESSION['id'] = mysqli_insert_id($link);//where the issue originates
if(isset($_POST['check']) && $_POST['check']=='true'){
setcookie("id", mysqli_insert_id($link), time() + 60*60*24*365);
}
header("Location: index.php");
}
}
На индексной странице, это то, что я делаю:
session_start();
if(array_key_exists('id', $_COOKIE)){
$_SESSION['id'] = $_COOKIE['id'];
}
$greeting = "";
if(array_key_exists('id', $_SESSION)){
include("connection.php");//just the login to the database
$query = "SELECT * FROM users WHERE id = ".$_SESSION['id'];
$results = mysqli_query($link, $query);
$row = mysqli_fetch_array($results);
$greeting = "My greetings, ".$row['firstname']." ".$row['lastname'];//add name to greeting variable
}
Позже в коде:
<p id="greeting">
<?php echo $greeting; ?>
</p>
Право имя показывает вверх после того, как вход в систему, но никогда после регистрации, даже если я перезагружаю страницу. То, что появляется вместо «Мои приветствия, имя первого имени», это «Мои приветствия». Это похоже на то, что в базе данных не было имени для данного идентификатора.
Как я могу получить правильный результат сразу после регистрации. Если вам нужен какой-либо другой код из процесса регистрации или входа в систему, скажите мне, и я отправлю его. Если кто-то хочет попробовать это для себя, мой сайт here.
@ chris85 Это не mysqli_insert_id? Исправьте меня, если я ошибаюсь - он хранит идентификатор последнего добавленного пользователя. Я сохраняю последний идентификатор сеанса. Я мог бы делать сеансы для имени, если то, что я делаю сейчас, не работает. –
Да, пропустил способ, которым этот код был структурирован при первом чтении. Тем не менее, я не уверен, что все это получаю. Однако это открыто для SQL-инъекций. Пользователь может изменять все файлы cookie. – chris85
Каково значение, которое было вставлено в db и по сравнению с тем, что у вас есть в вашем первом тексте кода, который вы разместили, то какое значение для массива сеансов для другого? опубликуйте var_dump для обоих, проверьте наличие ошибок с помощью отчетов об ошибках и, возможно, MySQL. –