У меня есть класс контроллера с именем class Base_controler
, который перенаправляет URL-адрес с первым индексом в $_GET['url']
, являющимся именем класса, а вторым - методом в классе. Так что это полезно, допустим, у нас есть форма в from action=""
. Мне просто нужно ввести только две вещи: 1. Класс 2. Метод, который будет выполняться в этом классе. Также он показывает виды из папки просмотров. Возьмите следующую форму, например, если мне нужно отобразить ее из контроллера Users
, мне просто нужно запустить loadView ('Users/login', $data)
($data
- это любые данные, если я хочу передать в любое представление, если оставить поле пустым, оно передается как пустой массив).
<form action = "Users/login" method="POST">
<input type="text" placeholder="Enter username" name="username"><br>
<?php echo (!empty($data['username_error']) ? $data['username_error'] : '');?>
<input type="password" placeholder="Enter password" name="password"><br>
<?php echo (!empty($data['password_error']) ? $data['password_error'] : '');?>
<button type="submit" name="submit_login">Submit</button>
</form>
Обратитесь к контроллеру Users, где можно увидеть, что, если пользователь вводит какое-либо недопустимое значение, такое как имя пользователя или пароль, представление повторно отправляется пользователю с соответствующими ошибками.
<?php
class Users extends Base_controller{
public function login(){
// This method does both display and process the form
// Load the form if it has not been submitted yet
if(!isset($_POST['submit_login'])){
$this->load_view('users/login');
}
// Process the form if it has been submitted
elseif(isset($_POST['submit_login'])){
*Code has been cute here*
if($this->password == 'Invalid username'){
// Code to execute if the entered username does not exist in the database
$data['username_error'] = 'Invalid username.';
}
else{
// Code to execute if the entered username exists in the database
var_dump($this->password);echo br;
echo $this->password.br;
if(password_verify($_POST['password'], $hashed_password_retrieved_from_db)){
// Code to execute if the entered password is valid
$this->valid_password = true;
}
else{
// Code to execute if the entered password is invalid
$data['password_error'] = 'Invalid password.';
}
}
// Code to check if any error(s) exist(s) and proceed accordingly
if(empty($data['username_error']) && empty($data['password_error']) && $this->valid_password==true){
// Code to execute if no errors are present
// Create session
session_start();
$_SESSION['username'] = $_POST['username'];
// Redirect user to dashboard
header('location: dashboard');
}
// Code to execute if errors are present in the entered data: Reload the form with errors
$this->load_view('users/login', $data);
}
}
}
?>
Теперь проблема в том, что если пользователь вводит какое-либо недопустимое поле, представление отправляется обратно пользователю с соответствующими ошибками для изменения неправильных полей, но когда пользователь повторно отправляет форму, только пустая страница загружается. Также я заметил еще одну вещь: когда форма загружается в первый раз или когда она была повторно отправлена пользователю, в адресной строке написано - http://localhost/Users/login
(как и должно быть, потому что я использую файл .htaccess
для вырезания оставшаяся чушь), однако, когда форма была повторно отправлена, в адресной строке написано - http:///localhost/Users/Users/login
. Это код, который я создал на основе учебника, в котором действие формы было http://localhost/Users/login
. Какую ошибку я здесь делаю ????