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

  • Annamoon
    hat ein Thema erstellt [Erledigt] query funktioniert normal aber nicht mit OOP?.

    [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");
    ?>

  • monolith
    antwortet
    Ok! Gut dann macht das ja nichts.

    Einen Kommentar schreiben:


  • Annamoon
    antwortet
    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.

    Einen Kommentar schreiben:


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

    Einen Kommentar schreiben:


  • Annamoon
    antwortet
    ok danke !

    Einen Kommentar schreiben:


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

    edit: Man sind die alle fix unterwegs.

    Einen Kommentar schreiben:


  • lstegelitz
    antwortet
    PHP-Code:
        $this->username $username
        
    $this->password $password
    PHP-Code:
     $stmt->bind_param 'ss'$username$password ); 
    Du bindest nicht vorhandene Parameter...

    Einen Kommentar schreiben:


  • monolith
    antwortet
    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.

    Einen Kommentar schreiben:


  • nikosch
    antwortet
    $stmt->bind_param ( 'ss', $username, $password );

    Einen Kommentar schreiben:

Lädt...
X