Ankündigung

Einklappen
Keine Ankündigung bisher.

Frage zu meiner Routing-Technik anhand von Login -> Home

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • jack159
    hat ein Thema erstellt Frage zu meiner Routing-Technik anhand von Login -> Home.

    Frage zu meiner Routing-Technik anhand von Login -> Home

    Hallo,

    ich verwende in meinem Projekt Clean URL's und lasse erstmal jeden Request auf die index.php weiterleiten. Dort hole ich mir dann die URL-Parameter, werte diese aus und rufe dann entsprechend (mittels switch-case-Konstrukt) die jeweilige Controller-Methode auf oder include direkt die jeweilige Seite.

    Beispiel:

    Request: www.blub.de/login (oder alternativ ohne login am Ende)
    Würde die Login-Seite aufrufen.

    Jetzt logge ich mich ganz normal ein, klicke auf den "Login"-Button, welcher den URL-Parameter "checkLogin" (action="checkLogin" im Login-Formular) an die index.php "sendet".
    Im switch-case-Konstrukt meiner index.php wird nun die entsprechende Controller-Methode checkLogin() aufgerufen und die Login-Daten werden geprüft (im Model).

    Und hier nun mein Problem bzw. meine Frage:
    Wenn das Login erfolgreich war, dann include ich momentan direkt die home-Seite. Das Problem dabei ist aber, dass dann zwar die home-Seite angezeigt wird, aber in der URL noch am Ende der checkLogin-Parameter steht... Schöner wäre, wenn dort bereits der home-Parameter stehen würde.

    Jetzt hatte ich mal das include durch ein header() ersetzt, aber das Problem bleibt bestehen....(Außerdem muss ich bei header() nun 2x auf den Button klicken, ehe das Login ausgeführt wird O.o ).


    Kann vielleicht jemand weiterhelfen?

  • jack159
    antwortet
    Hier mein Code (habe nur die relevanten Sachen drinnen gelassen, also eher Codeschnispel). Dies ist mein erstes PHP-Projekt, also falls ihr andere fatale Fehler finden solltet, könnt ihr auch gerne darauf hinweisen, aber in dem Thread ist mir am wichtigsten dieses Problem zu lösen
    Außerdem werden die Passwörter noch nicht gehasht, das kommt noch.

    index.php (Jeder Request wird auf dieses Skript verwiesen):

    PHP-Code:
    <?php

        session_start
    ();

        
    $projectname "/Facebook-Clone/";
        
    $requestAction substr($_SERVER['REQUEST_URI'], strlen($projectname), strlen($_SERVER['REQUEST_URI']));
        
        
    $requestAction explode("/"$requestAction);
        
        
    $root str_replace('\\''/'dirname(__FILE__)).'/';
        
    $GLOBALS['root'] = $root;
        
        require 
    "$root/model/User.php";
        require 
    "$root/controller/Controller.php";
        require 
    "$root/other/Database.php";
        
        
    $user = new User();
        
    $controller = new Controller();
        
        if(
    $user->isLoggedIn()) {
            
    $user->init();
        }else {
            
    $user->setPermissionID(0);
            
            
    // Abfrage fuer nicht eingeloggte Benutzer
            
    switch ($requestAction[0]) {
                case 
    '':
                    require 
    "$root/view/login.php";    
                    break;
                
                case 
    'login':
                    require 
    "$root/view/login.php";
                    break;
                    
                case 
    'checkLogin':                                                        
                    
    $controller->doLogin($user);
                    break;
                    
                case 
    'register':
                    require_once 
    "$root/view/register.php";
                    break; 
                    
                case 
    'doRegister':
                    
    $controller->register($user);
                    break;
                
                default:
                    require 
    "$root/view/login.php";
                    break;
            }
            
            return;
        }

    // Abfrage fuer eingeloggte Benutzer
        
    switch ($requestAction[0]) {
                
            case 
    'login':
                require 
    "$root/view/login.php";
                break;
                
            case 
    'home':
                require 
    "$root/view/home.php";
                break;
                
            case 
    'friends':
                require 
    "$root/view/friends.php";
                break;
                
            case 
    'profile':
                require 
    "$root/view/profile.php";
                break;
                
            case 
    'messages':
                require 
    "$root/view/messages.php";
                break;
                
            case 
    'pinboard':
                require 
    "$root/view/pinboard.php";
                break;
                
            case 
    'searchResults':
                
    $controller->doSearch();
                break;
                
            case 
    'logout':
                
    $controller->logout();
                break;
            
            default:
                require 
    "$root/view/home.php";
                break;
        }
         
         
    ?>

    Controller.php (hier die eigentliche Stelle, auch im Code nochmal makiert)

    PHP-Code:

    <?php

        
    class Controller {
            
            function 
    __construct() {
                
            }

            function 
    doLogin($user) {
                
                if(
    $user->checkLogin($_POST['email'], $_POST['password'])) {
                    require 
    $GLOBALS['root'] . "/view/home.php";    // hier die entscheidene Stelle!!!!
                    //header("Location: " . $GLOBALS['root'] . "/view/home.php");       // hier mein header() versuch als alternative zu requiere (natürlich wird dann entsprechend die obere Zeile auskommentiert)
                
    }
                else {
                    require 
    $GLOBALS['root'] . "/view/login.php";
                }

            }

                    
    //......

    ?>


    User.php

    PHP-Code:

    <?php

        
    class User {
            
            private 
    $email;
            private 
    $password;
            private 
    $name;
            private 
    $age;
            private 
    $permissionID 1;
            
            function 
    __construct() {
                
            }
            
            function 
    isLoggedIn() {
                if(isset(
    $_SESSION['email']))
                    return 
    true;
                else
                    return 
    false;
            }
            

            function 
    checkLogin($email$password) {
                
    $db Database::getInstance();
                
    $stmt $db->prepare("SELECT * FROM user WHERE email=:email AND password=:password");
                
    $stmt->bindValue(":email"$emailPDO::PARAM_STR);
                
    $stmt->bindValue(":password"$passwordPDO::PARAM_STR);
                
    $stmt->execute();
                
    $rows $stmt->fetchAll(PDO::FETCH_ASSOC);
                            
                if(
    sizeof($rows) == 1) {
                    
                  
    $this->email $rows[0]['email'];
                  
    $this->name $rows[0]['name'];
                  
    $this->age $rows[0]['age'];
                  
    $this->permissionID $rows[0]['permissionID'];
                  
                  
    $_SESSION['name'] = $rows[0]['name'];
                  
    $_SESSION['email'] = $rows[0]['email'];
                  
    $_SESSION['age'] = $rows[0]['age'];
                  
    $_SESSION['permissionID'] = $rows[0]['permissionID'];
                  
                                    
                  return 
    true;
                  
                }else if(
    sizeof($rows) == 0) {
                    echo 
    "Wrong Login-Data!<br>";
                    echo 
    "SELECT * FROM user WHERE email='" $email "' AND password='" $password "'";
                    return 
    false;
                }else if(
    sizeof($rows) > 1) {
                    echo 
    "This account exists multiplie times! Please contact the admin.";
                    return 
    false;
                } 
            }
            
            function 
    init() {

                  
    $this->email $_SESSION['email'];
                  
    $this->name $_SESSION['name'];
                    
    $this->age $_SESSION['age'];
                  
    $this->permissionID $_SESSION['permissionID'];
                  
            }

                    
    //.....

    ?>

    Einen Kommentar schreiben:


  • Ma27
    antwortet
    zeig doch mal deinen code, so ist das etwas schwer, nachzuvollziehen, ok

    LG

    Einen Kommentar schreiben:

Lädt...
X