Hello,
Warum liefert die "is_logged()"-Funktion (allermeistens) kein Ergebnis, wenn man sie im selben Script aufruft, obwohl der User ja nun "angemeldet" ist?
Wenn das aller relevante Code ist und du nicht zu viel gekürzt hast, ...
Ich habe daran leider ganz schön lange geknabbert, aber die Lösung ist ganz verblüffend einfach.
... dann sieht man auf den ersten Blick, dass etwas nicht stimmt, wenn man eine IDE (wie PhpStorm) verwendet. Die zeigt nämlich an, dass die Variablen $qry_login und $qry_is_logged geschrieben aber nicht genutzt werden. Außerdem, dass für zwei Funktionen und eine Konstante die Definition fehlt, aber die wirst du ja bei dir drin haben.
Du bist schon ziemlich nah dran.
Die Konstanten sind selbstverständlich vorhanden und die Funktion für die Datenbankverbindung auch. Da liegt auch nicht der Fehler. Es ist ein logischer Fehler.
Wenn der User sich mittels "login()" gerade angemeldet hat und dann im selben Script nur kurze Zeit später "is_logged()" aufgerufen wird, dann ändert das Update-Statement in der is_logged()-Funktion nichts mehr im Datensatz, da die Daten gleich bleiben, es sei denn, dass gerade ein Sekundensprung stattgefunden hat...
Das führt dazu, das keine Zeile der Datenbank verändert wurde, also mysqli_affected-rows() eine 0 als Ergebnis liefert.
Um diesem Missstand entgegen zu wirken und die Programmierung nicht zu kompliziert machen zu müssen, habe ich die Spalte updatecount
eingeführt, die bei jedem Update um eins hochgezählt wird. Das garantiert die Änderung und mysqli_affected_rows() ist wieder zufrieden.
updatecount
wird für den konkurrierenden Betrieb ohnehin benötigt, da man bei verbindungslosem (zustansdlosem) Betrieb so am einfachsten feststellen kann, ob zwischen dem Lesen eines Datensatzes und dem Zurückschreiben der geänderten Daten eine Änderung stattgefunden hat. Die Splate ist also keinesfalls überflüssig.
Ich werde, wenn daran interesse besteht, das "Login-Modul" gerne hier veröffentlichen, wenn es fertig ist. Ein paar Details müssen noch eingebaut werden.
Aber: kleine Ursache, lange Suche, bis die kleine Birne endlich geglüht hat :-)
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg