Я изучаю MySQL и PHP, и в настоящее время у меня возникают проблемы с этим процессом входа в систему.
Кажется, MySQL-запрос не возвращает никаких строк и не перенаправляет меня после успешного входа в систему.
PHP:
$error_msg = ""; //checks the session to see if the user is logged in if (!isset($_SESSION['userid'])) { if (!isset($_POST['submit'])) { $dbc = mysqli_connect('localhost', 'root', '', 'login') or die('Error Connecting to Database on the SQL Server'); //grabs data from POST $user_username = $_POST['username']; $user_password = $_POST['password']; //lookup username and password in the database if (!empty($user_username) && !empty($password)) { $query = "SELECT userid, username FROM tuser WHERE username = '$user_username' AND password = SHA('$user_password')"; $res = mysqli_query($dbc, $query); //login is ok so set the user ID and username cookies, redirect to homepage if (mysqli_num_rows($res) == 1) { $row = mysqli_fetch_array($res); $_SESSION['userid'] = $row['userid']; $_SESSION['username'] = $row['username']; setcookie('userid', $row['userid'], time() + (60 * 60 * 24 * 30), "/"); setcookie('username', $row['username'], time() + (60 * 60 * 24 * 30), "/"); setcookie('email', $row['email'], time() + (60 * 60 * 24 * 30), "/"); setcookie('password', $row['password'], time() + (60 * 60 * 24 * 30), "/"); //redirect after successful login header("Location: index.php"); } else { //the username and password are incorrect so set error message $error_msg = 'Sorry, you must enter a valid username and password to log in. <a href="Signup.php">Please sign up!</a>'; } } } }
HTML:
<form action="login_process.php" method="post" class="login"> Username: <input type="text" name="username"/> Password: <input type="password" name="password"/> <input type="submit" value="submit"/> </form>
Извините за неаккуратный код, я знаком с PHP и MySQL и научился тому, как это сделать. Я внес некоторые изменения, и код отправляется, но он не перенаправляет меня, он просто переходит на login_process.php и ничего не делает. Что мне не хватает? Я ценю всю помощь, спасибо всем!
<? session_start(); $error_msg = ""; //checks the session to see if the user is logged in if (!isset($_SESSION['user_id'])) { if (isset($_POST['submit'])) { $user_username = mysql_real_escape_string($_POST['username']); $user_password = mysql_real_escape_string($_POST['password']); $dbc = mysqli_connect('localhost', 'root', '', 'login') or die('Error Connecting to Database on the SQL Server'); //grabs data from POST //lookup username and password in the database if (!empty($user_username) && !empty($password)) { $query = "SELECT userid, username FROM tuser WHERE username = '$user_username' AND password = SHA('$user_password')"; $res = mysqli_query($dbc, $query); //login is ok so set the user ID and username cookies, redirect to homepage if (mysqli_num_rows($res) == 1) { $row = mysqli_fetch_array($res); $_SESSION['user_id'] = $row['userid']; $_SESSION['user'] = $row['username']; setcookie('userid', $row['userid'], time() + (60 * 60 * 24 * 30), "/"); setcookie('username', $row['username'], time() + (60 * 60 * 24 * 30), "/"); setcookie('email', $row['email'], time() + (60 * 60 * 24 * 30), "/"); setcookie('password', $row['password'], time() + (60 * 60 * 24 * 30), "/"); //redirect after successful login header("Location: home.php"); echo mysqli_error($dbc); } else { //the username and password are incorrect so set error message $error_msg = 'Sorry, you must enter a valid username and password to log in. <a href="Signup.php">Please sign up!</a>'; header("Location: home.php"); echo mysqli_error($dbc); } } else { $error_msg = 'Please enter a username and password to log in. <a href="Signup.php">Please sign up!</a>'; header("Location: home.php"); echo mysqli_error($dbc); } } } ?>
Я не уверен, что все это ваш код, но вы должны session_start()
прежде чем вы сможете получить доступ к $_SESSION
Запросы только для вашего кода, если сообщение не установлено, поэтому измените его:
if (isset($_POST['submit'])) { //your code }
Кроме того, обязательно избегайте ввода пользователем для предотвращения внедрения sql:
$user_username = mysql_real_escape_string($_POST['username']);
Убедитесь, что это не ошибка в вашем SQL:
echo mysqli_error($dbc);
Вы ничего не выполняете из-за этой строки:
if (!isset($_POST['submit'])) {
Это должно быть изменение на
if (isset($_POST['submit'])) {
isset () вернет TRUE, если эта переменная установлена. ! isset () вернет TRUE, если он не установлен
Я вижу две проблемы:
Ваше логическое значение находится на обратной линии (т. Е. Удалите знак!)
if (!isset($_POST['submit'])) {
Вторая проблема заключается в том, что в вашей кнопке ввода отсутствует атрибут name = "submit", поэтому он никогда не передается, поэтому переменная никогда не будет присутствовать независимо от первой проблемы.
Спасибо всем, заработал.
<? //Start session session_start(); $_SESSION['message'] = ""; //Include database connection details require_once('global.php'); //Connect to mysql server $link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD); if(!$link) { die('Failed to connect to server: ' . mysql_error()); } //Select database $db = mysql_select_db(DB_DATABASE); if(!$db) { die("Unable to select database"); } if(!empty($login) && !empty($password)) { $login = mysql_real_escape_string($_POST['login']); $password = mysql_real_escape_string($_POST['password']); $query = "SELECT * FROM tuser WHERE username = '$login' AND password = SHA('$password')"; $data = mysql_query($query); if($data) { if (mysql_num_rows($data) == 1 ) { $row = mysql_fetch_assoc($data); $_SESSION['userid'] = $row['userid']; $_SESSION['username'] = $row['username']; $_SESSION['message'] = "Welcome, " . $_SESSION['username']; header('Location: member.php'); exit(); } else { $_SESSION['message'] = "Please enter a valid username or password"; header('Location: error.php'); exit(); } } else { die("Query failed"); } } else { $_SESSION['message'] = "Please enter a username or password"; header('Location: error.php'); exit(); } ?>