Modulární systém – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Modulární systém – PHP – Fórum – Programujte.comModulární systém – PHP – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
coldan
~ Anonymní uživatel
4 příspěvky
22. 4. 2015   #1
-
0
-

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.

Nahlásit jako SPAM
IP: 178.255.168.–
Reklama
Reklama
Kit+11
Guru
22. 4. 2015   #2
-
0
-

#1 coldan
Zkus to napsat objektově. Pak se v tom možná vyznám a budu ti moct poradit.

Proč se to rozhraní jmenuje právě IModule? Něco moduluje? iPad, iPhone, iModule? Název rozhraní má vyjadřovat nějakou vlastnost.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:221:5...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
peter
~ Anonymní uživatel
2546 příspěvků
23. 4. 2015   #3
-
0
-

Vsiml jsem si, ze pomerne casto pouzivas nastaveni id. Zkusil jsi na to udelat funkci? Kdyz treba zmenis pak strukturu session, tak to budes muset prepsat na mnoha mistech (getuserid, setuserid).
$_SESSION['SYSTEM']['USER']['USER_ID']

Zkus sem dat spustitelny kod vcetne struktury tabulek a nejakeho zaznamu z nich. Phpmyadmin umi udelat export sql tabulky. Tenhle kod je nepouzitelny!
require ('config.php'); - nenalezeno
require ('Core/parse_url.php'); - nenalezeno
require_once('Core/Template.php'); - nenalezeno ...

$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";
- userid pro dotaz pouzivas ze session. Prihlaseni / neprihlaseni uzivatele resis az o nekolik radku pod tim, ale v sql dotazu zustane stare userid z predchoziho kroku. Cili v dobe, kdy jeste nevis, zda nahodou nemas uzivatele odhlasit. Vysledkem tedy je, ze userid se projevi az na kliknuti na jakoukoliv dalsi stranku. Cili, kdyz po logout na neco kliknes, tak uz budes odhlasen.

 

Nahlásit jako SPAM
IP: 2001:718:2601:1f7:d086:56...–
coldan
~ Anonymní uživatel
4 příspěvky
23. 4. 2015   #4
-
0
-

#3 peter
http://uloz.to/xFR8jWX2/html-zip hodil jsem na uloz.to kompletni projekt vcetne souboru htaccess. Database je vyexportovana v souboru test.sql s tim, ze jsou tam testovaci data. Dekuji za pomoc.

Nahlásit jako SPAM
IP: 188.120.198.–
coldan
~ Anonymní uživatel
4 příspěvky
23. 4. 2015   #5
-
0
-

#3 peter
Omlouvam se za pridavani dalsiho prispevku, ale ten hash u admina je "007".

Nahlásit jako SPAM
IP: 188.120.198.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 53 hostů

Podobná vlákna

C++ a system() — založil Ezechiel

Os.system — založil Priwi

System() v C++ — založil

System("??????"); — založil dragon124

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý