Edit: Session starten nicht

Hallo du freundlicher Frischluftverweigerer :morgen: ,
mir tut sich gerade ein mehr oder weniger schwerwiegendes Problem auf:
Ich habe vor, eine „Homepage“ mit direktem Login zu erstellen, sprich die index.php ist zuerst einmal die login.php.
Nunja, warum dann nicht auch alles in eine Datei rein? Gesagt, getan, Loginkontrolle, Sessions, Unterseiten etc. alles eingebunden, eben auch das Login-Formular, dass als Startseite kommen soll.
Als Nicht-angemeldeter soll man die Möglichkeit zum Login, zur Registrierung und zur Anforderung eines neuen Passworts bekommen, und hier liegt derzeit der Hund begraben.
Als Startseite wird die Registrierung geöffnet, obwohl die Seitenvariable $p noch leer sein müsste.
Zum besseren Verständnis hier mein Code, zensier bis auf die Stelle, an der das Problem auftritt:

[code]<?php session_start();?>

<?php //Login-Funktion //Verbindung zur Datenbank //Holen der Benutzerdaten aus Datenbank if($p="login"){ //Holen der Daten mit den POST-Daten //Vergleich der DB-Daten mit den POST-Daten und Start der Session }; //Eingeloggter Bereich else{ if($p="reg"){ echo 'Registrieren - Hier wird noch gebastelt'; } elseif($p="forgot"){ echo 'Passwort vergessen - Hier wird noch gebastelt'; } else{ //Login-Formular -- Sartseite }; }; ?> [/code]

Jetzt meine Frage:
Wie kann es, dass die Seite zum registrieren kommt und nicht, wie eigentlich geplant, das Login-Formular?
Die Variable $p wird ausschließlich in Linkangaben und if-Abfragen verwendet, deshalb meine Verwirrung.

MfG the-xe

Falsch, falsch, falsch!

Wertzuweisung 1x = -> $p='irgendwas’
Vergleichsoperation 2x == -> $p==‘irgendwas’

Außerdem wirst du dein $p vmtl. vorher mit $_GET[‘p’] bzw. POST od. sonst was befüllen müssen, denn hier sind meines Wissens nach register_globals auf off gestellt.

Sauberen und syntaktisch korrekter Programmierstil!

Moin,

if(Bedingung) { Anweisung; }

hinter die geschweiften Klammern gehören schon mal KEINE Semikolons!
Änder das bitte und meld dich dann nochmal, wenn etwas passiert. Im Übrigen musst du $p erst einlesen (per $p = $_GET[‘p’]:wink: Ansonsten wäre die Variable nie gesetzt.

MfG
myPages

[quote=„myPages“]Moin,

if(Bedingung) { Anweisung; }

hinter die geschweiften Klammern gehören schon mal KEINE Semikolons!
Änder das bitte und meld dich dann nochmal, wenn etwas passiert. [/quote]
Das sieht bloß so aus, die erste if-Bedingung ist eine eigene, danach kommt eine neue, das if hab ich bloß rausgekürzt und stattdessen „//Eingeloggter Bereich“ hingetippt

[quote=„myPages“]Im Übrigen musst du $p erst einlesen (per $p = $_GET[‚p‘]:wink: Ansonsten wäre die Variable nie gesetzt.

MfG
myPages[/quote]
Sollt ich mir fürs nächste mal merken, jetzt funktionierts :hail:
Zudem hab ich mal alle Wertzuweisungen innerhalb der ifs in Vergleichsoperatoren (doofes Word :smiley: ) geändert, worans jetzt lag kann ich nicht sagen, vermutlich beides :ps:

Bloß irgentwie will die Session jetzt nicht so wie ich …

:motz: Wie kann ich das umgehen?
Zumal ich es nicht versteh, denn auf einer anderen Seite benutz ich das gleiche Prinzip, und dort läufts reibungslos :neutral_face:
MfG the-xe

Ja, weil sie da ein riesen Sicherheitsscheunentor aufgelassen haben namens register_globals …
Schätzungsweise wird der Fehler irgendwo dort produziert, wo die Session im Spiel ist.

Und nein hinter if ( ) { } gehört KEIN Semikolon! Du fasst mit { } einen Anweisungsblock zusammen und der endet nunmal mit } - noch ein Semikolon zu setzen, mag zwar funktionieren, ist aber a) unnötig und b) schlechter Stil.

MfG
myPages

[quote=“myPages”]Ja, weil sie da ein riesen Sicherheitsscheunentor aufgelassen haben namens register_globals …
Schätzungsweise wird der Fehler irgendwo dort produziert, wo die Session im Spiel ist.[/quote]
Die erwähnte Seite liegt ebenfalls auf bplaced, bloß unter einem anderen Nick, deshalb kann ichs nicht verstehen. :astonished:

Moin,

ohne jetzt den ganzen Funktionskrams von dir zu kennen, würde ich mir die Frage stellen, ob du irgendwo etwas wie session_register(); oder so stehen hast und ob du alle Variablen aus der Session mit $_SESSION[“variablennamen”]; aufrufst.

Wir brauchen definitiv mehr Code, um dir helfen zu können. Vergleiche auch bitte die beiden Codes miteinander - vllt. gibt es irgendwo einen Schreibfehler o.Ä. - die Server hier sind gleich konfiguriert, d.h. was auf dem einen läuft muss auch auf dem anderen laufen können :slight_smile:

Das deutet jedenfalls darauf hin, dass du irgendetwas benutzt, dass seit PHP 4.2.3 rausgeflogen ist und eventuell hast du auch noch so etwas stehen: $_SESSION[“site”] = $p; (nur als Beispiel - was wiederum eine globale Variable wäre und so nicht funktioniert).

MfG
myPages

Kannst ja den Vorschlag aus der Fehlermeldung probieren:

<?php ini_set('session.bug_compat_warn',0); ini_set('session.bug_compat_42',0); session_start();
bzw. @session_start(); schreiben.

Damit sollte zumindestens die Fehlermeldung verschwinden.

//edit (mal oben :ps: );[quote=„myPages“]
Das deutet jedenfalls darauf hin, dass du irgendetwas benutzt, dass seit PHP 4.2.3 rausgeflogen ist und eventuell hast du auch noch so etwas stehen: $_SESSION[„site“] = $p; (nur als Beispiel - was wiederum eine globale Variable wäre und so nicht funktioniert).

MfG
myPages[/quote]
Das scheints zu sein, wie kann ich denn sowas umgehen, bzw. eine aus einer DB ausgelesene Variable als Session zu setzen?

Die Sessions sollten mit folgender Funktion gesetzt werden:

function login($login) { $_SESSION["username"]=$_POST['username']; $_SESSION["password"]=$_POST['password']; $_SESSION["status"]=$status; };
Der Code wird bloß ausgeführt, wenn man sich einloggt, wenn man z.B. schon eingeloggt ist, heißt, die Sessions schon gesetzt sind, wird der Teil übersprungen.

Auf der anderen Seite gebe ich zwar bloß eine Session an, aber was mit einer Variablen funktioniert, muss doch auch mit mehreren zu schaffen sein.
Hier der Code der funktionierenden Seite:

function login($login) { $_SESSION["username"]=$_POST['user']; };

Die Sessions sollten eigentlich gestartet werden, dort liegt aber das Problem, sie werden einfach nicht gestartet, weshalb im Nachhinein auch keine Überprüfung mehr stattfinden kann.
Dennoch hier einmal der Code zur Überprüfung der Session:

$result = mysql_query("SELECT ID,username,password,alli,status FROM member WHERE username like '".$_SESSION["username"]."' "); $data = mysql_fetch_array ($result); $ID = $data["ID"]; $user = $data["username"]; $passwort = $data["password"]; $alli = $data["alli"]; $status = $data["status"];

if( $_SESSION["username"]==$user && $_SESSION["password"]==$password && $_SESSION["status"]==$status) { echo' ... '; } else ...

Woher kommt das $status genau? Auch aus der MySQL-Abfrage? Die MySQL-Abfrage würde ich mal so schreiben:

while($data = mysql_fetch_array ($result)) {
  $ID = $data["ID"];
  $user = $data["username"];
  $passwort = $data["password"];
  $alli = $data["alli"];
  $status = $data["status"];   
}

MfG
myPages

Ich hab mich jetzt einfach dazu beschlossen, status nicht als Session zu setzen, sondern, da ich den sowieso jedesmal abfrage, direkt die Variable benutze, kommt eigentlich aufs gleiche raus.
Jetzt funktionierts auch einigermaßen, bloß jetzt steckt wieder irgentwo der Wurm drinn, naja ist wohl doch keine so gute Idee gewesen, den Code nachts um halb 3 zu schreiben, zumal wenn man keine Ahnung hat :smiley:

Wenn ich wieda feststecke, nerv ich wieder :winke:
MfG the-xe