Frage von RaceShafter, 44

Wo liegt in PHP hier der Fehler?

Beim registrieren wird mir, egal was ich als Mail eingebe, angezeigt: "Die angegebene E-Mail-Adresse ist bereits registriert.." Aber das kann nicht. Was mache ich falsch? Code: http://pastebin.com/hRnFVPfd

Antwort
von happyfish2, 20

Er geht in den else-Zweig, weil der Query funktioniert. Ob da nun ein sinnvoller Wert gefunden wird oder nicht wird da nicht geprüft. Der Query ist nicht fehlerhaft und daher ist $queryname auch gesetzt.

Antwort
von maximilianus7, 11

1.  if(isset($sent)){
$sent  ist nicht definiert, also wird immer der else zweig angestuert.

2. $querymail = mysqli_query
hast du falsch verstanden: es wird nicht zurückgemeldet ob er was gefunden hat, sondern ein gültiges objekt, welches die treffermenge representiert. nur wenn das sql-statement fehlerhaft ist (syntaxfehler oder tabelle oder spalte existiert nicht), wird ein boolean FALSE zurückgegeben.

$querymail kann auch eine leere menge zuückliefern. das merkst du dann beim mysqli_fetch: das gibt entweder ein array der columns oder FALSE zurück.


Antwort
von Gutfrager156, 24

Wenn ich das richtig sehe, geht er inden Zweig dann rein, wenn !$querymail gesetzt ist. Lass Dir  !$querymail doch mal ausgeben und schau, was da drin steht.

Kommentar von RaceShafter ,

Wenn ich es als Echo ausgeben möchte, dann steht da:
Catchable fatal error: Object of class mysqli_result could not be converted to string in C:\Users\Tom\Documents\XAMPI\htdocs\register.php on line 49

Ich schaue kurz, was passiert, wenn ich row auslese..

Kommentar von RaceShafter ,

Habe es versucht auszulesen:

$plsdelete = mysqli_fetch_row($querymail);
echo $querymail[0];

Aber es wird nichts angezeigt, so, wie es auch sein sollte, aber trotzdem kann die Registrierung nicht beendet werden.

Antwort
von RakonDark, 17

der Fehler kommt bei

$querymail = mysqli_query($dbconnect, "SELECT `email` FROM `newchat` WHERE `email` = '$regmail'");
        if (!$querymail) {

gibt eigentlich nur die möglichkeit das der query als true zurück kommt .

ergo könnte es sein das der select mit leerer $regmail etwas findet .

ich finde diese logik auch nicht schön , den es sollte eher geprüft werden ob eine ergebniszeile zurück kommt und nicht ob ein fehler vorliegt . den auch ein select auf 0 zeilen ist ja durchaus ein Ergebnis was true ist .

mysqli_num_rows($result) > 0 


find ich praktischer

Kommentar von RaceShafter ,

Also eher so:

if (!(mysqli_num_rows($queryname)) > 0 ){

//Was passiert, wenn Daten noch frei sind

}else{

//Was passiert, wenn Daten schon vergeben sind

}

Ist das so eher richtig?

Kommentar von RakonDark ,

ja , den ein query false gibt es nur wenn der query misslingt ,

wenn aber als result ein leeres array kommt ist das nicht false .

deswegen gibt es ja in den beispielen immer nach dem erfolgreichen query eine while schleife mit entsprechender result  -> zeilen zu verarbeiten . sind keine zeilen vorhanden wird die while schleife gar nicht erst ausgeführt . siehe  (

$row = $result->fetch_object()

)

bei dir müsstest du also den
$querymail durch mysqli_num_rows umwandeln lassen in die anzahl an zeilen die gefunden wurden :)

dein beispiel würde dann eine email als gefunden ansehen wenn mindestens 1 zeile als rückgabe vorhanden ist .

Kommentar von RaceShafter ,

Okay, vielen dank. Hat funktioniert :D

Antwort
von KingTamino, 24

Funktioniert dein DB Zugriff auch wirklich?
Hab aktuell kb deinen Code durchzuackern (by the way... Arbeitsauftrag...)

Versuch einfach das klassische Debuggen... Oder kommentiere teile aus und lass dir stattdessen als text einblenden in welche Abfrage du grade reingesprungen bist

Kommentar von RaceShafter ,

Ja der Zugriff funktioniert.

Keine passende Antwort gefunden?

Fragen Sie die Community