Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : Variablen auf mehreren Seiten verwenden



BlueTeX
27-08-2007, 16:03
Hallo,

ich beschäftige mich schon seit Tagen mit folgendem Problem.

Ich habe einen Fragebogen entworfen, der über mehrere Seiten geht. Nun möchte ich, dass der User mit einem Zurück- und Vorwärts-Button hin- und herblättern kann und dabei die von ihm bereits gesetzten Einträge angezeigt werden.

Das ganze funktioniert mit javascript:history.back() bzw. javascript:history.forward() eigentlich wunderbar. Wenn ich jetzt beispielsweise auf der 2. Seite den previous button drücke, dann wird man richtigerweise auf die 1. Seite zurückgeleitet und die bereits gesetzten Einträge bleiben erhalten. Nun muss ich jetzt den javascript:history.forward() button ausführen und nicht den submit button, damit der User auf die 2 Seite gelangt, wo er schon war und die bereits gesetzten Einträge angezeigt werden. Erst hier greift dann wieder der submit-Button, um den User auf 3. Seite weiterzuleiten, die er noch nicht besucht hatte.

Ich habe das ganze mit den untenstehenden Codeschnipseln so halbwegs hinbekommen. Allerdings schaffe ich es nicht, dass die if Schleife auf der 1 Seite funktioniert. Irgendwie merkt er sich nicht, dass der previous-button der 2.Seite gedrückt wurde, da er immer den else-Teil der Schleife ausgiebt. Was mache ich falsch? Benötige ich superglobale Variblen? Allerdings habe ich das mit denen auch nicht hinbekommen, aber ich kenne mich nicht da so aus.

Seite1.php
<?php
if (isset($_POST['submit'])=='previous2-4')
{
echo "<input type=\"button\" name=\"next1-4\" value=\"nextJAVA >>\" onclick=\"javascript:history.forward()\">";
}
else
{
echo "<input type=\"submit\" name=\"next1-4\" value=\"next >>\">";
}
?>

Seite2.php

<input type="button" name="previous2-4" value="<< previous" onclick="javascript:history.back()">

<input type="submit" name="next2-4" value="next >>">


Vielen Dank im Voraus für Eure Bemühungen !!!!

BlueTeX

tschloss
27-08-2007, 20:57
Hast du mal überlegt, den kompletten Satz von Werten per POST an jede Seite zu übergeben. Die Seite belegt dann Felder mit bereits bekannten Werten vor, egal in welcher Reihenfolge die Seiten abgearbietet werden. Die jeweils nicht abgefragten Felder würden dann per hidden Felder weitergeleitet.

Anderer Ansatz: Eine große Seite mit einer Gruppe je Darstellungsseite. Es ist jeweils nur eine Gruppe sichtbar. Forwärts/Rückwärts regelt einfach nur die Sichtbarkeit der Gruppen.

BlueTeX
27-08-2007, 21:49
Hi,

den kompletten Satz von Werten nehme ich von Seite zu Seite mit, indem ich auf jeder Seite die folgende Funktion aufrufe.

<?php
function dyn_form()
{
global $HTTP_POST_VARS;
if (isset($HTTP_POST_VARS))
{
foreach ($HTTP_POST_VARS as $key => $elem)
{
echo "<input name=\"$key\" value=\"$elem\">";
}
}
}
?>

Das funktioniert auch alles.

Allerdings, wenn ich den rückwärts-button auf der 2. Seite wie nachfolgend als eigenes Formular bastle, dann merkt er sich einfach nicht, dass dieser gedrückt wurde. Er springt zwar auf die 1. Seite zurück, jedoch wird die Variable nicht mitgenommen

<form action="javascript:history.back(1)" method="post">
<input class="button" type="submit" name="previous2-4" value="<< previous">
</form>


Ich habe schon alles ausprobiert, aber nichts schon zu funktionieren.

BlueTeX
27-08-2007, 22:44
Hallo zusammen,

ich glaub es liegt an <form action="javascript:history.back(1)" method="post"> dass er nicht "previous" mitnimmt. Denn mache ich <form action="index.php" method="post"> dann erkennt er zum ersten Mal, dass der Button gedrückt wurde. Nur bleibt man natürlich auf der selben Seite. Wie kann ich dann trotzdem den Befehl onclick="javascript:history.back()" ausführen, so dass man auf Seite 1 geleitet wird?

BlueTeX
28-08-2007, 14:57
Hallo liebe PHP-Gemeinde,

kann mir jemand bei dem genannten Problem helfen? Oder einen Denkanstoss geben?

Vielen Dank

djaliced
28-08-2007, 19:48
Du schreibst das dein Eingabeformular 3 Seite lang ist. Jetzt stell ich mir nur die Frage:
Müssen die Daten von der Seite 1. schon ausgewertet werden bevor die Seite 2. angezeigt wird?
Und müssen die Daten von der Seite 2. schon ausgewertet werden bevor die Seite 3. angezeigt wird?

Wenn nicht, warum machst du nicht ein Formular mit 3 Tabellen. Und lässt jeweils immer die Tabelle einblenden die gerade aktiv ist? Das ganze per CSS.

Bsp.:


<Style>
.activeTable
{
display:visible;
heigh:100px;
width:500px;
}

.inactiveTable
{
display:none;
}
</Style>





<table Class="activeTable">

bzw.


<table Class="inactivTable">


Gruß Olly

BLUESCREEN3D
28-08-2007, 21:03
Es gibt da verschiedene Probleme. Das beginnt schon damit, dass bei history.back() der Browser vllt. gar nicht die Seite neu anfordert, sondern die Daten aus dem Cache nimmt. Wie sollte also der PHP-Code zum neuen Aufruf ausgeführt werden? Such mal nach "no-cache".

Ein anderes Problem ist, dass du ja beim Zurück-Gehen die Daten der zweiten Eingabe behalten willst, soweit ich das verstanden habe.
Wenn man nun aber auf Seite 2 etwas eingibt, dann zurück geht (history.back()) und auf Seite 1 was ändert, dann müsste danach ja auf Seite 1 die Eingabe gesendet werden. Was aber nicht passieren wird, wenn du den Submit-Button durch ein history.forward() ersetzt. Andernfalls würde aber wiederum die Eingabe von Seite 2 verfallen.
Du könntest höchstens statt dem Submit die Daten per JS senden und dann history.forward() ausführen. Aber dafür müsste dann der Server wiederum die Daten speichern und dem User später eindeutig zuordnen können: Such nach "Session".

Außerdem stimmen deine abgefragten Variablennamen für die Submit-Buttons nicht (die Variable würde "previous2-4" heißen und nicht "submit"). Aber das bringt dir auch nichts, da das Formular nicht gesendet wird, wenn du das history.back() drin hast.

Es gibt übrigens keine "if-Schleife", sondern nur eine if-Abfrage.

BlueJay
29-08-2007, 16:31
Warum arbeitest du nicht mit Cookies oder Session-Variablen?

so long,
Bluejay

BlueTeX
02-09-2007, 17:57
Hallo,

vielen Dank für Eure Antworten und Tipps.

Es fehlt mir noch ein Schritt, dann habe ich es geschafft. Ich würde mich sehr sehr freuen, wenn Ihr mir helfen könntet. Es ist ja nicht so, dass ich selber nicht viel Zeit in eine Lösung stecken würde, aber ich schaffe es alleine nicht. Derzeit versuche ich das Problem folgendermaßen halberfolgreich zu lösen.

Ich habe 5 eigenständige Seiten, wobei auf jeder Seite, bis auf die Seite 5, ein Formular mit
<form action="index.php" method=post> existiert. Beim Ausführen des Vorwärts- oder Rückwärtsbutton kommt man dann immer auf die Seite index.php. Dort wird dann die unten aufgeführte Befehlsfolge durchgangen.

Alles klappt wunderbar, die gesetzten Einträge werden gesetzt. Man kann sich von Seite 1 bis Seite 4 schrittweise vorwärts durchklicken und dann von Seite 4 bis Seite 1 schrittweise rückwärts durchklicken. Ebenso von Seite 1 bis Seite 3 bzw. Seite 3 bis Seite 1. Auch von Seite 1 bis Seite 2 bzw. Seite 2 bis Seite 1 funktioniert alles.

Jetzt verzweifle ich nur noch an dem folgenden Problem:
Wenn man von Seite 4 auf Seite 3 zurückklickt, dann bekomme ich es nicht hin von Seite 3 auf Seite 4 zu klicken. Dasselbe gilt natürlich auch, wenn man von Seite 4 auf Seite 2 zurückklickt und dann von dieser auf Seite 3 vorklicken möchte. Für die anderen Möglichkeiten gilt dassselbe.

Kann mir jemand helfen? Mir ist zwar klar warum das so ist, aber ich weiss einfach nicht, wo ich das in den untenstehenden Quellcode einfügen soll. Habe schon viel probiert, aber nichts funktioniert. Ich kann irgendwie nie den entsprechenen "next"-Button ansprechen.




if(isset($_POST['next1-4']))
{
if(isset($_POST['next2-4']))
{
if(isset($_POST['next3-4']))
{
if(isset($_POST['next4-4']))
{
include "Content5.php";
}
elseif(isset($_POST['previous4-4']))
{
if(isset($_POST['previous3-4']))
{
if(isset($_POST['previous2-4']))
{
include "Content1.php";
}
else
{
include "Content2.php";
}
}
else
{
include "Content3.php";
}
}
else
{
include "Content4.php";
}
}
elseif(isset($_POST['previous3-4']))
{
if(isset($_POST['previous2-4']))
{
include "Content1.php";
}
else
{
include "Content2.php";
}
}
else
{
include "Content3.php";
}
}
elseif(isset($_POST['zzprevious2-4']))
{
include "Content1.php";
}
else
{
include "Content2.php";
}
}
else
{
include "Content1.php";
}

Turbohummel
03-09-2007, 06:21
Sieh dir doch mal http://www.php.net/manual/de/control-structures.switch.php an.

BlueTeX
03-09-2007, 08:59
Hallo Turbohummel,

danke für den Tipp. Kannst du mir, wenn es dir nicht allzu viele Umstände bereitet, bei den ersten Codezeilen helfen? So von Seite 1 bis Seite 3 und wieder zurück.

Würde mich darüber sehr freuen, denn im programmieren bin ich leider kein Held.

Vielen Dank für die Hilfe

BlueTeX
03-09-2007, 16:23
Hallo,

mit dem switch-Befehl komme ich leider überhaupt nicht zur Recht.

Im Prinzip "hängt" alles bei den else-Bedingungen, wo die Datein eingefügt wird und die if-Schleife beendet wird. Gibt es vielleicht irgendeinen Befehl wo man wieder an den Anfang der Schleife springt bzw. an die entsprechenden Positionen, der ersten vier in einander verschachtelten if-Anweisungen?

Ich glaube, dann müsste es funktionieren. Kann mir den jemand sagen (evtl. mit einem kleinen Beispiel?

Vielen vielen Dank für Eure Bemühungen

Turbohummel
03-09-2007, 19:17
Erstmal die Frage: Warum übergibts du dein Zeugs so merkwürdig (seh ich jetzt erst).
Warum nicht index.php?to=1 usw. aufrufen?
Dann kannst du das mit


switch($_POST['to']){
case 1: include 'page1'; break;
case 2: include 'page2'; break;
...
default: die('Ungültige Seite');
}

Wozu du wissen musst, woher du kommst versteh ich nicht.

BlueTeX
05-09-2007, 19:22
Hallo,
:)
danke für die Tipps. Ich habe es nun geschafft, die switch Anweisung war die Lösung!