Прежде всего, жестко запрограммированный массив должен находиться в файле processor.php, где вы фактически проверяете учетные данные пользователя, а не в файле login.php, который просто отображает форму входа.Затем вы должны каким-то образом обойти массив студентов и проверить, является ли то, что набрал пользователь, допустимым.Но сначала давайте добавим небольшую удобную функцию в Student.php
class Student {
function checkCredentials($firstname, $lastname, $password) {
$firstname = strip_tags(trim($firstname));
$lastname = strip_tags(trim($lastname));
$password = strip_tags(trim($password));
if(
$this->f_name == $firstname
&& $this->l_name == $lastname
&& $this->password == $password
) {
return true;
}
return false;
}
}
Обратите внимание, что я переместил очистку ввода в класс.И теперь мы можем немного изменить файл CPU.php:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title></title>
</head>
<body>
<?php
function check_submit($field_to_check)
{
if (isset($_POST[$field_to_check]) && $_POST[$field_to_check] != '')
{
return TRUE;
}
else
{
return "Please fill in the $field_to_check category!";
}
}
if (check_submit('first_name') !== TRUE)
{
$errors[] = check_submit('first_name');
}
if (check_submit('last_name') !== TRUE)
{
$errors[] = check_submit('last_name');
}
if (check_submit('password') !== TRUE)
{
$errors[] = check_submit('password');
}
if (count($errors)> 0){
echo "<ul>";
foreach($errors as $message){
echo "<li>$message</li>";
}
echo "</ul>";
die();
}
// so far we've only checked if the post values exist
require_once "student.class.php";
$students = array();
$students[0] = new Student('Trey', 'Smith', 'senior', 'male', 'sailor1234');
$students[1] = new Student('Kyle', 'McAulay', 'junior', 'male', 'abc123');
$students[2] = new Student('Stacey', 'Keibler','senior','female', 'hotdawg23');
$students[3] = new Student('Lindsey', 'Mullins', 'junior','female','gonoles69');
$students[4] = new Student('Kenneth', 'Jaggers','senior', 'male', 'peterpanpan');
$students[5] = new Student('Chad', 'Endris', 'sophomore', 'male','back2thefuture');
$user = false; // Will store the logged in user, if login succeeds
// Here we traverse the array and checkCredentials for each stored Student object
foreach($students as $student) {
if($student->checkCredentials($_POST["first_name"], $_POST["last_name"], $_POST["password"]) {
$user = $student;
break; // Since there can be only one logged in user, there is no point to let foreach continue
}
}
if($user == false) {
echo "No such user exits";
die();
}
?>
<h1>Thank you for registering <?php echo $user->get_name; ?> !</h1>
<h2>Your password was correct!</h2>
</body>
</html>
Наиболее распространенный подход для успешного входа в систему - это сохранение некоторой идентификации пользовательской информации (чаще всего userID) в переменной сеанса и перенаправление назащищенная страница.Поскольку это невозможно с вашим жестко закодированным массивом, я просто помещу весь объект в сессию.Это очень грубо и небезопасно, вам стоит подумать о добавлении базы данных в смесь.
Давайте назовем эту страницу admin.php, и конец файла process.php станет:
if($user == false) {
echo "No such user exits";
die();
}
$_SESSION["user"] = $user;
header("Location: admin.php");
die();
admin.php должен выглядеть примерно так:
<?php
session_start();
require_once "student.class.php";
if(
!isset($_SESSION["user"])
|| !( $_SESSION["user"] instanceof Student)
) {
header("Location: login.php");
die();
}
$user = $_SESSION["user"];
?>
<h1>Thank you for registering <?php echo $user->get_name; ?> !</h1>
<h2>Your password was correct!</h2>
Итак, что здесь происходит:
- session_start () сообщает php, что вы хотите использовать сеансы, и это должно быть в каждом скрипте, которыйиспользует их, прежде чем вывести что-либо на экран (т. е. в самом верху скрипта, перед любым HTML).Вы также должны поместить его в processor.php
- , прежде чем разрешить пользователю что-либо делать в admin.php. Мы проверяем, была ли инициализирована переменная $ _SESSION ["user"] и содержит ли она объект Student * 1020.*
- если нет, мы отправили пользователя обратно в логин.
- если да, мы помещаем объект Student в симпатичную переменную, с которой можно поиграться.