Dobrý den,
ve škole jsme dostali za úkol naprogramovat modulární systém, který by načítal moduly pro různé role (admin bude mít přístup k více modulům než user či guest.) Problém je, když se přihlásím na účet admin (modul Login.class.php) - načítají se mi moduly pouze pro guesta, po kliknutí na tlačítko odhlásit mi Session_destroy neproběhne a po redirectu se zobrazí načtený administrační modul. Přikládám kód, děkuji moc za nakopnutí správným směrem. Interface
<?php
interface IModule {
public function __construct();
public function authentication();
public function preprocessing();
public function content();
}
?>
index.php
<?php
session_start();
error_reporting(-1);
ini_set('display_errors', 'On');
require ('config.php');
require ('Interfaces/IModule.php');
require ('Core/parse_url.php');
require_once('Core/Template.php');
$db = new mysqli (server,users,password,database);
if (!isset( $_SESSION['SYSTEM']['USER']['USER_ID'])){
$_SESSION['SYSTEM']['USER']['USER_ID'] = 1;
}
$userid = $_SESSION['SYSTEM']['USER']['USER_ID'];
$query = "SELECT modules.id_module, modules.filename, modules.mainclass, modules.name FROM roles"
. " INNER JOIN role_association ON roles.id_role = role_association.id_role"
. " INNER JOIN model_access ON roles.id_role = model_access.id_role "
. " INNER JOIN modules ON model_access.id_moduelaccess = modules.id_module"
. " WHERE role_association.id_users = $userid";
$result = $db->query($query);
$modules = array();
while($row = $result->fetch_array()) {
$path = $row['name'];
$filename = $row['filename'];
$class = $row['mainclass'];
require "./Modules/$path/$filename";
array_push($modules,new $class);
}
for ($i = 0;$i < count($modules);$i++) {
$modules[$i]->authentication();
}
for ($i = 0;$i < count($modules);$i++) {
$modules[$i]->preprocessing();
}
$template = new Template();
$template->start();
for ($i = 0;$i < count($modules);$i++) {
$modules[$i]->content();
}
$template->end();
?>
modul login
<?php
class Login implements IModule
{
public function __construct()
{
}
public function authentication()
{
}
public function preprocessing()
{
global $actual_link;
global $db;
global $userid;
if (isset($_GET['login'])) {
if (isset($_POST['password']) && isset($_POST['login'])) {
$password = md5($_POST['password']);
$login = addslashes($_POST['login']);
$query = "SELECT id_users FROM users WHERE login = \"$login\" AND password=\"$password\"";
$result = $db->query($query);
if ($result->num_rows == 0) {
echo "Spatne jmeno nebo heslo!";
} else {
$userid = $result->fetch_object()->id_users;
$_SESSION['SYSTEM']['USER']['USER_ID'] = $userid;
echo "Prihlasen";
}
}
}
if (isset($_GET['logout']))
{
echo "Odhlasen";
session_destroy();
$userid = 1;
$_SESSION['SYSTEM']['USER']['USER_ID'] = 1;
}
}
public function content()
{
global $userid;
if ($userid == 1) {
echo '<form action="index.php?login=1" method="post">
<input type="text" name="login" value=""/>
<input type="text" name="password" value=""/>
<input type="submit" value="Prihlasit"/>
</form>';
} else {
echo '<form action="index.php?logout=1" method="post">
<input type="submit" value="Odhlasit"/>
</form>';
}
}
}
?>
Při kliknutí na logout neproběhne žadný kód
{
echo "Odhlasen";
session_destroy();
$userid = 1;
$_SESSION['SYSTEM']['USER']['USER_ID'] = 1;
}
A místo defaultního index.php se po odhlašení z admina načte admin modul. Díky za pomoc.