Variablen an eine bestehende Session dranhängen

quidnovi

Erfahrenes Mitglied
Hi Gemeinde,

bin schon ganz irr, finde einfach keine Lösung oder bin einfach begriffstutzig.

Ich gebe einen Namen ein:
Code:
<form method="Post" action="main.php">
<p><input type="text" name="name" size="20"></p>
<p><input type="submit" value="Abschicken" name="B1"><input type="reset" value="Zurücksetzen" name="B2"></p>
und schicke es an main.php weiter.

Hier lasse ich mir den Namen ausgeben und möchte aber einen zweiten Namen hinzufügen
Code:
<?= $_SESSION['name'];?>
<form method="Post" action="main4.php">
<p><input type="text" name="bla" size="20"></p>
<p><input type="submit" value="Abschicken" name="B1"><input type="reset" value="Zurücksetzen" name="B2"></p>

Wenn ich nun die Seite main4.php aufrufe, dann habe ich wohl den ersten Namen, den zweiten aber nicht.
PHP:
echo $_SESSION['name'];
echo $_SESSION['bla'];

Ich habe hier und im Internet nix dazu gefunden, auch in meinen Büchern kann ich dazu nichts finden.

Kann mir bitte jemand erklären, warum das nicht geht? Danke
 
Wo registrierst du denn die Variablen in die Session?

So wie dein Code ist, wären deine "Namen" jeweils im superglobalen $_POST Array, aber nicht in Session.
Dafür müsstest du diese erstmal zuweisen.

PHP:
<form method="Post" action="main.php">
<p><input type="text" name="name" size="20"></p>
<p><input type="submit" value="Abschicken" name="B1"><input type="reset" value="Zurücksetzen" name="B2"></p>

## main.php
<?php
$_SESSION['name'] = $_POST['name']
echo $_SESSION['name'];
?>
<form method="Post" action="main4.php">
<p><input type="text" name="bla" size="20"></p>
<p><input type="submit" value="Abschicken" name="B1"><input type="reset" value="Zurücksetzen" name="B2"></p>

## main4.php
<?php
$_SESSION['bla'] = $_POST['bla']
echo $_SESSION['bla'];
echo $_SESSION['name'];
?>

Falls das nicht klappt, könnte es natürlich sein, dass der Session Cookie nicht richtig gesetzt werden kann und du müsstest die
Code:
session_id
an das Ziel der Formulare dranhängen.

Zur Sicher
 
Hi Felix,

danke, das funktioniert, auch wenn ich noch nicht genau weiß warum.

Noch eine Frage: Hieße das, dass die Namen in diesem Superglobalen Array _POST gespeichert und jederzeit - auch in anderen Sripts abrufbar wären? Natürlich nur in der jeweiligen Session.

Ich kann jetzt die Variablen auch mit $_POST ausgeben lassen.

Dachte, wenn man Variablen in einem Script für die Dauer der Sitzung speichern möchte, geht das nur mit $_SESSION.
 
Die superglobale $_POST ist nur nach Absenden eines Formulars gefüllt, eben mit den Daten des Formulars. Sendest du danach ein neues Formular ab, sind die Daten aus Formular #1 verloren, wenn du sie nicht nochmal speicherst (in einer Session) oder in versteckten Felders des Formular nochmal übergibst.
 
Ich habe jetzt etwas probiert, was aber auch leider in die Hose gegangen ist.

Ich wollte - aus Gründen der Übersicht - die beiden Namen in ein File auslagern und über include einbinden.

PHP:
<?php
	
	// Variablen speichern
	$_SESSION['name'] = $_POST['name'];
	$_SESSION['bla'] = $_POST['bla'];
?>

Da habe ich den ersten Namen wohl auf dem Sropt main2.php, aber dann ist er futsch.

Der Hintergrund:
Ich suche nach einer Möglichkeit, Werte von Variablen für eine Sitzung über mehrere Formulare hinweg zu speichern. Da ich aber einige Eingabescripts habe, fürchte ich den Überblick zu verlieren. Also wollte ich eine zentrale Datei anlegen, in welcher die Werte gespeichert werden (natürlich nur für die jeweilige Sitzung). Also so wie oben abgebildet.

Nu geht das aber so nicht.

Könntest Du mir vielleicht eine Möglichkeit sagen?
 
Die Hauptsache ist, dass du in deinem Hauptscript immer die Session startest, mit [phpf]session_start[/phpf].

Allerdings wirst du eher den Überblick verlieren, wenn du alles auslagerst.

Du könntest auch einfach eine kleine Funktion machen, die dir einfach alles aus den Formularen in eine Session speichert, z. B. so:

PHP:
function post2session($post) {
  foreach($post as $key => $value) {
    $_SESSION[$key] = $value;
  }
}

Allerdings öffnest du dir damit auch möglicherweise ein paar Sicherheitslücken, da du die Eingaben nicht mehr validieren kannst, wozu ich aber dringend raten würde.
 
Ne, das mit der Funktion ist nicht das gelbe vom Ei.

Gibt es denn wirklich keine Möglichkeit die Variablen in ein Script auszulagern? Kommt mir übersichtlicher vor, wenn das so wäre.

So wie ich es jetzt habe, bleibt mir der Wert des ersten Namens erhalten, den zweiten nimmt er mir aber wiederum nicht mehr.
PHP:
<?php session_start();
	
	// Variablen speichern
	$_SESSION['name'] = $_POST['name'] = $name;
	$_SESSION['bla'] = $_POST['bla'] = $bla;
?>

Hab's offensichtlich immer noch nicht gecheckt. Warum geht das nicht?

Auf der letzten Seite erhalte ich nur den ersten Namen, wenn ich allerdings aktualisiere, dann erhalte ich den 2. Namen, dafür ist der erste weg. Kannst Du mir das bitte erklären?
 
Zuletzt bearbeitet:
Zurück