Anzeige:
Ergebnis 1 bis 14 von 14

Thema: Variablen auf mehreren Seiten verwenden

  1. #1
    Registrierter Benutzer
    Registriert seit
    08.03.2005
    Beiträge
    39

    Variablen auf mehreren Seiten verwenden

    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
    Geändert von BlueTeX (27-08-2007 um 17:54 Uhr)

  2. #2
    Registrierter Benutzer
    Registriert seit
    02.09.2004
    Ort
    Mannheim
    Beiträge
    102
    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.
    Greetz
    Thomas
    - Jabber-IM: tschloss-at-gmail.com -

  3. #3
    Registrierter Benutzer
    Registriert seit
    08.03.2005
    Beiträge
    39
    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.

  4. #4
    Registrierter Benutzer
    Registriert seit
    08.03.2005
    Beiträge
    39
    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?

  5. #5
    Registrierter Benutzer
    Registriert seit
    08.03.2005
    Beiträge
    39

    Question

    Hallo liebe PHP-Gemeinde,

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

    Vielen Dank

  6. #6
    Registrierter Benutzer
    Registriert seit
    20.05.2006
    Ort
    Bremen
    Beiträge
    39
    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.:
    Code:
    <Style>
    .activeTable
    {
      display:visible;
      heigh:100px;
      width:500px;
    }
    
    .inactiveTable
    {
      display:none;
    }
    </Style>
    Code:
    <table Class="activeTable">
    bzw.
    Code:
    <table Class="inactivTable">
    Gruß Olly

  7. #7
    Registrierter Benutzer Avatar von BLUESCREEN3D
    Registriert seit
    08.11.2002
    Beiträge
    665
    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.

  8. #8
    Registrierter Benutzer Avatar von BlueJay
    Registriert seit
    27.08.2004
    Beiträge
    825
    Warum arbeitest du nicht mit Cookies oder Session-Variablen?

    so long,
    Bluejay
    Eigentlich ganz einfach, wenn man's weiss!

  9. #9
    Registrierter Benutzer
    Registriert seit
    08.03.2005
    Beiträge
    39
    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
    HTML-Code:
    <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.


    PHP-Code:
    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";

    Geändert von BlueTeX (02-09-2007 um 22:52 Uhr)

  10. #10
    Registrierter Benutzer
    Registriert seit
    15.10.2005
    Ort
    Franken
    Beiträge
    362
    Dank der Rekursion kann ich IF-Schleifen bauen.

    In neuem Glanz: www.turbohummel.de

  11. #11
    Registrierter Benutzer
    Registriert seit
    08.03.2005
    Beiträge
    39
    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
    Geändert von BlueTeX (03-09-2007 um 10:08 Uhr)

  12. #12
    Registrierter Benutzer
    Registriert seit
    08.03.2005
    Beiträge
    39
    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

  13. #13
    Registrierter Benutzer
    Registriert seit
    15.10.2005
    Ort
    Franken
    Beiträge
    362
    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
    Code:
    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.
    Dank der Rekursion kann ich IF-Schleifen bauen.

    In neuem Glanz: www.turbohummel.de

  14. #14
    Registrierter Benutzer
    Registriert seit
    08.03.2005
    Beiträge
    39
    Hallo,

    danke für die Tipps. Ich habe es nun geschafft, die switch Anweisung war die Lösung!

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •