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

  • 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?

  • #2
    zeig doch mal deinen code, so ist das etwas schwer, nachzuvollziehen, ok

    LG
    https://github.com/Ma27
    Javascript Logic is funny:
    [] + [] => "", [] + {} => object, {} + [] => 0, {} + {} => NaN

    Kommentar


    • #3
      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'];
                    
              }

                      
      //.....

      ?>

      Kommentar

      Lädt...
      X