Wie Variablenwerte über mehrere Formulare hinweg sichern?

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
Distance
Mitglied
Beiträge: 5
Registriert: 30.09.2007 12:27

Wie Variablenwerte über mehrere Formulare hinweg sichern?

Beitrag von Distance »

Hallo,

ich arbeite momentan an einem kleinen Script für das phpBB.
Dabei gibt der User in einem ersten Formular zwei Variablen an (Charaktername, Realm/Server), mit Hilfe dieser beiden Variablen wird dann eine XMLseite ausgelesen und die benötigten Werte in eigene Variablen gepackt.

Anschließend soll der User (wieder durch ein Formular) bestätigen, dass alle ausgelesenen Datein korrekt sind. Bis hier hin klappt das alles wunderbar, allerdings habe ich nun das Problem, dass die Variablenwerte nach der Bestätigung verloren gehen und somit nur leere Eintragungen in die Datenbank kommen.

Das erste Formular liegt in der datei wow_add.tpl und sendet bei "POST" folgendes:

Code: Alles auswählen

<form action="wow_char.php?mode=add" method="post"
Die Datei lässt damit die XML-Daten auslesen und Variablen setzen. Hier ist dann auch der Punkt, an dem der User die Auswertung der XML-Datei überprüfen und bestätigen soll. Was durch das Formular in der Datei wow_confirm.tpl geschieht und folgenden Postbefehl hat:

Code: Alles auswählen

<form action="wow_char.php?mode=confirmed" method="post"
Dadurch wird dann folgender Codeteil ausgelöst:

Code: Alles auswählen

else if ($mode == 'confirmed')
{
	$sql = "INSERT INTO phpbb_wowchars (user_ID, main, name, pvprank, level, class, race, gender, guild, skill0, skill0value, skill1, skill1value, realm)
			VALUES ('$user_id', '$main', '$charname', '$wow_title', '$wow_level', '$wow_class', '$wow_race', '$wow_gender', '$wow_guild','$wow_skill0', '$wow_skill0value', '$wow_skill1', '$wowskilllvalue', '$realm')";					
}
Nach einigem Suchen mit Google kam ich dann auf die Idee, Variablen in einer Session zu speichern. Leider hat mir weder die Doku noch die Suchfunktion geholfen zu verstehen, wie ich zur bestehenden Session diese Werte hinzufügen kann.
Ich hoffe mal, ihr könnt mir da weiterhelfen. :)
Benutzeravatar
Underhill
Mitglied
Beiträge: 1180
Registriert: 24.09.2003 11:40
Wohnort: 742 Evergreen Terrace

Beitrag von Underhill »

Hi,

einfach wie eine GET/POST Var benutzen..
http://de2.php.net/manual/de/ref.session.php

Beispiel:

Code: Alles auswählen

$_SESSION['captchaversuche'] = $captchaversuche + 1;
zum speichern oder

Code: Alles auswählen

$captchaversuche = $_SESSION['captchaversuche'];
zum auslesen...

Aber Achtung - Traue keinem fremden Wert! Immer mit "strip_tags()" und oder "htmlspecialchars()" arbeiten...


Gruß
Underhill
Distance
Mitglied
Beiträge: 5
Registriert: 30.09.2007 12:27

Beitrag von Distance »

Also irgendwie will das nicht so ganz funktionieren, ich poste einfach mal rein was ich nun getippt hab:
Das hier zum speichern, direkt unter Variablen:

Code: Alles auswählen

		$_SESSION['charname'] = $charname;
		$_SESSION['realm'] =  $realm;
		$_SESSION['title'] = $wow_title;
		$_SESSION['guild'] = $wow_guild;
		$_SESSION['level'] = $wow_level;
		$_SESSION['class'] = $wow_class;
		$_SESSION['race'] = $wow_race;
		$_SESSION['gender'] = $wow_gender;
		$_SESSION['skill0'] = $wow_skill0;
		$_SESSION['skill0value'] = $wow_skill0value;
		$_SESSION['skill1'] = $wow_skill1;
		$_SESSION['skill1value'] = $wow_skill1value;
Und das hier, wenn die Daten in die Datenbank kommen sollen:

Code: Alles auswählen

else if ($mode == 'confirmed')
{
$user_id = $userdata['user_id'];
$wow_title = $_SESSION['title'];
$charname = $_SESSION['charname'];
$wow_guild = $_SESSION['guild'];
$wow_class = $_SESSION['class'];
$wow_race = $_SESSION['race'];
$wow_gender = $_SESSION['gender'];
$wow_level = $_SESSION['level'];
$realm = $_SESSION['realm'];
$wow_skill0 = $_SESSION['skill0'];
$wow_skill0value = $_SESSION['skill0value'];
$wow_skill1 = $_SESSION['skill1'];
$wow_skill1value = $_SESSION['skill1value'];
$main = $HTTP_GET_VARS['main'];
message_die(GENERAL_ERROR, "$charname $user_id");
}
Ich hab den SQL-Befehl erstmal rausgenommen und gegen "message_die(GENERAL_ERROR, "$charname $user_id");" ersetzt um zu überprüfen ob in den Variablen nun werte enthalten sind, kriege aber nur die user_id angezeigt.

Ich stell mich warscheinlich mal wieder ziemlich doof an. :D
Benutzeravatar
Underhill
Mitglied
Beiträge: 1180
Registriert: 24.09.2003 11:40
Wohnort: 742 Evergreen Terrace

Beitrag von Underhill »

Hi,

was ist denn mit

Code: Alles auswählen

echo $wow_title . '<br />';
echo $charname;
vor

Code: Alles auswählen

message_die();
um zu prüfen ob etwas ankommt?

Gruß
Underhill
Distance
Mitglied
Beiträge: 5
Registriert: 30.09.2007 12:27

Beitrag von Distance »

Underhill hat geschrieben:Hi,

was ist denn mit

Code: Alles auswählen

echo $wow_title . '<br />';
echo $charname;
vor

Code: Alles auswählen

message_die();
um zu prüfen ob etwas ankommt?

Gruß
Underhill
Liefert ebenfalls nur leere Zeilen. :)

Allerdings hätte ich nun eine Notlösung gefunden und zwar den 'action=""'- Teil des zweiten Formulars variable zu gestalten und dann die ganzen Infos per $HTTP_GET_VARS auszulesen. Hat allerdings natürlich den Nachteil, dass jeder den Link so manipulieren kann wie ers gerne hätte.

Wäre also nur eine Lösung falls wirklich gar nichts anderes funktioniert.
Benutzeravatar
Underhill
Mitglied
Beiträge: 1180
Registriert: 24.09.2003 11:40
Wohnort: 742 Evergreen Terrace

Beitrag von Underhill »

Hi,

besser nicht per GET...

Offengesagt habe ich aber auch deinen Ansatz mit der $_Session nicht verstanden...

Wo kommt den "$wow_title" bei

Code: Alles auswählen

$_SESSION['title'] = $wow_title;
her? Hast du sie gesondert mit $_POST['wow_title'] ausgelesen oder spekulierst du da mit "Register_Global= ON"?

Gruß
Underhill

PS: Zeig mir mal die .tpl und die .php - Auch als PN-Link wenn du willst...
Distance
Mitglied
Beiträge: 5
Registriert: 30.09.2007 12:27

Beitrag von Distance »

Underhill hat geschrieben: Wo kommt den "$wow_title" bei

Code: Alles auswählen

$_SESSION['title'] = $wow_title;
her? Hast du sie gesondert mit $_POST['wow_title'] ausgelesen oder spekulierst du da mit "Register_Global= ON"?
Die wird durch das Auslesen der externen XML-Datei "erstellt"

Code: Alles auswählen

$wow_title = $xmlvals[$xmlindex["CHARACTER"][0]]["attributes"]["TITLE"];
Aber das siehst du ja dann wenn du dir die Datei mal anguckst. ;)

Underhill hat geschrieben: PS: Zeig mir mal die .tpl und die .php - Auch als PN-Link wenn du willst...
Hab mal die beiden .tpls und die .php datei in eine .rar datei gepackt, hoffe das ist inordnung so *Link*.
Ron_Berlin
Mitglied
Beiträge: 75
Registriert: 19.02.2007 04:47
Wohnort: Berlin
Kontaktdaten:

Beitrag von Ron_Berlin »

Möchte mich jetzt nicht in fremde Software vertiefen.
Aber vielleicht ein Tipp: könnte es sein, daß die Session
entweder garnicht- oder jedesmal beim Scriptaufruf
neu initialisiert wird? Dann wäre es klar, warum die
Felder jeweils leer sind.

Nur so eine Idee, falls ich völlig daneben liege.

Gruß Ron
Wer nicht gelebt hat, der kann auch nicht sterben.
http://www.RonGS.de
http://www.Berlin-Brandenburg-Biker.de
Benutzeravatar
Underhill
Mitglied
Beiträge: 1180
Registriert: 24.09.2003 11:40
Wohnort: 742 Evergreen Terrace

Beitrag von Underhill »

@Distance:

Ich glaube ich verstehe - Kann es sein das die Werte zwar bei der confirm ankommen aber nach dem bestätigen nicht weitergegeben werden? :wink:

Wenn ja: Schau dir mal <input type="hidden" an :wink:
(und mach' die Sessionsache wieder raus...)

Gruß
Underhill
Distance
Mitglied
Beiträge: 5
Registriert: 30.09.2007 12:27

Beitrag von Distance »

Underhill hat geschrieben:@Distance:

Ich glaube ich verstehe - Kann es sein das die Werte zwar bei der confirm ankommen aber nach dem bestätigen nicht weitergegeben werden? :wink:

Wenn ja: Schau dir mal <input type="hidden" an :wink:
(und mach' die Sessionsache wieder raus...)

Gruß
Underhill
Genau das war mein Problem.
Und das mit dem <input type="hidden" klappt super!

vielen Dank! ;-)
Antworten

Zurück zu „Coding & Technik“