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 );
    [COLOR="#F5F5FF"]--[/COLOR]
    [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
    „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
    [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
    [COLOR="#F5F5FF"]
    --[/COLOR]

    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.
          [COLOR=#A9A9A9]Relax, you're doing fine.[/COLOR]
          [URL="http://php.net/"]RTFM[/URL] | [URL="http://php-de.github.io/"]php.de Wissenssammlung[/URL] | [URL="http://use-the-index-luke.com/de"]Datenbankindizes[/URL] | [URL="https://www.php.de/forum/webentwicklung/datenbanken/111631-bild-aus-datenbank-auslesen?p=1209079#post1209079"]Dateien in der DB?[/URL]

          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