PHP скрипт входа в систему ошибочно отображает HTML-код - PullRequest
0 голосов
/ 11 мая 2018

Я начал использовать подготовленные заявления. Все казалось хорошо, пока я не перезагрузил свою машину. Теперь, когда я пытаюсь войти, пароль не может быть подтвержден. Я не могу утешить любые ошибки. Единственное, что я могу напечатать на экране, это HTML-код с начальной страницы индекса, где начинается вход в систему.

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
  <meta name="description" content="" />
  <meta name="author" content="" />
  <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  <meta name="viewport" content="width=device-width, initial-scale=1" />

  <title>Login Page</title>

  <link href="css/bootstrap.min.css" rel="stylesheet" />
  <link href="css/font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css" />
  <link href="https://fonts.googleapis.com/css?family=Lato:300,400,700,300italic,400italic,700italic" rel="stylesheet" type="text/css" />
  <link href="css/landing-page.min.css" rel="stylesheet" />
</head>

Вот форма на той же странице:

<form>
  <input type="text" class="form-control" placeholder="Enter Username" id="username" />
  <input type="password" class="form-control" placeholder="Enter Password" id="password" />
  <button type="button" class="btn btn-sm btn-primary" id="loginSubmit">Login</button>
</form>

<script src="js/jquery.js"></script>
<script src="js/bootstrap.bundle.min.js"></script>
<script src="js/login.js"></script>

Вот код для login.js (без проверки)

$('#loginSubmit').on('click', function()
{
  var username = $('#username').val();
  var password = $('#password').val();

  $.post('process/checkLogin.php', {username:username, password:password}, function(data)
  {
    if(data.indexOf("Error") >= 0)
    {
      console.log(data);
    }
  });
});

Вот процесс, который называется checkLogin.php

<?php
  include('../include/sessions.php');

  if(isset($_POST['username']))
  {
    $username = htmlspecialchars(trim($_POST['username']));

    $select = "SELECT username, firstname, lastname, email, 
              userlevel, `password` FROM users WHERE username = ?;";

    $stmt = $dbc->prepare($select);
    $stmt->bind_param("s", $username);
    $stmt->execute();
    $result = $stmt->get_result();
    $row = $result->fetch_assoc();

    if(password_verify($_POST['password'], $row['password']))
    {
      $_SESSION['user'] = $row;

      header("Location: ../cust/home.php");
      die;
    }
    else
    {
      echo "Error: The username/password combination does not match our records.";
    }
  });
?>

Я думаю, что зависание происходит по адресу password_verify в скрипте checkLogin.php. Он пропускает к другому, является ли пароль правильным или нет. Но вместо того, чтобы увидеть сообщение об ошибке, я вижу только HTML-код для начальной страницы входа.

Клянусь, все это работало до того, как я перезагрузил свой компьютер. Это не ограничивается Chrome. Все браузеры делают одно и то же.

Чего мне не хватает?

1 Ответ

0 голосов
/ 20 мая 2018

(Опубликовано от имени автора вопроса) .

Мне кажется, я нашел проблему.Я должен был опубликовать код для sessions.php, который выглядит следующим образом:

<?php
  if(!isset($_SESSION)){session_start();} 
  include("database.php");

  $username = $_SESSION['user']['username'];
  $firstname = $_SESSION['user']['firstname'];
  // few more sessions

  if(empty($_SESSION['user']['username']) || $_SESSION['user']['userlevel'] != '9')
  {
    header('Location: ../index.php');
    die;
  }
?>

Я думаю, что проблема была в сессиях, в том вышеупомянутом утверждении if.Я пытался запретить людям доступ к странице сессий или любой другой странице, и когда я удалил это утверждение if, я теперь смог достичь успешных результатов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...