Also bin zur Zeit am programmieren eines “Clanregisters” und nu hab ich ein Adminmenu programmiert.
Der Login funktioniert mit Session, aber wenn ich richtige Logindaten eingebe, speichert es nicht die Session-Variablen.
hier mal mein Script:
[code]<?
session_start();
// DB verbinden
include ('includes/config.php');
// Status prüfen
if($s_user_s == "logged")
{
echo '<script type="text/javascript">
session_register ist veraltet und sollte nicht mehr genutzt werden.
Und “alle” Datensätze mit dem Usernamen auszulesen, und dann in einer Schleife darüber zu laufen (wie viele soll’s denn davon geben, etwa mehr als einen?), ist im allgemeinen auch Unfug.
Man macht eine Abfrage, in der man nach “allen” Datensätzen suchen lässt, bei denen Username und Passwort mit den eigegebenen übereinstimmen - und zieht dann aus der Anzahl gefundener Datensätze den passenden Schluss.
Und MD5 kennt MySQL auch, das braucht man also auch nicht noch separat in PHP anwenden.
//edit: zu langsam…
ich sehe zwar keinen fehler im script aber es könnte sein das die funktion session_register inzwischen aus php entfernt wurde bzw nicht mehr funktioniert.
[quote]Warnung
Diese Funktion ist seit PHP 5.3.0 DEPRECATED (veraltet) und wird in PHP 6.0.0 ENTFERNT. Sich auf diese Funktion zu verlassen ist in keiner Weise empfehlenswert.
php-manual[/quote]
siehe hier
normalerweise verwendet man für session variabeln das superglobale $_SESSION array.
tut zu sessions gibt hier
in Sachen php steh ich noch in den Kinderschuhen und lerne nur von tutorials usw…
Naja was kann ich durch Session ersetzten? Cookies etwa?
[quote]Man macht eine Abfrage, in der man nach “allen” Datensätzen suchen lässt, bei denen Username und Passwort mit den eigegebenen übereinstimmen - und zieht dann aus der Anzahl gefundener Datensätze den passenden Schluss.[/quote] Wie soll ich es sonst machen, kenne keine andere Möglichkeit
[quote]Und MD5 kennt MySQL auch, das braucht man also auch nicht noch separat in PHP anwenden.[/quote] Ich muss doch erstmal dass eingegebene Passwort in md5 umwandeln und dann in die DB reinschreiben…
Warning: Cannot modify header information - headers already sent by (output started at /users/ahrtas/www/register/control/includes/config.php:1) in /users/ahrtas/www/register/control/login.php on line 11
Das liegt an der header()-Weiterleitung (Die hab ich genutzt, da JS nicht zuverlässig ist).
Ich habe jetzt aber nicht mehr die Zeit, eine Alternative zu überlegen.
Ändere einfach die header-Zeilen in eine Link-Weiterleitung um.
Genau so, wie du auch Sessions ohne register_globals speicherst - register_globals war immer schon die Lösung für einfachen Code. Die Beschäftigung mit Global-Arrays ist Pflicht, vor allem wo es register_globals (zum Glück) nicht mehr lange geben wird - Post- und Get-Daten findest du ihn den Superglobalsvariablen $HTTP_POST_VARS[‘formularfeldname’], $HTTP_GET_VARS[‘formularfeldname’] bzw. $HTTP_REQUEST_VARS[‘formularfeldname’] für beide zusammen.
Ahm habt ihr nen Link zu ner Seite mit Global-Arrays, dass ich eben nicht immer hier fragen muss sondern auf der Seite schaue und wenn ich nicht weiter weis dann erst hier im Forum frage…?
Dann muss ich halt nich wegen jedem kleinen Problem euch damit nerven.
Nun mein Problem ist, wenn man nicht eingeloggt ist, sollte eigentlich der link „Eintragen“ eingeblendet werden (ganz unten im Script), tut es aber nicht… ich kann soweit keinen Fehler erkennen, aber dieses Problem ist bei mehreren Dateien/Scripten der Fall mit dem gleichen „Aufbau“ also komplett gleiche „Logindaten prüfen“-Funktion.
} else { echo '<a href="add.php" class="link"><b>Eintragen</b></a>'; }
} else { echo '<a href="add.php" class="link"><b>Eintragen</b></a>'; }
} else { echo '<a href="add.php" class="link"><b>Eintragen</b></a>'; }
}
Warum gibt’s hier gleich drei Stellen, an denen der Link möglicherweise ausgegeben werden könnte?
if($_SESSION['logged_in'] == 1){
if($pw_verschluesselt == $row->password){
Wenn ich bereits als eingeloggt in der Session drin stehe - warum willst du dann noch mal das Passwort überprüfen?
Und wenn ich noch nicht eingeloggt bin - dann ist die erste Bedingung nicht erfüllt, also wird der Passwortvergleich dann überhaupt nicht durchgeführt …
… erscheint dir das nicht ein bisschen unlogisch?
Du solltest mit ein bisschen mehr Logik an die Sache rangehen.
Derzeit scheinst du dir irgendwas zusammenzuscripten - wenn’s dann durch Zufall irgendwie läuft, dann fein, und sonst - grosse Ratlosigkeit.
So einen Ablauf kann man sich auch im groben vorher mal auf Papier aufmalen - als Flussdiagramm oder Pseudocode.
Dann fällt es auch leichter, das anschliessend in ordentlichen Code umzusetzen - als wenn man gleich drauf los programmiert, ohne sich vorher ausreichend Gedanken um einen sinnvollen und in sich logischen Ablauf gemacht zu haben.
drei if-anfragen = drei else stellen mit dem link…
1-if. also bei dem ersten wird der login-status überprüft, wenn falsch dann kommt der link
2-if. wenn 1-if korrekt ist, aber das passwort falsch, kommt trotzdem der link
3-if. wenn 1-if und 2-if korrekt sind, aber Account-Typ falsch, dann kommt trotzdem der link
Ergebnis = Wenn aber alle drei richtig sind, werden die Links für den Userlogin angezeigt.
Wenn die Login-Überprüfung an allen drei if-anfragen scheitert, wird nicht der link in den else angezeigt(garnichts wird angezeigt), ist man aber eingeloggt, werden die Links für den Userlogin einwandfrei angezeigt.