Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] query funktioniert normal aber nicht mit OOP?

Einklappen

Neue Werbung 2019

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

  • [Erledigt] query funktioniert normal aber nicht mit OOP?

    Hallo zusammen,
    ich versuche gerade eine query in OOP umzuwandeln. Beim normalen query kriege ich die Ausgabe "# rows: 1" aber beim OOP-Qery kriege ich die Ausgabe "# rows: 0". Wie kann ich das password und der username im OOP-Query setzen damit es funktioniert?

    Hier kriege ich die Ausgabe "#rows: 1 "
    PHP-Code:
    <form action="" method="post" name="login">
       <input type="text" name="username" /><br />
       <input type="password" name="password" id="password"/><br />
       <input type="submit" value="Login" name="login" />
    </form>
    <?php
           $mysqli 
    = new mysqli('localhost''root''alex88''awebarts');
           if(isset(
    $_POST['login'])){

            
    $username $_POST['username'];
            
    $password $_POST['password'];
           
            
    $stmt $mysqli->prepare("SELECT username, password FROM users WHERE username=? AND  password=? LIMIT 1");
            
    $stmt->bind_param('ss'$username$password);
            
    $stmt->execute();
            
    $stmt->bind_result($username$password);
            
    $stmt->store_result();
            
    $numberofrows $stmt->num_rows();
            echo  
    '# rows: '.$numberofrows;
    }
    ?>
    Hier kriege ich die Ausgabe "rows: 0"
    PHP-Code:
    <?php
    class Login {
      private 
    $username;
      private 
    $password;
     
     
      function 
    __construct($username$password) {
        
    $this->setData ($username$password);
        
    $this->getData ();
      }
      function 
    setData($username$password) {
        
    $this->username $username;
        
    $this->password $password;
      }
      function 
    getData() {
        
    $mysqli = new mysqli 'localhost''root''alex88''awebarts' );
        
    $stmt $mysqli->prepare "SELECT username, password FROM users WHERE username=? AND  password=? LIMIT 1" );
        
    $stmt->bind_param 'ss'$username$password );
        
    $stmt->execute ();
        
    $stmt->bind_result $username$password );
        
    $stmt->store_result ();
        
    $numberofrows $stmt->num_rows ();
        echo 
    '# rows: ' $numberofrows;
      }
    }
    $login = new Login("alex""alex88");
    ?>


  • #2
    $stmt->bind_param ( 'ss', $username, $password );
    --

    „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
    Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


    --

    Kommentar


    • #3
      BTW: Warum erzeugst du in der Methode getData() erst mal eine neue mysqli-Verbindung? Das sollte eher so aussehen:

      PHP-Code:
      $mysqli = new mysqli(...);

      $login = new Login($mysqli, ...);

      class 
      Login {

          
      $mysqli null;

          function 
      __construct($mysqli, ...)
          {
              
      $this->mysqli $mysqli;
              ...
          }

          function 
      getData()
          {
              
      $mysqli $this->mysqli;
              ....
          }

      Denn dann brauchst du nur ein sozusagen "globales" mysqli-Verbindungsobjekt und musst nicht in jeder Klasse eine neue Verbindung erstellen, sondern übergibst das "globale" mysqli-Objekt einfach an jede Klasse die es benötigt.

      Kommentar


      • #4
        PHP-Code:
            $this->username $username
            
        $this->password $password
        PHP-Code:
         $stmt->bind_param 'ss'$username$password ); 
        Du bindest nicht vorhandene Parameter...
        Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

        Kommentar


        • #5
          In getData() hast du $username und $password nicht. Du hast aber $this->username und $this->password.

          edit: Man sind die alle fix unterwegs.
          Relax, you're doing fine.
          RTFM | php.de Wissenssammlung | Datenbankindizes | Dateien in der DB?

          Kommentar


          • #6
            ok danke !

            Kommentar


            • #7
              BTW Nr. 2: Ich frage mich außerdem was überhaupt der Sinn der Klasse ist, eigentlich besteht sie nur aus der Login-Methode. Vielleicht wäre es sinnvoller auf eine eigene Klasse zu verzichten und stattdessen an die sicherlich auch vorhandene/geplante User-Klasse (oder Authentication-Klasse) eine Methode login() anzufügen, die im Wesentlichen der Methode getData() entspricht?

              Kommentar


              • #8
                Zitat von monolith Beitrag anzeigen
                BTW: Warum erzeugst du in der Methode getData() erst mal eine neue mysqli-Verbindung? Das sollte eher so aussehen:

                PHP-Code:
                $mysqli = new mysqli(...);

                $login = new Login($mysqli, ...);

                class 
                Login {

                    
                $mysqli null;

                    function 
                __construct($mysqli, ...)
                    {
                        
                $this->mysqli $mysqli;
                        ...
                    }

                    function 
                getData()
                    {
                        
                $mysqli $this->mysqli;
                        ....
                    }

                Denn dann brauchst du nur ein sozusagen "globales" mysqli-Verbindungsobjekt und musst nicht in jeder Klasse eine neue Verbindung erstellen, sondern übergibst das "globale" mysqli-Objekt einfach an jede Klasse die es benötigt.
                Ja ich habe auch so eine connectToDa() methode aber zur Veranschaulichung habe ich sie alle zusammen gepackt.

                Kommentar


                • #9
                  Ok! Gut dann macht das ja nichts.

                  Kommentar

                  Lädt...
                  X