Ankündigung

Einklappen
Keine Ankündigung bisher.

Logindaten in mysql checken und dann umleiten!

Einklappen

Neue Werbung 2019

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

  • Logindaten in mysql checken und dann umleiten!

    Hallo,
    ich versuche meine Login-Seite zum laufen zu bringen aber ich kriege keinen Fehler angezeigt. Ich gaube etwas in der getData Methode in der login.php läuft falsch. Ich habe versuchte $ergebnis mit var_dump() auszugeben aber es kommt nix raus!

    loginConroller.php:

    PHP-Code:
    <?php

         error_reporting
    (-1);
         
    ini_set('display_errors'1);

         if (isset(
    $_POST['submit']) AND $_POST['submit']== 'Login') {
               
    $username $_POST['username'];
               
    $password $_POST['password'];
       
                         try{
                         include 
    "./models/login.php";
                         
    $login = new Login($username$password);

                         if (
    $login== TRUE) {
                              
    session_start();
                              
    $_SESSION['username'] = $username;
                              
    header('Location: index.php');
                         }

                       }catch(
    Exception $exc ){
                         echo 
    $exc->getMessage();
                       }
                 }
    ?>
    login.php:
    PHP-Code:
    <?php

    class Login
    {

        private 
    $username;
        private 
    $password;
        private 
    $cxn;    // Database object.

        
    function __construct($username$password)
        {
            
    // Set data
            
    $this->setData($username$password);

            
    // connect to db
            
    $this->connectToDb();

            
    //get Data
            
    $this->getData();
        }

       private function 
    setData($username$password){

                 
    $this->username $username;
                 
    $this->password $password;

                }
        
        private function 
    connectToDb(){

                include 
    'models/database2.php';
                
    $vars "include/vars.php";
                
    $this->cxn = new Database2($vars);
                
                }

        private function 
    getData(){

              
    $query ="SELECT 'username', 'password' FROM 'users' WHERE 'username' = '$this->username'
                                        AND 'password' = '
    $this->password'";
                                    
               
    $result mysqli_query($this->cxn->db$query) or die(mysql_error());

               
    var_dump($result);

               
    $num_row mysqli_num_rows($result); 

                     if (
    $num_row>1) {
                         return 
    TRUE;
                     }else{
                          throw new 
    Exception("The query was not successful!");
                      }
                  }

          function 
    close(){
            
    $this->cxn->close_connect();
                }
    }
    ?>
    database2.php:
    PHP-Code:
    <?php

    class Database2{

        private 
    $host;
        private 
    $user;
        private 
    $password;
        private 
    $database;

        public 
    $db;

        function 
    __construct($filename){
              if(
    is_file($filename)){
                  include 
    $filename;
              }else{
                  throw new 
    Exception("Error Processing Request");
                  }
            
    $this->host     $host;
            
    $this->user     $user;
            
    $this->password =$password;
            
    $this->database =$database;

            
    $this->connect();        
          }

             public function 
    connect(){
                          
    // connect to the server.
                          
    $this->db = new mysqli($this->host$this->user$this->password);    
                           if (
    $this->db->connect_errno) {
                                  die(
    "We are sorry, you could not be connected to the server,
                                      plaese check your connection setting!"
    );
                           }else{
                                  echo 
    "You are connected to the database";
                           }
                       }

          public function 
    close_connect(){
              
    mysql_close();

          }
    }

    ?>


  • #2
    schön, ich kann mich da wohl einfach so einloggen, ohne einen useraccount zu haben. mehr noch, ich kann deine ganze datenbank löschen wie ich lustig bin.
    Current Projects: http://www.welten-buch.de, http://neu.zooadoo.de

    Kommentar


    • #3
      wie kann ich testen ob meine query Abfrage in der getData Methode was zurückliefert?

      Kommentar


      • #4
        Ist die Frage dein ernst? mach halt ein echo oder var_dump() rein an der Stelle, oder was ist das Problem?

        Was soll das da oben überhaupt werden was du da produzierst?

        PHP-Code:
            private function connectToDb(){ 

                    include 
        'models/database2.php'
                    
        $vars "include/vars.php"
                    
        $this->cxn = new Database2($vars); 
                     
                    } 
        Übergib doch alles was du benötigst von außen ins Objekt, wie die zB das DB-Objekt etc..
        Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
        PHP.de Wissenssammlung | Kein Support per PN

        Kommentar


        • #5
          Zitat von Annamoon Beitrag anzeigen
          wie kann ich testen ob meine query Abfrage in der getData Methode was zurückliefert?
          Debugging?
          Oder aber so, wie du es jetzt schon machst (num_rows)


          Und ansonsten:

          PHP-Code:
          $query ="SELECT 'username', 'password' FROM 'users' WHERE 'username' = '$this->username
                                              AND 'password' = '
          $this->password'"
          Dieses statement ist schlichtweg falsch. Tabellen- und Feldnamen gehören nicht in Hochkommata!


          PHP-Code:
          $result mysqli_query($this->cxn->db$query) or die(mysql_error()); 
          Du vermischt mysqli und mysql Funktionen...


          PHP-Code:
          mysqli_query($this->cxn->db$query
          Du hast dir doch einen eigene Wrapper für Datenbankfunktionen gebastelt - warum benutzt du ihn dann nicht? Oder anders gefragt: welchen Wert hat dein Wrapper, ausser das er ein mysqli Objekt als Member mitführt?
          Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

          Kommentar


          • #6
            Ich benutze eignetlich Sublime Text 3 und ich weiß nicht wie man die "xDebug" Package zum laufen bringen kann.

            ich habe meine Database2 Klasse gelöscht und deren Funktionenen und Attribute in die Loginklasse reingetan

            was ist wie kann ich mein statment in mysqli schreiben um vermischung zu vermeiden?

            Ich versuchte eben num_rows mit var_dump() auszugeben aber es wird nichts angezeigt.

            PHP-Code:
            <?php

            class Login
            {
                private 
            $host        "localhost";
                private 
            $user        "root";
                private 
            $db_password "******";
                private 
            $database    "awebarts";

                private 
            $db;

                private 
            $username;
                private 
            $password;
                
            //private $cxn;    // Database object.

                
            function __construct($username$password)
                {
                    
            // Set data
                    
            $this->setData($username$password);

                    
            // connect to db
                    
            $this->connectToDb();

                    
            //get Data
                    
            $this->getData();

                    
            //colse connection
                    
            $this->close_connect();
                }

               private function 
            setData($username$password){

                         
            $this->username $username;
                         
            $this->password $password;

                        }
                
                private function 
            connectToDb(){
                                  
            // connect to the server.
                                
            $this->db = new mysqli($this->host$this->user$this->db_password);    
                                   if (
            $this->db->connect_errno) {
                                          die(
            "We are sorry, you could not be connected to the server,
                                              plaese check your connection setting!"
            );
                                   }else{
                                          echo 
            "You are connected to the database";
                                   }
                        
                        
                        }

                private function 
            getData(){

                      
            $query ="SELECT 'username', 'password' FROM 'users' WHERE 'username' = '$this->username'
                                                AND 'password' = '
            $this->password'";
                                            
                       
            $result mysqli_query($this->db$query) or die(mysql_error());

                       
            var_dump($result);

                       
            $num_row mysqli_num_rows($result); 

                             if (
            $num_row>1) {
                                 return 
            TRUE;
                             }else{
                                  throw new 
            Exception("The query was not successful!");
                              }
                          }

                   public function 
            close_connect(){
                      
            mysql_close();}
            }
            ?>

            Kommentar


            • #7
              Hast du überhaupt gelesen was meine kollegen hier gepostet habenm weil dein obiger Code hat immer noch die gleichen Fehler...
              Zudem SQL-Injection und Passwörter hasht man gefälligst!
              Und wenn du alle Vorschläge hier umgesetzt hast und es dann immer noch nicht geht, dann postet man erneut. Ansonsten fühl ich mich dezent verar**** und die anderen sicher auch.
              Current Projects: http://www.welten-buch.de, http://neu.zooadoo.de

              Kommentar


              • #8
                Ja ich habe alles umgesetzt was @hausl gesagt hat, darum habe ich die Struktur geändert. Zu dem was @lstegelitz habe ich die Singal qoutes entfernt und versucht rows_num auszugeben aber es kam nix raus. Zur Vermischung von sqli und mysql wusste ich nicht so genau was ich vermische, darum habe ich nochmal gefragt.

                Zu sql injection wollte ich nicht machen weil das nur eine Webseite eines Tutorial ist und sie haben gesagt dass sie erstmal die sql injection und security nicht behanden wollen
                oder muss man sie doch behandeln damit die Seite funktioniert?

                Kommentar


                • #9
                  Zitat von Annamoon Beitrag anzeigen
                  PHP-Code:
                  <?php

                  class Login
                  {

                      private 
                  $username;
                      private 
                  $password;

                      function 
                  __construct($username$password)
                      {
                          
                  // Set data
                          
                  $this->setData($username$password);
                      }

                     private function 
                  setData($username$password){

                               
                  $this->username $username;
                               
                  $this->password $password;

                              }
                  Bevor ich weiter poste, was erwartest du denn an diesen 2 Stellen?
                  Du setzt die folgendes Propertys auf private:
                  $username
                  $password


                  So, du setzt unter setData den Propertys einen Wert zu, den du beim Konstruktor setzt.
                  Und da verstehe ich die Logik nicht mehr. Du könntest genau so den Propertys den Wert im Konstruktor setzen,
                  als dafür eine unnötige Methode zu erstellen.

                  Das würde dann so aussehen:
                  PHP-Code:
                  private $username;
                  private 
                  $password;

                  public function 
                  __construct($username$password) {
                      
                  $this->username $username;
                      
                  $this->password $password;

                  Die Methode "setData" ist private gesetzt, also hättest du von außen auch keinen Zugriff drauf, setzt aber in der Klasse den beiden Propertys einen Wert zu, den du im Konstruktor setzen kannst. Sorry, aber verstehen tu ich das nicht wirklich
                  Bin etwas verwirrt...

                  MfG.

                  #EDIT
                  Zu sql injection wollte ich nicht machen weil das nur eine Webseite eines Tutorial ist und sie haben gesagt dass sie erstmal die sql injection und security nicht behanden wollen
                  oder muss man sie doch behandeln damit die Seite funktioniert?
                  Man sollte wirklich immer auf Sicherheit achten! Du musst es nicht behandeln, damit die Seite funktioniert. Aber falls du möchtest das deine Datenbank gelöscht oder gar die Benutzer Daten geklaut werden, dann have fun.

                  Sonst würde ich mir nochmal die Grundlagen anschauen.
                  MfG.
                  Dir gefällt mein Beitrag, ich habe Dir geholfen?
                  Bewerte mich doch einfach!

                  Kommentar


                  • #10
                    Ich weiß nicht, mir kommt vor es hakt hier an zu vielen Ecken und es fehlt zu viel an Grundlagen.. Ev. solltest du dir vorher mal die üblichen PHP Grundlagen aneignen und dann in erst in Richtung OOP mal das hier machen: http://www.peterkropff.de/site/php/oop.htm

                    Ich bin was OOP kein Held, aber das was du da produzierst sieht einfach seltsam aus. Gar nicht böse gemeint, aber ich denke du tutst dir da momentan absolut selbst keinen gefallen, wenn du selbst(!) eigentlich rundherum nicht verstehst was du da machst und es sind wirklich vieles Grundlagen wo es da eckt.

                    weil das nur eine Webseite eines Tutorial ist und sie haben gesagt dass sie erstmal die sql injection und security nicht behanden wollen
                    Und ich wage auch zu behaupten das das Tutorial was du da hast kein Gutes ist.

                    LG
                    Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                    PHP.de Wissenssammlung | Kein Support per PN

                    Kommentar


                    • #11
                      Jedes Tutorial, das nicht direkt auf die Gefahr von Injections eingeht ist meines Erachtens totaler Müll... Viele (wie du auch) kopieren das Zeug da nur raus oder folgen dem Tutorial und haben sich dann ein Scheunentor für angriffe geschaffen...
                      injections bekämpft man direkt von anfang an, entweder mit der mysqli_real_escape_string- Methode oder eben direkt prepared Statements.
                      Current Projects: http://www.welten-buch.de, http://neu.zooadoo.de

                      Kommentar


                      • #12
                        Zitat von Annamoon Beitrag anzeigen
                        Zu dem was @lstegelitz habe ich die Singal qoutes entfernt und versucht rows_num auszugeben aber es kam nix raus.
                        Vom Entfernen der Hochkommata ist leider nichts zu sehen, die stehen immer noch im SQL Statement.
                        Genau daher rührt auch dein Problem, kein Ergebnis zu sehen. Das Statement ist falsch, es erzeugt kein Ergebnis, sondern einen Fehler!
                        Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                        Kommentar


                        • #13
                          So ich habe es mit prepared Statements gemacht und ich kriege den folgenden Fehler

                          "Fatal error: Call to a member function bind_param() on a non-object "

                          Und danke für die Tipps
                          PHP-Code:
                          <?php

                          class Login
                          {
                              private 
                          $host        "localhost";
                              private 
                          $user        "root";
                              private 
                          $db_password "******";
                              private 
                          $database    "********";

                              private 
                          $db;

                              private 
                          $username;
                              private 
                          $password;

                              function 
                          __construct($username$password)
                              {
                                  
                          // Set data
                                  
                          $this->setData($username$password);

                                  
                          // connect to db
                                  
                          $this->connectToDb();

                                  
                          //get Data
                                  
                          $this->getData();

                              }

                             private function 
                          setData($username$password){

                                       
                          $this->username $username;
                                       
                          $this->password $password;

                                      }
                              
                              private function 
                          connectToDb(){
                                                
                          // connect to the server.
                                              
                          $this->db = new mysqli($this->host$this->user$this->db_password);    
                                                 if (
                          $this->db->connect_errno) {
                                                        die(
                          "We are sorry, you could not be connected to the server,
                                                            plaese check your connection setting!"
                          );
                                                 }else{
                                                        echo 
                          "You are connected to the database";
                                                 }
                                      
                                      
                                      }
                               
                                 private function 
                          getData(){
                                          
                          $query ="SELECT id FROM users WHERE username = ? AND password = ?";

                                          
                          $stmt $this->db->prepare($query);
                                          
                          $stmt->bind_param('ss'$this->username$this->passowrd);
                                          
                          $stmt->execute();
                                          
                          $stmt->bind_result($username$password);
                                          
                          $stmt->fetch();
                                          
                          $numberofrows $stmt->num_rows();

                                          echo  
                          '# rows: '.$numberofrows;

                                          if (
                          $numberofrows>1) {
                                               return 
                          true;
                                          }else{
                                              throw new 
                          Exception("Please check your username and passowrd!");
                                              
                                          }

                                       }
                                  }
                          ?>

                          Kommentar


                          • #14
                            Zitat von Annamoon Beitrag anzeigen
                            So ich habe es mit prepared Statements gemacht und ich kriege den folgenden Fehler

                            "Fatal error: Call to a member function bind_param() on a non-object "
                            Heisst wohl, das prepare() fehlgeschlagen ist und "false" zurückgegeben hat.

                            Überprüf die SQL Query (Tippfehler? Falsche Feldnamen? ..)
                            Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                            Kommentar


                            • #15
                              bei mir war es Tippfehler:
                              PHP-Code:
                              $stmt->bind_param('ss'$this->username$this->passowrd); 
                              passowrd--->password

                              Kommentar

                              Lädt...
                              X