PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : SESSION - Frage



MolLy
08.06.2010, 18:07
Hallo,
ich versuche mich gerade in SESSIONs und hab da ein kleines Problem.
Beim Loginformular hab ich soweit keine Probleme...
Zur Zeit hab ichs noch einfach, sprich


if($username=="test" AND $kennwort=="test"){
$_SESSION['einloggen'] = TRUE}

Und so weiter. Das ging eigentlich alles.Bei richtigen Daten kommt dann ein echo und eine Weiterleitung zu einer anderen Seite.
Dort habe ich ebenfalls mit Sessions gearbeiten. Heißt, wenn man im Login Formular richtige Daten eingegeben hat ($_SESSION['einloggen']=TRUE), springt man auf die andere Seite , wo sich die gleich SESSIONs Variable befindet.
Hier kurz der Code der zweiten Seite:



<?php
session_start();
if($_SESSION['einloggen'] == TRUE){
echo'EINGELOGGT';
}
else{
echo'Kein Zugriff';
}


?>

Soweit auch alles gut.
problem nur, wenn ich die zweite seite aufrufe, ohne eingeloggt zu sein bekomm ich einen Error, mit der aussage, dass "einloggen" nicht bekannt sei.

Notice: Undefined index: einloggen in /var/www/access.php on line 3Wie kann ich dies lösen?


Danke! :)

Sorry wegen den Komischen Satzkonstruktionen...

GregorSamsa
08.06.2010, 18:22
Das ist kein Error, das ist nur eine Notiz, dass die Variable nicht bekannt ist.

Pack mal an den Anfang von dem PHP Script ein
error_reporting(E_ALL ^ E_NOTICE);

Alternativ die Error-Einstellungen in der php.ini ändern.

Hunter
08.06.2010, 18:22
.

Perishand
08.06.2010, 18:22
Du musst am beginn jeder Seite, die auf Sessions zugreifen soll, session_start() schreiben. Also wirklich in jeder Datei, die Sessions benutzt

Janiboy
08.06.2010, 18:24
Ich würde als erstes prüfen, ob die Session existiert und wenn ja, welchen Wert diese hat. Ein Beispiel für dich:


<?php
session_start();

if(!isset($_SESSION['einloggen']))
{
echo 'Sie sind nicht angemeldet!';
exit();
}
?>

MolLy
08.06.2010, 19:42
Perfekt, vielen Dank!
Ich dachte man kann bei Session - Variablen nicht mit isset() arbeiten!
Danke!
Habs jetzt so gelöst:



<?php
session_start();
if(isset($_SESSION['einloggen'])==TRUE)
{
echo 'Sie sind angemeldet!';
}
elseif(isset($_SESSION['einloggen'])==FALSE)
{
echo'Nicht angemeldet!';
}


?>

Janiboy
08.06.2010, 19:51
In If-Anweisungen braucht man eigentlich nicht prüfen, ob diese eine wahre Aussage ist oder nicht. Beispiel:


<?php
if($var)
echo 'Wahre Aussage!';

//Das Gleiche funktioniert natürlich auch so

if($var == true)
echo 'Gleiche Resultat!';

?>

Man braucht also == true nicht beitippen, da dies auch ohne diese Anweisung geprüft wird.

MolLy
08.06.2010, 22:41
Okay, klar aber ich habs auch irgendwie einheitlich gemacht :)
Danke euch!

Ken
09.06.2010, 18:39
Die Fehler ausblenden, wie GregorSamsa vorgeschlagen hat, ist meiner Meinung nach keine Lösung. Na gut, in dem Fall spricht eigentlich nichts dagegen, aber grundsätzlich finde ich das einfach falsch. Am geschicktesten und saubersten löst Du es meiner Meinung nach, wenn Du Dir eigens eine Funktion dafür schreibst:
function session_value($key)
{
if(array_key_exists($key, $_SESSION))
{
return $_SESSION[$key];
}
return false;
}Ist aber Geschmackssache.

sn0w
09.06.2010, 18:47
@Ken (http://free-hack.com/member.php?u=64433): Deine Funktion dürfte jetzt immer false zurückgeben. Einfach noch nen else dazu und fertig.

MfG

Ken
09.06.2010, 18:53
Nö. :p

sn0w
09.06.2010, 18:57
Wie nö?^^ Verstehe ich jetzt ned :o
Normalerweise wird doch zuerst die session returned und dann false, oder irre ich mich da?

MfG

Ken
09.06.2010, 19:00
Sobald ein Wert mittels return zurückgegeben wird, egal ob wahr oder falsch, wird die Funktion beendet. Wenn also der Schlüssel im Session-Array existiert, wird der jeweilige Wert zurückgegeben und die Funktion ist beendet.

sn0w
09.06.2010, 19:03
Ahh okay :D Wieder was gelernt, hatte etwas andere Syntax im Kopf :D
Werde es gleich mal testen :D

MfG