Ergebnis 1 bis 5 von 5
  1. #1
    Blodyman ist offline Jungspund
    registriert
    16-03-2013
    Beiträge
    24

    [Hilfe]Problem mit SQL verbindung in PHP klasse

    Hej, hab da ein kleines Projekt angefangen um mal OOP kennenzulernen.. Ich versuch in einer Klasse eine Verbindung zu einem MySQL server herzustellen um ein Passwortvergleich zu machen. So weit so gut.. Nur irgendwie bekomme ich keine Resultate aus der Datenbank per SELECT zurückgeliefert, wobei eine Verbindung besteht. Mach ich irgendwas grundlegend falsch?

    PHP-Code:
    <?php
    class SQLcon{
        private 
    $host;
        private 
    $user;
        private 
    $password;
        private 
    $db;
        protected 
    $con;

        function 
    __construct($host$user$password$db){
            
    $this->con mysqli_connect($this->host$this->user$this->password$this->db);
             if(
    $this->con == false){
                echo 
    'Die Verbindung zur Datenbank konnte nicht aufgebaut werden!';
            }
        }
        
    /*protected function connect(){
            $con = mysqli_connect($this->host, $this->user, $this->password, $this->db);
            if($con == false){
                echo 'Die Verbindung zur Datenbank konnte nicht aufgebaut werden!';
            }
            $this->con = $con;
        } */

        /*login begin*/
        
    public function login($email$pass){
           
    // $this->connect();
            
    $res $this->cmd("SELECT * FROM userdb WHERE Email like '"$email ."'");
            if(
    $res != false){
                if(
    $res->Password == md5($pass)){
                    
    session_start();
                    
    $_SESSION["User"] = "" $res->Firstname " " $res->Lastname "";
                    echo 
    '<script>location.href="umfrage1.php"</script>';
                }else{
                    echo
    '<form action="de/Loginscreen.php" name="hidden" method="post">';
                    echo 
    '<input type="email" name="user" value="' $_POST["user"] . '"/>';
                    echo 
    '<input type="hidden" name="pwdfehler" value="true"/>';
                    
    //echo'</form><script>document.forms["hidden"].submit();</script>';
                
    }
            }else{
                echo
    '<form action="de/Loginscreen.php" name="hidden" method="post">';
                echo 
    '<input type="hidden" name="mailfehler" value="true"/>';
                
    //echo'</form><script>document.forms["hidden"].submit();</script>';
            
    }
            
    $this->__destruct();
        }
        
    /*Commandfunction begin*/
        
    protected function cmd($cmd){
            if(
    $this->con == false){
                echo 
    'Die Verbindung zur Datenbank konnte nicht aufgebaut werden!';
            }
            
    $res mysqli_query($this->con$cmd);
            while(
    $res mysqli_fetch_assoc($res)){
                echo 
    $res["email"];
            }
        }
        function 
    __destruct(){
            
    $this->con null;
        }
    }
    ?>
    Das ist in der login.php
    PHP-Code:
    $verbindung = new SQLcon("myhost""myuser""""userdb");
    $verbindung->login($_POST["user"], $_POST['pwd']); 
    Danke schonmal für hilfe

    Mit freundlichen Grüßen

    Markus
    Geändert von mikdoe (26-04-2015 um 06:55 Uhr) Grund: gelöst gesetzt

  2. #2
    Avatar von kkapsner
    kkapsner ist offline Super Moderator
    registriert
    28-03-2008
    Beiträge
    17.672

    AW: [Hilfe]Problem mit SQL verbindung in PHP klasse

    Deine Methode cmd hat ja auch keinen Rückgabewert...
    Auch überschreibst du in der while-Schleife dauernd $res, was falsch ist.

    PS: wenn du dich mit OOP beschäftigen willst, warum verwendest du dann die prozeduralen Aufrufe von mySQLi und nicht die OOP?
    PPS: Du weißt schon, dass du eine massive SQL-Injection-Sicherheitslücke hast...
    PPPS: Im Destruktor fehlt ein mysqli_close().

  3. #3
    Blodyman ist offline Jungspund
    registriert
    16-03-2013
    Beiträge
    24

    AW: [Hilfe]Problem mit SQL verbindung in PHP klasse

    zu 1. Weil ich die nicht kenne, ich bin noch vollständig anfänger, will ne Ausbildung in die richtung machen soll jetzt nen Übungsprojekt machen und versuch das irgendwie hinzubekommen mit dem Wissen was ich derweile habe. Ich hab aber noch nie OOP ausprobiert. Ist mein erstes mal und ich steh auch so mit fast 0 Hintergrundwissen da. Wäre nett wenn man mir das etwas näher erläutern könnte

    zu 2. Nein wusst ich nicht. Seh ich aber auch nicht. Liegts am Public login?

    zu 3. Wenn ich das in den Destruktor schreibe wirft er ne warunung raus, weil er nach der query die Verbindung eh schließt und vorher würde die query nicht funktionieren.

    Habs inzwischen auch zum laufen gebracht:

    PHP-Code:
    <?php
    class SQLcon{
        private 
    $host;
        private 
    $user;
        private 
    $password;
        private 
    $db;
        protected 
    $con;

        function 
    __construct($host$user$password$db){
            
    $con mysqli_connect($host$user$password$db);
            
    $this->con $con;
        }

        
    /*login*/
        
    public function login($email$pass){
            
    $res $this->cmd("SELECT * FROM userdb WHERE Email like '"$email ."'");
            
    $res mysqli_fetch_assoc($res);

            if(
    $res != false){
                if(
    $res["Password"] == md5($pass)){
                    
    session_start();
                    
    $_SESSION["UserId"] = $res["CID"];
                    
    $_SESSION["User"] = "" $res["Firstname"] . " " $res["Lastname"] . "";
                    echo 
    '<script>location.href="'.$_SESSION["language"].'/pollone.php"</script>';
                }else{
                    echo
    '<form action="de/Loginscreen.php" name="hidden" method="post">';
                    echo 
    '<input type="hidden" name="user" value="' $_POST["user"] . '"/>';
                    echo 
    '<input type="hidden" name="pwdfehler" value="true"/>';
                    echo
    '</form><script>document.forms["hidden"].submit();</script>';
                }
            }else{
                echo
    '<form action="de/Loginscreen.php" name="hidden" method="post">';
                echo 
    '<input type="hidden" name="user" value="' $_POST["user"] . '"/>';
                echo 
    '<input type="hidden" name="mailfehler" value="true"/>';
                echo
    '</form><script>document.forms["hidden"].submit();</script>';
            }
        }
        
    /*Commandfunction*/
        
    protected function cmd($cmd){
            
    $res mysqli_query($this->con$cmd);
            return 
    $res;
        }
    }
    ?>
    Wie würde den z.B. mysqli_query und connect in OOP aussehen?

  4. #4
    Avatar von kkapsner
    kkapsner ist offline Super Moderator
    registriert
    28-03-2008
    Beiträge
    17.672

    AW: [Hilfe]Problem mit SQL verbindung in PHP klasse

    Zitat Zitat von Blodyman Beitrag anzeigen
    Weil ich die nicht kenne, ich bin noch vollständig anfänger
    War jetzt kein Vorwurf, sondern nur eine Frage. Jetzt kannst du dich ja damit beschäftigen.
    Zitat Zitat von Blodyman Beitrag anzeigen
    Wäre nett wenn man mir das etwas näher erläutern könnte
    Was willst du denn genau wissen?
    Zitat Zitat von Blodyman Beitrag anzeigen
    Nein wusst ich nicht. Seh ich aber auch nicht. Liegts am Public login?
    Nein. Es liegt daran, dass du die POST-Parameter ungefiltert/unescaped direkt in den SQL-String reinpackst.
    Zitat Zitat von Blodyman Beitrag anzeigen
    weil er nach der query die Verbindung eh schließt
    Das sollte er aber nicht tun. Du darfst aber auch in der login() den Destruktor nicht aufrufen.
    Zitat Zitat von Blodyman Beitrag anzeigen
    Habs inzwischen auch zum laufen gebracht
    Das ist gut. Jetzt hat die cmd() ja auch einen Rückgabewert.

    Ich würde in der login() aber keine echos reinmachen. Dadurch wird die Methode eingeschränkt und ist nicht mehr generisch einsetzbar. Mach' doch einen Boolean als Rückgabewert und mach' deine Ausgaben dann in dem Hauptprogramm.

    Zitat Zitat von Blodyman Beitrag anzeigen
    Wie würde den z.B. mysqli_query und connect in OOP aussehen?
    PHP: mysqli::query - Manual

  5. #5
    Blodyman ist offline Jungspund
    registriert
    16-03-2013
    Beiträge
    24

    AW: [Hilfe]Problem mit SQL verbindung in PHP klasse

    Nein, ich wollte jetzt auch nicht angreifend klingen
    Naja momentan hab ich denk ich das Prinzip schon fast raus. Fehlt nurnoch ein wenig das Vokabular ^^

    und zum destruktor: Sobalt ichs nach ausführung schreibe meldet er das sie bereits geschlossen ist als warnung und davor logisch funktioniert die query nicht, daher hab ichs weggelassen da wo vorher blabla= null; stand war mysqli_close(). Ich habs nur dann über PDO versucht aber dann seingelassen

    und keine schlechte idee mit dem boolean, ich denk das Probier ich, dann kann ich login auch später mal für abfragen nutzen ob das passwort richtig ist, zb wenn man passwort ändern will oder ka


    Ja ich hab mir in nem Chat mal eine geschrieben, die kann ich ja dann anpassen. Wollte das aber erst zum Schluss machen, weil ich grad volle Hand zutun hab ne Methode zu finden wie ich über Javascript Selected inputs an ne andere Seite schicken kann und umgekehrt, sollte alles sehr leicht erweiterbar sein. Zumindest was die Formulare angeht die das Script auswertwet und die Sollen später in ne 2. Datenbank geschrieben werden. Nur irgendwie funktioniert mein Script nicht, es schreibt mir die Valuezahlen auf die Matschscheibe, obwohl er das eigtl nicht tun sollte.. Input name="test" wird übrigens auch nicht weitergegeben wenn ichs mit .submit() abschicke..

    PHP-Code:
    //Funktion zum filtern der Auswahl und weitergabe in das nächste Formular
    $(function() {
        
    //Hier werden alle ausgewählten Elemente anhand ihres Namens und ihres Inhalts in dafür vorgesehene Arrays gespeichert.
        
    $('input[name="weiter"]').click(function(){
            var 
    0poll = [], name = [], res ""ri 0;
            $(
    'input:checked').each(function(){
                
    i++;
                
    name[i] = $(this).attr('name');
                
    poll[i] = $(this).val();
            });
            
    //Hier wird durch eine Schleife jedes ausgewählte Element anhand seines Namens in eine Variable desselben mit dem Inhalt in ein Result-String geschrieben
            
    for(0i<poll.lengthi++){
                if(
    name[i] != name[i-1] && name[i] != name[i+1] && name[i] != name[name.length-1]){
                    
    res += name[i] + "-" poll[i] + ",";
                }else if(
    name[i] != name[i-1] && name[i] == name[i+1]){
                    
    res += name[i] + "-" poll[i] + "-";
                }else if(
    name[i] != name[i-1]){
                    
    res += name[i] + "-" poll[i];
                }else if(
    name[i] != name[i-1] && name[i] != name[i+1]){
                    
    res += name[i] + "-" poll[i];
                }else if(
    name[i] == name[i+1]){
                    
    res += poll[i] + "-";
                }else if(
    name[i] != name[i+1] && name[i] != name[name.length-1] && != 0){
                    
    res += poll[i] + ",";
                }else if(
    name[i] != name[i+1] && name[i] == name[name.length-1]){
                    
    res += poll[i];
                }
            }
            
    //Die Zahl der aktuellen Seite herrausfinden und in eine Zahl umwandeln für die Weiterleitung
            
    var locator location.href.substr(location.href.length-5location.href.length-5);
            
    locator locator.substr(01);
            
    locator parseInt(locator);
            
    document.getElementById('send').innerHTML+='<form name="submit" method="post" aktion="poll'+locator+'.php">';
            for(
    0ri 0i<res.lengthi++, ri++){
                if(
    res[i] != "," && != res.length-1){
                    
    //alert("er ist im 1. if");
                    
    if(ri == 0){
                    
    //alert("er ist im 2. if");
                    
    document.getElementById('send').innerHTML+='<input type="text" name="'+res[i]+'" value="'+res[i]+'';
                    }else{
                        
    //alert("er ist im else");
                        
    document.getElementById('send').innerHTML+=''+res[i]+'';
                    }
                }else if(
    res[i] == ","){
                    
    document.getElementById('send').innerHTML+='"/>';
                    
    ri 0;
                }else{
                    
    //alert("er ist im 2. else");
                    
    document.getElementById('send').innerHTML+=''+res[i]+'"/>';
                }
            }
            
    document.getElementById('send').innerHTML+='<input type="hidden" name="test" value="test" />';
            
    document.getElementById('send').innerHTML+='</form>';
            
    //document.forms["submit"].submit();

             
    alert(res);
        });
    }); 
    Falls auch dafür ne Lösung hast, ich bastel da schon seit 2 Stunden an dem Script :/

    - - - Aktualisiert - - -

    Okay, hat sich soweit auch erledigt... Hat zwa jetzt 4 Stunden gedauert bis ich mal auf den richtigen Trichter kam, aber geschafft
    Problem war, dass Javascript mit innerHTML kein Formular getrennt aufbauen kann, sondern nur wenn <form> und </form> im gleichen innerHTML stehen... Bis ich mal drauf kam dann das zu nutzen und nicht ins send sondern ins <form> die Inputs per innerHTML zu schreiben verging natürlich Zeit... *Facepalm*

    - - - Aktualisiert - - -

    Hier falls Jemand braucht jetzt kann man beliebig viele Formulare auswerten ohne sich ums Script weiter kümmern zu müssen..

    Code:
    //Funktion zum filtern der Auswahl und weitergabe in das nächste Formular
    $(function() {
        //Hier werden alle ausgewählten Elemente anhand ihres Namens und ihres Inhalts in dafür vorgesehene Arrays gespeichert.
        $('input[name="forward"], input[name="back"]').click(function(){
            var i = 0, poll = [], name = [], resname = "", resval = "", res = "", ri = 0, elements = "";
            $('input:checked').each(function(){
                i++;
                name[i] = $(this).attr('name');
                elements += name[i] + ",";
                poll[i] = $(this).val();
            });
            //Hier wird durch eine Schleife jedes ausgewählte Element anhand seines Namens in eine Variable desselben mit dem Inhalt in ein Result-String geschrieben
            for(i = 0; i<poll.length; i++){
                if(name[i] != name[i-1] && name[i] != name[i+1] && name[i] != name[name.length-1]){
                    res += name[i] + "-" + poll[i] + ",";
                }else if(name[i] != name[i-1] && name[i] == name[i+1]){
                    res += name[i] + "-" + poll[i] + "-";
                }else if(name[i] != name[i-1]){
                    res += name[i] + "-" + poll[i];
                }else if(name[i] != name[i-1] && name[i] != name[i+1]){
                    res += name[i] + "-" + poll[i];
                }else if(name[i] == name[i+1]){
                    res += poll[i] + "-";
                }else if(name[i] != name[i+1] && name[i] != name[name.length-1] && i != 0){
                    res += poll[i] + ",";
                }else if(name[i] != name[i+1] && name[i] == name[name.length-1]){
                    res += poll[i];
                }
            }
            //Die Zahl der aktuellen Seite herrausfinden und in eine Zahl umwandeln für die Weiterleitung
            var locator = location.href.substr(location.href.length-5, location.href.length-5);
            locator = locator.substr(0, 1);
            locator = parseInt(locator);
            document.getElementById('send').innerHTML+='<form name="submit" method="post" aktion="poll'+locator+'.php"></form>';
            for(i = 0, ri = 0; i<res.length; i++){
                if(res[i] != "," && i != res.length-1){
                    if(ri == 0){
                    resname = res[i];
                    ri = 1;
                    }else{
                        resval += res[i];
                    }
                }else if(res[i] == ","){
                    document.forms["submit"].innerHTML+='<input type="hidden" name="'+resname+'" value="'+ resname + resval +'"/>';
                    ri = 0;
                    resval = "";
                    resname = "";
                }else{
                    resval += res[i];
                    document.forms["submit"].innerHTML+='<input type="hidden" name="'+resname+'" value="'+ resname + resval +'"/>';
                    resval = "";
                    resname = "";
                }
            }
            elements = elements.substr(0, elements.length-1);
            document.forms["submit"].innerHTML+='<input type="hidden" name="elements" value="'+ elements +'"/>';
            document.forms["submit"].submit();
            alert(res);
        });
    });

Ähnliche Themen

  1. Antworten: 7
    Letzter Beitrag: 22-08-2008, 13:16
  2. Antworten: 4
    Letzter Beitrag: 11-12-2007, 09:47
  3. Onload Event Handler in Verbindung mit Bildern Problem!
    Von Lan-Picario im Forum JavaScript
    Antworten: 3
    Letzter Beitrag: 29-08-2007, 12:29
  4. Antworten: 6
    Letzter Beitrag: 30-07-2007, 13:53
  5. HILFE - Formular SSL-Verbindung
    Von maximilian im Forum JavaScript
    Antworten: 1
    Letzter Beitrag: 03-10-2002, 23:13

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •