$PHP_SELF und sessionvariablen

04/08/2012 - 14:39 von Heiko Rompel | Report spam
Moin,

da bin ich wieder.
Neues Problem, neuer Thread.

Wenn ich mittels Debugger (RadPHP) mir den Inhalt von nachfolgenden
Variablen anschaue, fallen mir zwei Sachen negativ auf:

1. die @session_register werden nicht gefüllt
2. nach dem ausführen der "echo"-Zeile und dem anschließenden "break"
sind Alle Variablen leer.

Code $data = mysql_fetch_array($result);

$databasepw = $data['pw'];
$passwordmd5 = (md5("$password"));


if(($passwordmd5 == $databasepw) && ($databasepw > '')){

$uname = $username;
$useremail = $data['email'];
$userstatus = $data['status'];
$userflags = $data['flags'];


@session_register(userflags);
@session_register(uname);
@session_register(useremail);
@session_register(userstatus);
@session_register(userflags); // für debug

echo("<script
language=\"javascript\">location.replace('".$PHP_SELF."?goto=liste')</script>");

Code Wenn das Script mittels "liste" aufgerufen wird, werden die Inhalte der
Variablen aber benötigt.

$PHP_SELF war ursprünglich so definiert:
$PHP_SELF = 'exschueler.php';

und nach dem abarbeiten von Fehlertexten und dem Lesen von Tipps, ist es
jetzt so definiert:
$PHP_SELF = $_SERVER['PHP_SELF'];

Das in der letzten Definition zweimal "PHP_SELF" enthalten ist, kommt
mir ulkig vor.

Aber, vielleicht verstehe ich einfach zuwenig von PHP.

Wie rette ich die Variablen Inhalte in den neuen Aufruf?

Gruß HEiko
 

Lesen sie die antworten

#1 Carsten Wiedmann
04/08/2012 - 15:29 | Warnen spam
Am 04.08.2012 14:39, schrieb Heiko Rompel:
Moin,

da bin ich wieder.
Neues Problem, neuer Thread.

Wenn ich mittels Debugger (RadPHP) mir den Inhalt von nachfolgenden
Variablen anschaue, fallen mir zwei Sachen negativ auf:

1. die @session_register werden nicht gefüllt



session_register() sollte man vielleicht nicht gerade nehmen (gibt es ab
5.4 nicht mehr). Lieber ein einmaliges session_start() an den Anfang der
Scripts und direkt das $_SESSION - Array benutzen.


2. nach dem ausführen der "echo"-Zeile und dem anschließenden "break"
sind Alle Variablen leer.

Code


hier also ein:
| session_start();

an den Anfang des Codes.


$data = mysql_fetch_array($result);

$databasepw = $data['pw'];
$passwordmd5 = (md5("$password"));


if(($passwordmd5 == $databasepw) && ($databasepw > '')){

$uname = $username;
$useremail = $data['email'];
$userstatus = $data['status'];
$userflags = $data['flags'];


@session_register(userflags);
@session_register(uname);
@session_register(useremail);
@session_register(userstatus);
@session_register(userflags); // für debug



hier dann:
| $_SESSION['uname'] = $username;
| $_SESSION['useremail'] = $data['email'];
| $_SESSION['userstatus'] = $data['status'];
| $_SESSION['userflags'] = $data['flags'];


echo("<script
language=\"javascript\">location.replace('".$PHP_SELF."?goto=liste')</script>");


Code > Wenn das Script mittels "liste" aufgerufen wird, werden die Inhalte der
Variablen aber benötigt.

$PHP_SELF war ursprünglich so definiert:
$PHP_SELF = 'exschueler.php';

und nach dem abarbeiten von Fehlertexten und dem Lesen von Tipps, ist es
jetzt so definiert:
$PHP_SELF = $_SERVER['PHP_SELF'];



In der Zeile kannst du auch direkt $_SERVER['PHP_SELF'] benutzen,
anstatt $PHP_SELF (ist wohl ein Code für das alte register_globals?) zu
definieren. Oder kommt das noch öfters vor?

Auch solltest du die Session-ID mit übermitteln. z.B.:
| printf(
| '<script language="javascript">'
| .'location.replace("%s?goto=liste%s")'
| .'</script>',
| $_SERVER['PHP_SELF'],
| (SID != '' ? htmlspecialchars('&'.SID) : '')
| );


Das in der letzten Definition zweimal "PHP_SELF" enthalten ist, kommt
mir ulkig vor.

Aber, vielleicht verstehe ich einfach zuwenig von PHP.

Wie rette ich die Variablen Inhalte in den neuen Aufruf?



Auf den Inhalt der Session-Daten greifst du dann beim neuen Aufruf eben
über das $_SESSION-Array zu. z.B.:
| session_start();
| echo $_SESSION['uname'];



Ansonsten:


Gruß HEiko



Gruß,
Carsten

Ähnliche fragen