Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Notice: Trying to get property of non-object

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Notice: Trying to get property of non-object

    Guten Tag,

    ich habe jetzt lange überlegt ob ich mich hier registriere um die Frage zu stellen. Da ich nun aber nicht mehr weiter weiß habe ich mich doch getraut

    Wie im Titel schon angegeben bekomme ich eine Fehlermeldung, die ja besagt das hier ein Objekt angegeben wird was nicht da ist.

    Der Script ist ein Login Script - hier wird noch ein Capatcha usw eingebaut.

    Erst mal den Code

    PHP-Code:
    <?php
    session_start
    ();


    require_once (
    'include/config.inc.php');

    $username $_POST["username"];
    $passwort md5($_POST["password"]);

    $abfrage "SELECT * FROM user WHERE username='$username' AND passwort='$passwort'";
    $ergebnis mysql_query($abfrage);
    $datensatz mysql_fetch_object($ergebnis);


        if ( 
    $datensatz->username == $username AND $datensatz->passwort == $passwort)
        {
      
    $_SESSION["username"]                  =   $username;
    }



        
    // sleep(1);
        // header('Location: index.php');

        //}
    //else
      //  {
       // sleep(1);
        // header('Location: index.php');
        //}



    ?>
    Die betroffene Zeile ist

    PHP-Code:
    $abfrage "SELECT * FROM user WHERE username='$username' AND passwort='$passwort'"
    Wenn ich

    PHP-Code:
    AND passwort='$passwort' 
    raus nehme erhalte ich keine Fehlermeldung, jedoch ist das ja nicht der Sinn - username und passwort sind beide in der DB unter user vorhanden.

    Evtl. kann mir der ein oder andere ja Tipps geben.


  • #2
    Lass dir $abfrage ausgeben (z.B. mit var_dump), kopiere den String und teste das SQL mit phpMyAdmin oder was immer du nimmst.
    Vermute einen Schreibfehler beim Feldnamen.
    PHP-Klassen auf github

    Kommentar


    • #3
      Ich habe nun alles durch die Datenbank gejaggt. Mit

      Code:
      SELECT * FROM user WHERE `username` = 'Mustermann' AND `passwort` = 'd83799f49c48d0de9c67bc25b'
      Klappt es - auch wenn ich es in den PHP Code einfüge. Nun habe ich es nach und nach probiert. Zu erst habe ich die Variable $username für Mustermann ersetzt , passt soweit. Sobald ich aber den MD5 Code mit der Variable $passwort ersetze kommt der selbe Fehler erneut.

      PHP-Code:
      var_dump($abfrage); 
      sagt mir

      Code:
      string(99) "SELECT * FROM user WHERE `username` = 'Mustermann' AND `passwort` = 'd83799f49c48d0de9c67bc25bcf6b21f'"
      Das Formular Script sieht so aus

      PHP-Code:
      <?php
      echo '<form action="login.php" method="post">';
      echo 
      'Dein Username:<br>';
      echo 
      '<input type="text" size="24" maxlength="50"';
      echo 
      'name="username"><br><br>';
      echo 
      'Dein Passwort:<br>';
      echo 
      '<input type="password" size="24" maxlength="50"';
      echo 
      'name="password"><br>';
      echo 
      '<input type="submit" value="Login">';
      echo 
      '</form>';
       
      ?>

      Kommentar


      • #4
        Zuerst einmal stelle um auf MySQLI oder PDO, die MySQL-Schnittstelle ist veraltet.

        Richtig debuggen

        1. Man bemerkt, dass ein Skript nicht das tut, was es soll.
        2. Man schreibt an den Anfang des Scriptes die Zeile: error_reporting(-1);
        3. Man verwendet ini_set('display_errors', true); damit die Fehler auch angezeigt werden.
        4. Man versucht, die Stelle die daran Schuld sein kann, schonmal einzugrenzen. Falls dies nicht geht, wird zunächst das komplette Skript als fehlerhaft angesehen.
        5. An markanten Stellen im Skript lässt man sich wichtige Variableninhalte ausgeben und ggf. auch in bedingten Anweisungen eine kurze Ausgabe machen, um zu überprüfen, welche Bedingung ausgeführt wurde. Wichtig bei MySQL Fehlern (...not a valid MySQL result resource...): mysqli_error() verwenden oder Abfrage ausgeben und zb mit phpmyadmin testen.
        6. Schritt 5 wird so lange wiederholt, bis Unstimmigkeiten im Skript auffallen
        7. Damit hat man das Problem (Unstimmigkeit) gefunden und kann versuchen diese zu beheben. Hierzu dienen dann die PHP-Dokumentation und andere Quellen als Ratgeber.
        8. Lässt sich das konkrete Problem trotzdem nicht beheben, kann man in Foren um Rat fragen.
        9. Das Programm läuft und man kann die Debug-Ausgaben wieder entfernen.
        Die Deutsche Rechtschreibung ist Freeware! Du darfst sie kostenlos nutzen, allerdings ist sie nicht Open Source, d.h. Du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

        Kommentar


        • #5
          Aber bei Wikipedia steht doch

          ...ist ein virtueller Platz zum Austausch und zur Archivierung von Gedanken, Meinungen und Erfahrungen...
          Wenn ich jetzt alle 7 Punkte ab arbeite - was natürlich und mit Sicherheit produktiv ist - für was gibt es dann hier das Forum bzw. den Bereich

          PHP Einsteiger PHP Problemlösungen für Spracheinsteiger
          ???

          Und genau deshalb hatte ich ja geschrieben

          ich habe jetzt lange überlegt ob ich mich hier registriere um die Frage zu stellen. Da ich nun aber nicht mehr weiter weiß habe ich mich doch getraut

          Kommentar


          • #6
            .....

            Kommentar


            • #7
              Zum Programmieren gehört auch die eigenständige Fehlersuche. Wenn man dann trotzdem nicht weiterkommt, kann man in einem Forum nachfragen. Aber bitte erst "Richtig debuggen" ausführen und den Quellcode mit den Debug-Ausgaben posten, damit man auch erkennt, dass du gewillt warst, den Fehler selber zu finden. Zum Vorkauen sind Foren nicht gedacht.
              Die Deutsche Rechtschreibung ist Freeware! Du darfst sie kostenlos nutzen, allerdings ist sie nicht Open Source, d.h. Du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

              Kommentar


              • #8
                Das Forum soll dir helfen, in Zukunft deine Probleme selbst zu lösen und nicht dein Problem zu lösen, wenn du dich nicht ernsthaft mit php beschäftigen willst, bist du hier falsch.
                Fatal Error: Windows wird gestartet

                Wie administriert man ein Netzwerk: Beispiel

                Kommentar


                • #9
                  Zitat von Unlikus Beitrag anzeigen
                  Das Forum soll dir helfen, in Zukunft deine Probleme selbst zu lösen
                  So ist es, immer nach dem Motto eines chinesischen Sprichwortes:
                  Gib einem Hungernden einen Fisch, und er wird einmal satt, lehre ihn Fischen, und er wird nie wieder hungern.
                  Die Deutsche Rechtschreibung ist Freeware! Du darfst sie kostenlos nutzen, allerdings ist sie nicht Open Source, d.h. Du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

                  Kommentar


                  • #10
                    Okay, passt schon - wie ihr ja sagt, man lernt aus seinen Fehlern

                    Kommentar


                    • #11
                      Es gibt für php auch nette Debugtools, xdebug ist ganz nett, kann einem viel Arbeit und die unschönen echos überall ersparen.
                      Bei machen Frameworks werden die ohne ein exit; dahinter nicht mal angezeigt
                      Fatal Error: Windows wird gestartet

                      Wie administriert man ein Netzwerk: Beispiel

                      Kommentar

                      Lädt...
                      X