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:
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:
Database:
User_controller:
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;
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
$query= parent::buildQuery(self::TABLE_NAME,$where);
return parent::getObject($query);
}
public function getRecords ($where = "", $ordering= ""){ //Abfrage mehrerer Datensätze auf einmal
if($ordering == ""){
$ordering="id";
}
$query= parent::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;
}
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);
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;
}}
Kommentar