Poki: Variablen durch mehrere Seiten schleppen

Hallo Ihr Profis,

ist folgendes wirklich eine harte Nuss, oder warum find ich das in keinem Tutorial???

Ich will über mehrere Seiten hinweg insgesamt 150 Variablen in Checkboxen "einsammeln", um sie dann schließlich in einer Art Warenkorb-Screen per Mail zu versenden. Ich will aber auch zwischen den einzelnen Screens hin und her klicken können ... was mit einem Formular mit nur einem Submit-Button nicht machbar ist. Ich brauch mindestens drei Knöpfe: "Nächste Seite", "Vorherige Seite" und "Warenkorb" ... und immer sollen alle 150 Variablen mitgeschleift werden, damit alle Häkchen gesetzt bleiben, wenn ich mich von vorn nach hinten und umgekehrt durchklicke.

Wie mach ich das am besten?

Help.

Poki

  1. Wie mach ich das am besten?

    ... Variablen in einer session merken

    MfG
    Ralf

    1. Wenn du auf der ersten Seite ein folgendes Feld hast:

      <input type="text" name="name">

      dann kannste die Variable folgenderweise Weitergeben:

      <input type="hidden" name="name" value="<?= $_POST[name]; ?>">

      1. Das löst aber nicht das Problem mit dem Submit-Button, oder? Oder wie komm ich ohne "Submit" auf die nächste Seite, daß die variablen mitgeschleppt werden?

        1. Hi Poki,

          Das löst aber nicht das Problem mit dem Submit-Button, oder? Oder wie komm ich ohne "Submit" auf die nächste Seite, daß die variablen mitgeschleppt werden?

          Richtig, das Formular muss natürlich abgeschickt werden. Das du das auch mit einem normalen Link mittels Javascript machen kannst, lasse ich jetzt mal außer Acht, weil du damit Besucher die JS deaktiviert haben ausschließt.

          Was man natürlich auch noch machen kann, ist den Submit Button per CSS so zu formatieren, dass er wie ein normaler Text Link aussieht.

          MfG, Dennis.

          --
          Mein SelfCode: ie:{ fl:{ br:^ va:) ls:< fo:) rl:( n4:& ss:) de:> js:( ch:{ sh:( mo:} zu:|
          Zufällige Hinweise:
          ------------------------
          Bedeutung meines SelfCodes
          1. Hallo Dennis,

            Was man natürlich auch noch machen kann, ist den Submit Button per CSS so zu formatieren, dass er wie ein normaler Text Link aussieht.

            in manchen Fällen sieht ein User bei jedem Click auf einem Link, nein Button eine Meldung des Browsers, daß Daten unverschlüsselt über das Netz tanzportiert werden. Eine Session oder auch ein Cookie scheint mir da schon in Ordnung. In Dem Sinne halte ich den Ansatz von c.k für möglich aber nicht sinnvoll.

            Gruß aus Berlin!
            eddi

  2. Hi,

    Wie mach ich das am besten?

    mit Sessions.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hmmmmmmm.

      mit Sessions.

      Ich hab auf deinen Tip hin mich durch ein paar Tutorials gewühlt und war schon ganz glücklich ... aber offensichtlich mach ich noch einiges falsch.

      Dieser Code steht auf Seite "test.php":

      <?php
          @session_start();
           $_SESSION['b001']        =   "1";
        $_SESSION['b002']        =   "2";
        $_SESSION['b003']        =   "3";
        $_SESSION['b004']        =   "4";
        $_SESSION['b005']        =   "5";
        $_SESSION['b006']        =   "6";
        $_SESSION['b007']        =   "7";
        $_SESSION['b008']        =   "8";
        ?>

      Von da aus linke ich auf Seite "test2.php", wo folgender Code zu finden ist:

      <?php
         @session_start();
      echo $_SESSION['b001'];
      echo $_SESSION['b002'];
      echo $_SESSION['b003'];
      echo $_SESSION['b004'];
      echo $_SESSION['b005'];
      echo $_SESSION['b006'];
      echo $_SESSION['b007'];
      echo $_SESSION['b008'];
      ?>

      Sollte er mir jetzt nicht beim Seitenwechsel meine tollen Variablen anzeigen? Die entsprechende Zeile ist einfach leer...

      Help!

      1. Mach es lieber mit versteckten Feldern. Is einfacher.

        1. Hi c.k,

          Mach es lieber mit versteckten Feldern. Is einfacher.

          Nenn doch bitte mal ein paar Gründe, weshalb du es vorhziehst mit hidden Feldern zu arbeiten. Ich kann deine Behauptung, dies sei einfacher nämlich nicht nachvollziehen.

          Außerdem kannst du über hidden-Felder keine "sensiblen" Daten übermitteln, da die Werte aus Hidden Feldern sehr leicht vom Besucher zu ändern sind und man dir also wesentlich einfacher falsche Daten unterjubeln kann.

          MfG, Dennis.

          --
          Mein SelfCode: ie:{ fl:{ br:^ va:) ls:< fo:) rl:( n4:& ss:) de:> js:( ch:{ sh:( mo:} zu:|
          Zufällige Hinweise:
          ------------------------
          Newbies aufgepasst: Auf viele Fragen findet man eine
          Antwort im Archiv, das man auch durchsuchen kann
          1. Hello,

            Nenn doch bitte mal ein paar Gründe, weshalb du es vorhziehst mit hidden Feldern zu arbeiten. Ich kann deine Behauptung, dies sei einfacher nämlich nicht nachvollziehen.

            Es geht so einfach nur ohne Session.
            Allerdings muss man dann möglicht immer per Post übertragen. Die praktischen Beschränkungen für die Größe der URi sind hier ja oft genug diskutiert werden.

            Außerdem kannst du über hidden-Felder keine "sensiblen" Daten übermitteln, da die Werte aus Hidden Feldern sehr leicht vom Besucher zu ändern sind und man dir also wesentlich einfacher falsche Daten unterjubeln kann.

            Das ist zwar wahr, aber ich bezweifle, dass ein "Otto-Normaluser" ein serialisiertes und mit base64 coded Array manipuliert. Wenn man da zu den durchgeschleiften Datenwerten auch immer eine Prüfsequenz hinzufügt, ist das Ganze schon recht sicher.

            Bei größeren Datenmengen ist nur der zusätzliche Traffic evtl. lästig.

            Allerdings kann man auf diese Weise selbstverständlich auch eine "Session" aufbauen, die nur für die Formularserie gilt.

            Es ist eben nur eine Hilfslösung.

            Harzliche Grüße aus http://www.annerschbarrich.de

            Tom

            --
            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
            Nur selber lernen macht schlau
            1. Hi Tom,

              Allerdings muss man dann möglicht immer per Post übertragen. Die praktischen Beschränkungen für die Größe der URi sind hier ja oft genug diskutiert werden.

              Das ist mir bekannt ;-)

              Außerdem kannst du über hidden-Felder keine "sensiblen" Daten übermitteln, da die Werte aus Hidden Feldern sehr leicht vom Besucher zu ändern sind und man dir also wesentlich einfacher falsche Daten unterjubeln kann.

              Das ist zwar wahr, aber ich bezweifle, dass ein "Otto-Normaluser" ein serialisiertes und mit base64 coded Array manipuliert. Wenn man da zu den durchgeschleiften Datenwerten auch immer eine Prüfsequenz hinzufügt, ist das Ganze schon recht sicher.

              Ok, ich dachte jetzt, man würde für jeden Wert ein Hidden Feld anlegen usw. - das wäre nämlich wirklich umständlich und auch sehr leicht zu fälschen. So stimme ich dir zu, dass Otto-Normaluser da die Finger von lässt.

              Bei größeren Datenmengen ist nur der zusätzliche Traffic evtl. lästig.

              Es ist eben nur eine Hilfslösung.

              Damit bin ich einverstanden ;-)

              MfG, Dennis.

              --
              Mein SelfCode: ie:{ fl:{ br:^ va:) ls:< fo:) rl:( n4:& ss:) de:> js:( ch:{ sh:( mo:} zu:|
              Zufällige Hinweise:
              ------------------------
              Sinnvolles Zitieren: Man zitiert nur Teilsätze des Vorposters
              auf die man sich bezieht! Nicht einfach alles.
      2. hi,

        ja, das solle klappen. Lass Dir mal mit

        echo session_id();

        auf beiden Seiten die id ausgeben. Die sollten gleich sein.
        Wenn die Weitergabe nicht über Cookies laufen soll, must Du sie an die URL ranhängen. z.B. echo ".../index.php?" . SID;

        MfG
        Ralf

        1. Ja! Ja! Ja!  Das wars tatsächlich!

          Wenn die Weitergabe nicht über Cookies laufen soll, must Du sie

          an die URL ranhängen. z.B. echo ".../index.php?" . SID;

          Jetzt übergibt er die Werte! Danke!!!!

      3. Hello,

        Dieser Code steht auf Seite "test.php":

        <?php
            @session_start();
             $_SESSION['b001']        =   "1";
          $_SESSION['b002']        =   "2";
          $_SESSION['b003']        =   "3";
          $_SESSION['b004']        =   "4";
          $_SESSION['b005']        =   "5";
          $_SESSION['b006']        =   "6";
          $_SESSION['b007']        =   "7";
          $_SESSION['b008']        =   "8";
          ?>

        Während der Entwicklung und während Tests ist es meistens kontraproduktiv, die Fehlermeldungen zu unterdrücken. Also nimm das @ vor der Funktion weg, damit Du ggf. auch gewarnt wirst, falls die einen Fehler zurückgibt.

        Außerdem

        display_errors = on
         track_errors = on
         error_reporting = E_ALL (2047)

        Harzliche Grüße aus http://www.annerschbarrich.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau
      4. Hi Poki,

        @session_start();

        Warum lässt du Fehlermeldungen unterdrücken?
        Gerade in der Testphase solltst du dir immer alle Fehler anzeigen lassen - das hilft oft weiter.

        Und dann setzte noch bitter mit der Funktion error_reporting() die angezeigten Fehlermeldungen zu Beginn auf E_All:

        error_reporting(E_ALL);

        Sollte er mir jetzt nicht beim Seitenwechsel meine tollen Variablen anzeigen? Die entsprechende Zeile ist einfach leer...

        In deinem Code wird irgendwo ein Fehler sein, dessen Ausgabe du aber schlauerweise unterdrückt hast ;-)

        Wenn du nach meiner obigen Anleitung vorgegangen bist und dann eine Fehlermeldung kriegst, die irgendwie so lautet: "Can not send Cookie, Header already sent on the line ...", dann hast du vor Aufruf von session_start() schon irgendetwas ausgegeben.

        Dieses etwas kann ein einfaches Leerzeichen sein, z.B. so:

        ------------- Deine Datei ----------------------
         <?php
        session_start();
        ?>

        Hallo Welt!
        ------------- Deine Datei, Ende ----------------

        Da ist vor <?php ein Leerzeichen, welches schon bewirkt, dass kein Cookie gesendet werden kann.

        Wenn kein Cookie gesendet wurden, wird die Session ID auch nicht an die zweite Seite weitergegeben, die zweite Seite startet eine neue Session und verfügt nicht über die alten Daten - logisch, oder?

        Lies dir dazu mal im PHP Manual die Seite http://de2.php.net/manual/de/ref.session.php durch, insbesondere den Abschnitt "Übermittlung der Session-ID" (was aber nicht heißt, dass du den Rest nicht zu lesen brauchst ;-).

        Wenn dann immer noch Fragen sind, melde dich einfach noch mal.

        MfG, Dennis.

        --
        Mein SelfCode: ie:{ fl:{ br:^ va:) ls:< fo:) rl:( n4:& ss:) de:> js:( ch:{ sh:( mo:} zu:|
        Zufällige Hinweise:
        ------------------------
        Sinnvolles Zitieren: Man zitiert nur Teilsätze des Vorposters
        auf die man sich bezieht! Nicht einfach alles.
  3. Hello,

    Wie mach ich das am besten?

    mit einem hidden Field
    einem Array
    den Funktionen

    • serialize
    • base64encode
      ...
    • base64decode
    • unserialize

    Und schon kannst Du die Variablen mitschleppen.

    Du benötigst noch einen hidden-Seitenmerker

    Außerdem solltest Du alle Werte namentlich gegeneinander abgrenzen

    • name="btn[prev]" , name="btn[next]", name="btn[save]"
    • name="data[art_no]"
    • name="hid[vars]", name="hid[page]"
        page kann natürlich auch in vars drinstehen, dann sollte man die aber nach Warenkorb- und
        Funktionswerten unterteilen

    Harzliche Grüße aus http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau