Простой вход, возвращающий пустую страницу

Я изучаю PHP, и я создал простой скрипт для входа, но проблема в том, что он перенаправляет меня только на пустую страницу. Он предназначен для перенаправления на index.php, если учетные данные пользователя верны, но это, по-видимому, не так? Существуют также проверки, так что если пользователь вводит пустой, возвращается ошибка. Это, похоже, не было выполнено.

login.php

<form id="login-form" method="post" action="logininc.php"> <fieldset> <legend>Login </legend> <p>Please enter your username and password to access the administrator's panel</p> <label for="user"> <input type="text" name="user" placeholder="Type your username here" id="user" /></label> <label for="password"> <input type="password" name="password" placeholder="Type your password here" id="password" /></label> <label for="submit"> <input type="submit" class="btn btn-primary"name="submit" id="submit" value="Login" /> </label> </fieldset> </form> 

logininc.php // моя страница обработки

 <?php require_once("assets/configs/db_config.php"); $user=$_POST['user']; $password=$_POST['password']; if(isset($_POST['login'])) { //To ensure that none of the fields are blank when submitting the form if if($user || $password != NULL) { $user = stripslashes($user); $password = stripslashes($password); $user = mysqli_real_escape_string($user); $password = mysqli_real_escape_string($password); $sql="SELECT * FROM $test_db WHERE user='$user' and password='$password'"; $result=mysqli_query($sql); $row=mysql_fetch_array($result); if($row['user'] == $user && $row['password'] == $password) { session_start(); $_SESSION['user'] = $user; $_SESSION['password'] = $password; $_SESSION['loggedin'] = "true"; header("location:index.php"); } else { print ('<div id="error">Computer says no.</div>'); } print ('<div id="error">Enter something!</div>'); } } ?> в <?php require_once("assets/configs/db_config.php"); $user=$_POST['user']; $password=$_POST['password']; if(isset($_POST['login'])) { //To ensure that none of the fields are blank when submitting the form if if($user || $password != NULL) { $user = stripslashes($user); $password = stripslashes($password); $user = mysqli_real_escape_string($user); $password = mysqli_real_escape_string($password); $sql="SELECT * FROM $test_db WHERE user='$user' and password='$password'"; $result=mysqli_query($sql); $row=mysql_fetch_array($result); if($row['user'] == $user && $row['password'] == $password) { session_start(); $_SESSION['user'] = $user; $_SESSION['password'] = $password; $_SESSION['loggedin'] = "true"; header("location:index.php"); } else { print ('<div id="error">Computer says no.</div>'); } print ('<div id="error">Enter something!</div>'); } } ?> 

index.php // страница успеха

  <?php //module to check logins session_start(); if(!isset($_SESSION["loggedIn"])){ header("Location: login.php"); exit; } Echo 'Congratulations <b>'.$_SESSION['user'].'</b> you successfully logged in!!<br /> Your Password is: <b>'.$_SESSION['password'].'</b><br /> <a href="login.php">Logout</a>'; ?> 

Что произойдет, если вы измените if(isset($_POST['login'])) до if(isset($_POST['submit'])) ?

$row = mysql_fetch_array должно быть $row = mysqli_fetch_array

и, как уже отмечалось, другие используют

 if(isset($_POST['user']) && isset($_POST['password'])) { // your code here } 

и btw: используя сеанс, где вы только говорите «loggedin = true», или «login = yes» и т. д. – это ничего, кроме безопасного

EDIT (обсуждение безопасности):

пароли всегда должны храниться в зашифрованном виде (регистрация):

 function login($email, $password) { $email = mysql_real_escape_string($email); $q = "SELECT id, email, password, salt FROM members WHERE email='" . $email . "'"; $result = mysql_query($q, $this->connection); $output = mysql_fetch_assoc($result); $user_id = $output['id']; $database_username = $output['username']; $database_email = $output['email']; $database_password = $output['password']; $password = hash('sha512', $password); if($database_password == $password) { $user_browser = $_SERVER['HTTP_USER_AGENT']; $user_id = preg_replace("/[^0-9]+/", "", $user_id); $_SESSION['user_id'] = $user_id; $_SESSION['username'] = $email; $login_hash = hash('sha512', $password.$user_browser); $_SESSION['login_hash'] = $login_hash; } else { return false; } } // function function login_check() { $user_id = $_SESSION["user_id"]; $login_hash = $_SESSION["login_hash"]; $email = $_SESSION["username"]; $user_browser = $_SERVER['HTTP_USER_AGENT']; $q = "SELECT password FROM members WHERE id ='" . $user_id . "'"; $result = mysql_query($q, $this->connection); $output = mysql_fetch_assoc($result); $database_password = $output['password']; if(mysql_num_rows($result) == 1) { $login_check = hash('sha512', $database_password.$user_browser); if($login_check == $login_hash) { return true; } else { return false; } } else { return false; } } 

Кроме того, вы можете создать случайную соль (регистрацию) для каждого пользователя, чтобы установить уровень безопасности даже немного выше (Примечание: hash (hash (hash (…))) снижает уровень безопасности, поскольку вы теряете информацию во время хэша обработать)

ПРИМЕЧАНИЕ. Это просто (рабочий) пример login / -check-скрипта с высоким уровнем безопасности. Тем не менее этот скрипт можно улучшить (bruteforce, mysqli / подготовленные операторы, хеширование паролей непосредственно в формах, безопасный сеанс, …)

Проблема в if(isset($_POST['login']))

Вы никогда не устанавливали запись «login» в своей форме.

Ты можешь сделать:

 if(isset($_POSt["user"]) && isset($_POST["password"])) { $user=$_POST['user']; $password=$_POST['password']; //To ensure that none of the fields are blank when submitting the form if if($user && $password) { 

Прежде всего, имя вашей кнопки «Отправить». И вы проверяете, является ли «логин» сообщением или нет.

 if(isset($_POST['login'])) { в if(isset($_POST['login'])) { 

это должно было быть:

 if(isset($_POST['submit'])) { 

Ты написал :

 if($user || $password != NULL) { 

это должно было быть:

 if($user != NULL || $password != NULL) { 

Вы использовали команду mysqli и mysql, которая не является хорошей практикой

 $result=mysqli_query($sql); $row=mysql_fetch_array($result); 

Вместо

 if($row['user'] == $user && $row['password'] == $password) { //this code again check for condition which is already checked in the sql statement 

лучше писать:

 if($row->num_rows==1) { 

в index.php вы написали

 if(!isset($_SESSION["loggedIn"])){ 

это должно было быть

 if(!isset($_SESSION["loggedin"])){ 

так как вы сохранили индекс нижнего регистра при сохранении в сеансе.