OOP if und else Fehler
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
angabe
anspringen
array
bedingung
code
deutsche wort
element
falschen namen
fehler
formular
glauben
karpfen
null
part
passieren
sagen
server
typ
url
wert null
-
Ich arbeite grade ein bisschen an einem Login mit mysql und mache das natürlich oop mit php.
Ich habe einmal:
Mysql.class.php
<?php class Mysql { var $Server; var $User; var $Passwort; var $DB; private $connection = array(); private function DB_connect($Server,$User,$Passwort,$DB) { $this->connection["0"] = mysql_connect($this->Server,$this->User,$this->Passwort) or die("1".mysql_error()); $this->connection["1"] = mysql_select_db($this->DB) or die("2".mysql_error()); } function __destruct__() { $this->DB_connect($this->Server,$this->User,$this->Passwort,$this->DB); return $this->connection; } } ?>
Und dann noch:
Mysql_login.class.php
<?php include 'Mysql.class.php'; class Mysql_login extends Mysql { var $Pass_eingabe; var $Pass_vergleich; var $Nutzer_eingabe; var $Nutzer_vergleich; var $Table; var $erg; var $error = array(); private $sql_befehl; private $sql_erg; function __construct() { } private function Daten_auslesen($Table,$Nutzer_eingabe,$DB) { $this->sql_befehl = "SELECT * FROM `".$this->DB."`.`".$this->Table."` WHERE `name` = '".$this->Nutzer_eingabe."'"; $this->sql_erg = mysql_query($this->sql_befehl) or $this->error["1"] = false if (count($this->error) == 0) { while($this->erg = mysql_fetch_array($this->sql_erg,MYSQL_ASSOC)) { if($this->erg["ID"] != "") { return $this->erg["password"]; } else { echo "<div id=\"Fehler\">Du hast eine inkorrekte angabe gemacht oder uns ist ein Fehler unterlaufen</div>"; return false; } } } else { echo "<div id=\"Fehler\">Du hast eine inkorrekte angabe gemacht oder uns ist ein Fehler unterlaufen</div>"; return false; } } function Daten_vergleichen($Pass_eingabe) { $this->Pass_vergleich = $this->Daten_auslesen(); if($this->Pass_vergleich == md5($this->Pass_eingabe)) { return true; } else { return false; } } private function Daten_schreiben() { } function __destruct() { $this->__destruct__(); $this->Daten_auslesen($this->Table, $this->Nutzer_eingabe, $this->DB); } } $mysql = new Mysql_login(); $mysql->Server = "localhost"; $mysql->User = "root"; $mysql->Passwort = "**********"; $mysql->DB = "**********"; $mysql->Table = "**********"; $mysql->Nutzer_eingabe = "**********"; // Name wird später über Formular gewählt ?>
So wenn ich das nun starte und einen Falschen namen wähle.
wird das
if($this->erg["ID"] != "") { return $this->erg["password"]; }
nicht ausgeführt, weil $this->erg["ID"] den Wert null hat.
Aber irgendwie wird
else { echo "<div id=\"Fehler\">Du hast eine inkorrekte angabe gemacht oder uns ist ein Fehler unterlaufen</div>"; return false; }
auch nicht ausgeführt.
Kann mir jemand sagen woran das liegt?
PS: Es wird keine Fehlermeldung angegeben. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Ersteres wird eben schon ausgeführt, weil NULL eben !="" ist. Da aber für NULL wohl nichts hinterlegt wird sollte einfach gar nichts passieren.
-
Probier mal folgendes:
if($this->erg["ID"] !== "")
Mein Grippekopf vermutet, dass du auch Typen beachten musst
Probiers mal
Liebe Grüße -
karpfen schrieb:
Ersteres wird eben schon ausgeführt, weil NULL eben !="" ist. Da aber für NULL wohl nichts hinterlegt wird sollte einfach gar nichts passieren.
NULL = ""
ich habs ausprobiert und es funktioniert soweit auch alles gut außer, dass dieses Else nicht anspringt.
also wie der karpfen schon gesagt hat es passiert nichts es wird kein wert zurrückgegeben aber es wird auch keine Meldung ausgegeben. Wie ist das möglich? ich meine bei if/else wird doch immer entweder das eine oder das ander ausgeführt, oder?
PS: @ggamee
Es hat ncihts gebracht. leider
Beitrag zuletzt geändert: 26.11.2011 22:44:12 von nilsmargotti -
Ich glaube, dass der erste Part der Bedingung anspringt, du das aber nicht merkst, weil
kein Element "password" enthält, da du in deiner Datenbanktabelle das deutsche Wort "passwort" verwendet hast. Somit bekommst du nichts zurück und der else-Part wird nicht ausgeführt.$this->erg
Beitrag zuletzt geändert: 26.11.2011 23:38:13 von drafed-map -
drafed-map schrieb:
Ich glaube, dass der erste Part der Bedingung anspringt, du das aber nicht merkst, weil
kein Element "password" enthält, da du in deiner Datenbanktabelle das deutsche Wort "passwort" verwendet hast. Somit bekommst du nichts zurück und der else-Part wird nicht ausgeführt.$this->erg
Ich habe mich nicht vertippt. Das kann ich schon mal so sagen und wie soll die erste wahl anspringen ohne, dass sie True zurück gibt?
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage