#php #login
#php #войти
Вопрос:
В настоящее время я создаю небольшое приложение для управления количеством комиксов, которые у меня есть в настоящее время. Я использую MVC в notepad , я бы использовал фреймворк, однако это небольшое приложение, поэтому не видел в нем необходимости. Я использую PHP backend и Twitter Bootstrap в качестве интерфейса, однако у меня возникает проблема при входе в систему с использованием сеансов. Я зарегистрировался с помощью приложения, которое работает без проблем, однако, когда я пытаюсь войти в систему с учетными данными, оно просто продолжает загружаться index.php вместо того , чтобы login.php .
Вид
заголовок.phtml
<!DOCTYPE html>
<?php
if (!isset($_SESSION)) {
session_start();
}
?>
<html>
<head>
<link href="css/custom.css" rel="stylesheet">
<link href="css/bootstrap.min.css" rel="stylesheet">
<link href="css/bootstrap.css" rel="stylesheet">
<title>My Comics</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body onload="initialize()" style="background-color: #D3D3D3;">
<!-- If email is does not equal email in database then remain in index page -->
<?php if (isset($_SESSION['Email']) amp;amp; $_SESSION['Email'] <> ''): ?>
<div class="navbar navbar-inverse navbar-fixed-top" role="navigation">
<?php endif; ?>
<div class="container">
<!-- If email does equal the one given in database login to profile -->
<?php if (isset($_SESSION['Email'])): ?>
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<?php endif; ?>
<a class="navbar-brand" href="index.html">My Comics</a>
</div>
<div class="collapse navbar-collapse">
<ul class="nav navbar-nav">
<li class="active"><a href="home.php">Home</a></li>
</ul>
<!-- Display logout button along with users email -->
<?php if (isset($_SESSION['Email']) amp;amp; $_SESSION['Email'] <> ''): ?>
<div class="navbar-search navbar-brand pull-right">
<?php if (isset($_SESSION['Email'])): ?>
<form action="logout.php" method="post">
<!-- Welcome message for user with logout button -->
<?php if ($_SESSION['Email'] != "") echo "Welcome " . $_SESSION['Email']; ?>
<input type="submit" value="Logout" name="submit" class="btn-danger"/>
</form>
<?php endif; ?>
</div>
</div>
<!-- Login Form for users -->
<?php else: ?>
<form class="navbar-form navbar-right" action="login.php" method="post">
<div class="form-group">
<input name="Email" value="Email" id="Email" type="text" class="form-control" placeholder="Enter Username">
</div>
<div class="form-group">
<input name="Password" value="Password" id="Password" type="password" class="form-control" placeholder="Enter Password">
</div>
<button name="submit" type="submit" name="submit" id="submit" class="btn btn-default">Login</button>
</form>
<?php endif; ?>
<!--/.nav-collapse -->
</div>
</div>
<div class="container">
Модель
LoginData.php
<?php
class LoginData {
protected $Name, $Email, $Password;
public function __construct($dbrow) {
$this->Name = $dbrow['Name'];
$this->Email = $dbrow['Email'];
$this->Password = $dbrow['Password'];
}
function getName() {
return $this->Name;
}
function getEmail() {
return $this->Email;
}
function getPassword() {
return $this->Password;
}
function logout() {
$_SESSION = array();
session_destroy();
}
}
LoginDataSet.php
<?php
require_once('Model/Database.php');
require_once('Model/LoginData.php');
class LoginDataSet {
protected $_dbHandle, $_dbInstance = null;
public function __construct() {
$this->_dbInstance = Database::getInstance();
$this->_dbHandle = $this->_dbInstance->getdbConnection();
}
public function fetchLoginDetails($Email, $Password) {
$Password = crypt($Password, $Email);
$sqlQuery = "SELECT * FROM users WHERE Email=:u AND Password=:p"; //basic SQL Query
$statement = $this->_dbHandle->prepare($sqlQuery); //Prepare PDO statement
//SQL Injection
$statement->execute(array(
':u' => $Email,
':p' => $Password
)); //Executes PDO statement
$dataSet = [];
while ($row = $statement->fetch()) { //Fetches the next row matching the query
$dataSet[] = new LoginData($row);
}
return $dataSet;
}
public function fetchProfileDetails($Name) {
$sqlQuery = "SELECT * user WHERE Name='" . $Name . "'";
$statement = $this->_dbHandle->prepare($sqlQuery); //Prepare PDO statement
$statement->execute(); //Executes PDO statement
$dataSet = [];
while ($row = $statement->fetch()) { //Fetches the next row matching the query
$dataSet[] = new LoginData($row);
}
return $dataSet;
}
}
?>
Контроллер
<?php
//session start will always be an email
session_start();
$view = new stdClass();
$view->pageTitle = 'LoggedIn';
require_once ('Model/LoginDataSet.php');
//if submit is pressed
if (isset($_POST['submit'])) {
//check the email and password against the one in the database.
$LoginDataSet = new LoginDataSet();
//if email and password matches one in the database
$view->LoginDataSet = $LoginDataSet->fetchLoginDetails($_POST['Email'], $_POST['Password']);
//get the variables below using the functions of logindataset
if (count($view->LoginDataSet) == 1) {
$_SESSION['Email'] = $_POST['Email'];
$_SESSION['Name'] = $view->LoginDataSet[0]->getName();
//continue on to profile page
header("Location:home.php");
} else {
//if incorrect return to index page with error
$_SESSION['error'] = "logindetails";
header("Location:index.php");
}
}
require_once('View/home.phtml');
Вот как это выглядит в настоящее время
Я разработал веб-сайт сначала на HTML, а затем динамически на PHP, что я обычно и делаю. Однако это не приведет к login.php контроллер он просто продолжает обновляться index.php , Есть ли что-нибудь конкретное, что кто-нибудь замечает, что могло бы исправить это, чтобы оно вошло в систему, а также не избавилось от имени приложения и кнопки?
Любая помощь будет с благодарностью принята.
Комментарии:
1. Удалите перенаправления в вашем контроллере, у вас есть перенаправление на index.php . Затем начните отладку, и если у вас по-прежнему возникают проблемы, отправьте более краткий вопрос. Прочитайте раздел «Как задать вопрос».
2. Привет, перенаправления включены в инструкцию if / else, я знаю, что информация, которую я ввожу, верна, однако она по-прежнему не регистрирует меня, как мне хотелось бы, что является приветствием [Email protected] и кнопкой выхода из системы, заменяющей форму входа в панель навигации в заголовке.
3. Если вы не собираетесь отлаживать и изолировать свою проблему дальше (мое предложение выше), то вы вряд ли получите помощь здесь.
4.
session_start()
должен вызываться перед любым выводом. Почему там<!DOCTYPE html>
, где это? Скорее всего, это ваша проблема. Включениеerror_reporting(E_ALL); ini_set('display_errors', '1');
покажет ошибку.5. Привет, ребята, в нем говорится, что проблема заключается в неопределенном индексе электронной почты и пароля? Как бы я определил их в MVC, поскольку я уже установил переменные или думал, что я сделал в LoginDataSet, используя метод fetchLoginDetails в контроллере входа?