beetFreeQ Geschrieben 26. Juli 2001 Geschrieben 26. Juli 2001 Moin Leute... Ich hab da (mal wieder) ein PHP-Problem... Also, ich hab eine User-Verwaltung, die auf MySQL basiert. Dort werden Benutzername, E-Mail, Passwort und einige andere Dinge gespeichert! Jetzt soll man z.B. das Passwort ändern können. Beim Login wird der Benutzername in eine Session geschrieben. Diesen Namen will ich daher in eine Variable speichern und über diese Variable in der Datenbank den Datensatz heraussuchen, der dem angemeldeten Benutzer entspricht, um dort sein Passwort zu ändern... Das ganze funktioniert aber nicht, da kein passender Datensatz gefunden wird (obwohl er existiert)! Mit einem konstanten Wert, der dem Benutzernamen entspricht, funktioniert's, und es klappt auch, wenn ich der Variable anstatt des Session-Wertes den Benutzernamen als Text selbst übergebe... So langsam verzweifle ich, weiß echt nicht weiter! Kann es sein, daß MySQL es nicht mag, wenn man eine Variable benutzt, die wiederum den Inhalt einer anderen Variable enthält? Bin für jeden Tip dankbar - vielleicht weiß ja auch jemand ne andere Idee, wie ich das Vorhaben umsetzen kann... Zitieren
markus_welsch Geschrieben 27. Juli 2001 Geschrieben 27. Juli 2001 Also wenn ich das richtig verstanden habe brauchst Du ja nur ein Login-Modul zu schreiben + ein Modul zur Passwortänderung. In diesem Fall würde ich ein Login-Formular erstellen und dort Benutzername/Passwort abfragen, diese Daten (Passwort MD5-verschlüsselt) mit einem Eintrag in der Datenbank vergleichen => falls der Login korrekt ist in eine Tabelle die Session-ID hineinschreiben und die User-ID (von der User-Tabelle) ... dass sollte problemlos funktionieren ) Zitieren
beetFreeQ Geschrieben 27. Juli 2001 Autor Geschrieben 27. Juli 2001 <BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Zitat:</font><HR>Original erstellt von m0rpheus: <STRONG>Also wenn ich das richtig verstanden habe brauchst Du ja nur ein Login-Modul zu schreiben + ein Modul zur Passwortänderung. In diesem Fall würde ich ein Login-Formular erstellen und dort Benutzername/Passwort abfragen, diese Daten (Passwort MD5-verschlüsselt) mit einem Eintrag in der Datenbank vergleichen => falls der Login korrekt ist in eine Tabelle die Session-ID hineinschreiben und die User-ID (von der User-Tabelle) ... dass sollte problemlos funktionieren )</STRONG> Zitieren
markus_welsch Geschrieben 27. Juli 2001 Geschrieben 27. Juli 2001 <BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Zitat:</font><HR>Original erstellt von beetFreeQ: <STRONG> Mit ner User-ID anstatt des Usernamen hab ich's noch nicht probiert... - allerdings hat bisher kein Wert funktioniert, den ich verwenden wollte... Wieso soll die Session-ID denn in eine Tabelle geschrieben werden? Verstehe ich jetzt nicht so ganz... Ich dachte da eher, ich schreib die User-ID in die Session, aber das wäre ja wieder das selbe, wie der Username - nur halt ein Integer statt eines Strings...</STRONG> Zitieren
beetFreeQ Geschrieben 27. Juli 2001 Autor Geschrieben 27. Juli 2001 <BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Zitat:</font><HR>Original erstellt von m0rpheus: <STRONG> Also ich meinte eine User-ID zusätzlich ... nicht anstatt dem Usernamen. Diese User-ID mit auto_increment, ... dann schreibst Du die User-ID und die Session-ID in eine neue Tabelle z. B. user_online ... beim ausloggen löschst Du diesen Eintrag einfach wieder ) Nun alles verstanden?</STRONG> Zitieren
markus_welsch Geschrieben 27. Juli 2001 Geschrieben 27. Juli 2001 Paste hier doch mal Deine Datenbankstruktur... dann kann ich Dir besser helfen! ) Zitieren
beetFreeQ Geschrieben 28. Juli 2001 Autor Geschrieben 28. Juli 2001 Biddeschön: CREATE TABLE user ( ID int(11) NOT NULL auto_increment, name varchar(20) NOT NULL, passwort varchar(20) NOT NULL, email varchar(30) NOT NULL, angemeldet datetime DEFAULT '0000-00-00 00:00:00' NOT NULL, logins int(11) DEFAULT '0' NOT NULL, lastlogin datetime DEFAULT '0000-00-00 00:00:00' NOT NULL, class varchar(10) NOT NULL, PRIMARY KEY (ID) ); Die Felder haben folgende Funktionen: User-ID (Primary Key) Name (der Benutzername) Passwort (das Passwort in verschlüsselter Form) email (E-Mail-Adresse) angemeldet (Datum und Uhrzeit der Anmeldung) logins (Anzahl bisheriger Logins) lastlogin (Datum und Uhrzeit des letzten Logins) class (Art des Benutzers zur Definition der Benutzerrechte, wie User, Admin etc.) Hier einmal der Quelltext einer der betroffenen PHP-Dateien: <?php // variablen definieren $titel = "main - account - e-mail ändern"; $baum[1] = "<a href=\"m_start.php\">start</a>"; $baum[2] = "<a href=\"c_account.php\">account</a>"; $baum[3] = "e-mail ändern"; $ok = ""; $email = $HTTP_POST_VARS["email"]; $name = $HTTP_SESSION_VARS["name"]; /* wenn $email nicht leer ist, wurde das formular bereits gesendet und kann bearbeitet werden. ist die variable leer, wird zum else gesprungen. */ if($email != "") { // mysql-verbindung herstellen und user ueberpruefen $sql = "SELECT * FROM user WHERE name='$name'"; include ("../config/mysql_conn.php"); mysql_select_db($dbname,$conn); $ergebnis = mysql_query($sql,$conn); $user = mysql_fetch_array($ergebnis); // ist der user richtig, wir die neue e-mail in die db eingetragen if($user[name] != "") { $sql2 = "UPDATE user SET email='$email' WHERE name LIKE '$user[name]' AND passwort=PASSWORD('$passwort')"; mysql_query($sql2,$conn); mysql_close(); $ok = "ja"; } else $meldung = "<p class=\"b\">du bist nicht angemeldet! melde dich erst an und ändere dann deine e-mail-adresse!</p>"; } include ("includes/mainhead.php"); ?> <h2>e-mail ändern</h2> <?php if($ok == "ja"): ?> <p>änderung war erfolgreich!</p> <p><a href="c_account.php">account</a></p> <?php else: echo $meldung; ?> <p>wenn sich deine e-mail-adresse geändert hat, kannst du sie hier für deinen freeQnet-account eintragen.</p> <form method="post"> <table border="0" cellpadding="0" cellspacing="10"> <tr> <td> email:<br> <input type="text" name="email" size="10" maxlength="30"> <input class="button" type="submit" value="ändern"> </td> </tr> </table> </form> <?php echo "<a href=\"$url\">zurück</a>"; endif; include ("includes/mainfoot.php"); ?> Hier wird ein Formular ausgefüllt, und an sich selbst geschickt. Am Anfang steht eine Überprüfung, ob die Formular-Variable einen Inhalt hat, ist das der Fall, dann wird das Script ausgeführt, andernfalls wird erstmal das Formular angezeigt. Um zu prüfen, ob die Änderungen erfolgreich waren, wird die Variable $ok am Anfang leer erzeugt und nur dann auf "ja" gesetzt, wenn der Datenbankeintrag erledigt ist. In dem Fall wird eine Bestätigung eingeblendet, in allen anderen Fällen erscheint das Formular und ggf. eine Fehlermeldung ($meldung). Hoffe, das hilft irgendwie. Werte aus einem Formular verarbeitet die Tabelle übrigens auch problemlos, nur eben die Werte aus der Session nicht. Dabei sehe ich eigentlich keinen wesentlichen Unterschied zwischen HTTP_POST_VARS und HTTP_SESSION_VARS... Zur Not würde ich in diesem Formular auch zusätzlich Benutzername und Passwort abfragen, um die Session zu umgehen, aber das wäre ja irgendwie nicht grad der Sinn einer Session... Zitieren
markus_welsch Geschrieben 28. Juli 2001 Geschrieben 28. Juli 2001 Also ich würde einfach ne selbstgenerierte Session-ID an die Links und an den Post dranhängen... dass kannst Du ja problemlos machen. Zur Erzeugung einer Session-ID kannst Du ja md5 (uniqid (rand())) benutzen ... also z. B. $sid = md5 (uniqid (rand())); Dann hängst Du $sid an Deine Formular-Post-URL bzw. an "normale" Links einfach dran. In den Scripts suchst Du nach der Session-ID in dem User-table der Datenbank ... dann kannst Du problemlos alles auslesen ) - Falls die Session-ID nicht in der Datenbank vorhanden ist leitest Du den User einfach auf eine Login-Seite weiter ) Bei der Logout-Funktion die generierte Session-ID aus der Datenbank entfernen... ) Zitieren
beetFreeQ Geschrieben 29. Juli 2001 Autor Geschrieben 29. Juli 2001 Danke für deine ganzen Tips! Aber das Problem hat sich glücklicherweise grad gelöst! Der Teufel steckte mal wieder in einem wichtigen aber kleinen Detail, das bei meinem geposteten Quelltext garnicht so klar wurde: Ich hab die Session nämlich in der Datei "mainhead.php" initialisiert. Dummerweise wird diese Datei aber erst nach dem Datenbank-Zugriff includiert. Klar, daß es da noch keine Session-Variable geben kann... Trotzdem nochmal danke, aber ich glaub, ich bleib erstmal bei meiner doch etwas einfacheren Lösung... Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.