Trying to get property of non-object

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

  • Trying to get property of non-object

    Hallo liebe PhP-Gemeinde,

    Ich arbeite aktuell freizeitmäßig an einer Materialverwaltung und habe dort bei meinem Login ein kleines Problem.
    Wie es ablaufen soll:
    a) Wenn ein Login korrekt erfolgt, dann soll ich auf meine Seite "stock.php" weitergeleitet werden.
    b) Wenn ein Login fehlerhaft erfolgt, dann soll eine Fehlermeldung entsprechend des "Fehlverhaltens" erfolgen.

    Was passiert:
    a) Klappt.
    b) Klappt nicht: Error = "Notice: Trying to get property of non-object in /Applications/XAMPP/xamppfiles/htdocs/webdev/mmweb/user/user_controller.php on line 38"und es erfolgt eine Weiterleitung auf die stock.php...

    Zeile 38:
    PHP-Code:
    $id $this->model->getRecord("username='" $this->_request->username .
                                 
    "' AND password='" . \md5($this->_request->password) . "'")->id
    Ich versuche das Problem jetzt schon seit einigen Tagen zu beheben, habe aber mittlerweile wirklich den Blick dafür verloren, sämtliche Dinge über var_dump getestet und ich weiß einfach nicht weiter... ich vermute ja, dass ich einen Fehler bekomme sobald getRecord aufgerufen wird, da er mit $data nichts anzufangen weiß und mir darüber wohl null zurückliefern wird...
    daher würde ich mir von euch wünschen, wenn mir jemand sagen könnte, wo in meiner Logik ein Fehler auftritt oder was ich falsch mache.


    Vielen Dank schon mal im Voraus.


    user_model:
    PHP-Code:
    <?php
    include_once 'libraries/Model.php';

    class 
    User_Model extends Model{
        
    const 
    TABLE_NAME="user";
        
        
    public function 
    getRecord ($where ""){                //Abfrage eines Datensatzes
       
        
    $queryparent::buildQuery(self::TABLE_NAME,$where);
        return 
    parent::getObject($query);
        
        
    }

    public function 
    getRecords ($where ""$ordering""){      //Abfrage mehrerer Datensätze auf einmal
        
         
    if($ordering == ""){
            
    $ordering="id";
        }
        
        
    $queryparent::buildQuery(self::TABLE_NAME,$where,$ordering);
        return 
    parent::getObjectList($query);
        
        
    }
    PHP-Code:
    <?php
    include_once "libraries/Database.php";

    class 
    Model extends Database{
        
        public function 
    __construct() {
            
    parent::connect();
        }
        
        public function 
    buildQuery($tableName=""$where=""$ordering=""){     //Query wird gebastelt
                                                                                //ordering entspricht dem Zusatz "Order by"
            
    $query ="SELECT * FROM " $tableName;
           
                if(
    $where != ""){
                    
    $query.=" WHERE ".$where;
                }
                if(
    $ordering != ""){
                    
    $query.= " ORDER BY ".$ordering;
                }
             
                return 
    $query;
        }
    public function 
    getObjectList($query=""){               //Mehrere Datensätze in Objekte umschreiben
           
            
    $data = array();        
            
    Database::setQuery($query);
            
    $i=0;
            while (
    $row parent::getObjectList()){
                
    $data[$i]=$row;
                
    $i ++;
            }
            
            return 
    $data;
        }          
        
        
         public function 
    getObject($query "") {
             
             
    $data="";
             
    Database::setQuery($query);
    //         $x= parent::getObjectList();
    //         var_dump($x);
                 
             
    while ($row parent::getObjectList()) {
               
                
    $data $row;
              
            }
            
            return 
    $data;
            
        }
    Database:
    PHP-Code:
    class Database{
        
        private 
    $ergebnis;
        
        function 
    connect(){                     //Verbindung zur Datenbank herstellen
            
            
    $connect mysql_connect(MySQL_HOST,MySQL_USER,MySQL_PASSWORT) or die("Keine Datenbankverbindung möglich" .mysql_error());
            
    mysql_select_db(MySQL_DATENBANK) or die ("Die Datenbank existiert nicht" .  mysql_error());
            
           return 
    $connect;
            
        }
        
       
        
        function 
    setQuery($query){              //Query wird gebaut und abgeschickt
            
            
    $connect=$this->connect();        
            
    $this->ergebnis mysql_query($query,$connect) or die (mysql_error());
            return 
    $this->ergebnis;
        }
        
        
        function 
    getObjectList(){        //Inhalt des Queries wird zu einem Objekt geformt 
           // print_r($this->ergebnis);
         
    return mysql_fetch_object($this->ergebnis); 
    User_controller:

    PHP-Code:
    <?php

    include_once 'config/constants.php';
    include_once 
    'libraries/Controller.php';
    //error_reporting(E_ALL);
    //ini_set("display_errors", "off");
    //ini_set("display_startip_errors", "off");

    class User_Controller extends Controller {

        public function 
    __construct() {

            
    parent::__construct();                  //Zugriff auf Funktionen von Model und View jetzt über 
            
    $this->view = new User_View;            //$this->model-> oder $this->view->
            
    $this->model = new User_Model;
            if (isset(
    $this->_request->action)) {   //Filtere die Action aus der Request um Work einen 
                
    $this->work($this->_request->action); //Paramenter zu übergeben und die switch-Anweisung zu füllen
            
    }
        }

        public function 
    work($action) {

            switch (
    $action) {


                case 
    "login":


                    if ((
    $this->_request->username == "") || ($this->_request->password == "")) { //Fall 1: Leeres Login-Formular

                        
    parent::output("error""Login fehlgeschlagen.<br/> Bitte geben Sie einen gültigen Benutzernamen und Passwort ein");
                       
                    } else { 
    //Fall 2: Login-Daten sind inkorrekt.

                        //Führt getRecord aus User_Model aus und erzeugt Query, welches einen Datensatz mit den passenden Username und Passwort zurückliefert. 
                        //Schreibt sich aus diesem Datensatz nur die ID! des USERS raus und legt diese auf $id (getRecord liefert Objekt zurück)
                          
    $id $this->model->getRecord("username='" $this->_request->username .
                                 
    "' AND password='" . \md5($this->_request->password) . "'")->id;
                         
                            if (
    $id == 0) {                         
                             
    parent::output("error""Login fehlgeschlagen.<br/> Bitte Login-Daten überprüfen");   
                        } 
                            else if (
    $id != 0) {
                            
    //Sonst weiterleitung in Stock und setzen der ID in die Session.
                            
                            
    header("Location:" WEBROOT "stock.php");
                            
    $_SESSION['id'] = $id;
                            
    parent::output("success""Login erfolgreich.");
                            
                        }
                    }   break;


        }}

  • #2
    Spontane Antwort: Wenn die Login-Daten falsch sind, dann existiert der Nutzer in der Kombination Name/Passwort nicht.

    PHP-Code:
    $id $this->model->getRecord("username='" $this->_request->username .
                                 
    "' AND password='" md5($this->_request->password) . "'")->id
    Warum dann also seinen Datensatz (den es nicht gibt) aus der DB laden und seine ID (die es auch nicht gibt) auslesen wollen?

    PS: Ich könnte mir zudem denken, dass das Script anfällig für SQL-Injections ist, weil du Request-Daten ungeprüft in SQL-Queries einsetzt.

    Kommentar

    Lädt...
    X