PHP IF Abfrage, welche Session und Formular enthält, harkt. Eigenes Logikproblem!

Moretto Delucci

Lt. Junior Grade
Registriert
Feb. 2010
Beiträge
378
Hi!

Ich möchte, dass wenn man meine Seite das erste mal betritt einen Namen eingeben lassen, welcher in einer Session gespeichert wird.
Gehe ich erneut auf meine Seite soll erkannt werden, wer ich bin und mein Name soll ausgegeben werden.
Das formular ist auf sich selbst verlinkt. Es liegt sicher nicht an PHP, mein Horizont ist das Problem!

PHP:
<?php
IF ( !isset($_SESSION['besucht']))
{ 						
$_SESSION['guthaben'] = "50000"; 
$_SESSION['besucht'] = "1"; 
echo "<form action='bandit.php' method='post'>";
echo "<span>Name:</span>";
echo "<input type='text' name='tfName' />";
echo "<input type='submit' value='Check!' />"; //sendet den Name an sich selbst, merkt aber, dass ich schon auf der Seite war..
echo "</form>";
}else
{		
$_SESSION['name'] = "$_POST[tfName]"; //deswegen denke ich, der Name müsste hier ankommen und soll in der Session gespeichert werden
$mName=$_SESSION['name']; //jetzt noch in eine Variable speichen
echo "Hallo $mName! Dein Spielstand wurde wieder hergestellt!"; //und ausgeben.
}
?>
//Schließe ich den Tab, und öffne ihn neu, holt er sich glaube einen leeren Name, da das Textfeld ja dann nicht beschrieben wurde.

Wie komme ich an mein Ziel?
 
Seit wann harkt man ein Formular? Dachte sowas macht man im Garten...

1. session_start fehlt
2. Eine Session ist nur ein paar Minuten gültig. Über den nächsten Besuch hinaus wird das so nicht.
3. Für eine längere Speicherung der Daten auf Clientseite sind Cookies erfunden worden.
 
Da geht einiges quer.
1.) Es macht sich um einiges leichter, wenn du nicht (unnötig) mit echo arbeitest. Beende einfach mit ?> den PHP-Teil kurzzeitig, um dann pures HTML zu schreiben. Fang dann, wenn PHP wieder nötig ist, mit nem neuen <?php an. Es macht sich in dieser Beziehung auch gut, <?php if($blabla=TRUE): ?> <!-- HTML-Kram --> <?php endif; ?> zu schreiben, statt mit der Schweifklammer-Notation zu arbeiten.
2.) mach dich mal mit der syntaktisch korrekten Anwendung von <label> vertraut. <span> ist hier falsch/unpraktisch
3.) Dein Formular muss in Abhängigkeit der Tatsache gezeigt werden, ob a) bereits ne Session gesetzt ist oder b) das Formular verschickt wurde.
4.) $_SESSION['name'] = "$_POST[tfName]" Die Anführungsstriche sind falsch. Außerdem: Woher weißt du, dass der POSt-Wert gesetzt ist? Du prüfst ihn vorher nicht. Schlechte Idee.
 
Yuuri schrieb:
Seit wann harkt man ein Formular? Dachte sowas macht man im Garten...

1. session_start fehlt
2. Eine Session ist nur ein paar Minuten gültig. Über den nächsten Besuch hinaus wird das so nicht.
3. Für eine längere Speicherung der Daten auf Clientseite sind Cookies erfunden worden.

'tschuldige die Titelwahl, "geht nicht" oder "funktioniert nicht" wird gefiltert, daher missbrauche ich andere Wörter

Sorry, Session_start ist an erster Stelle in der Datei, habe ich jetzt nicht mitkopiert.
Gestern hat man mir hier noch gesagt, dass eine Session bis zum schließen des Browsers vorhanden sind
Da ich mit cookies nicht klarkam, wich ich ja auf sessions aus.
 
Sessions leben tatsächlich in etwa, bis du den Browsertab schließt. Vorherige Verbindungsabbrüche können die Session aber schon vorher killen.
Du hast 2 Optionen:
- du machst ne Registrierung und verwaltest die User direkt auf dem Server in einer Datenbank. Dann können sie auch nicht an den Datensätzen herumpfuschen
- du speicherst alles in Cookies (oder HTML5 Local Storage) und vertraust darauf, dass sie nicht dran rum pfuschen
 
Cookies wären besser aber das ist deine Aufgabe.

Edit: Sessions leben solange wie die Einstellung in der php.ini es zulässt.

Code:
<?php
session_star();

// default
$bekannter_user = false;


if( !isset($_SESSION['bekannter_user'] ){

    // integerwerte ohne Anführungszeichen
    $_SESSION['guthaben']        = 50000; 
    $_SESSION['bekannter_user']  = true;

}

else{

    $bekannter_user = true;
    // eine variable mit Anführungszeichen ist ein String
    $_SESSION['name'] = $_POST[tfName];
    // ternary Operator
    $mName = isset($_SESSION['name']) ? $_SESSION['name'] : 'Gastspieler' ;

}



?>


<?php if(!$bekannter_user) : ?>
<form action='bandit.php' method='post'>
<label for="tfName">Name:</label> 
<input type='text' name='tfName' />
<input type='submit' value='Check!' />
</form>


<?php else : ?>
<p>Hallo <?php echo $mName!; ?> Dein Spielstand wurde wieder hergestellt!</p>


<?php endif; ?>
 
Zuletzt bearbeitet:
Ich habs nun gelöst. Von allem etwas war dabei, muss vorallem übersichtlicher schreiben. Aber wird, hoffe, wie damals das schönschriftschreiben in der Schule.

Danke an alle und Daaron
 
Zurück
Oben