Miky: Mal ne (saudumme?) Frage zur Weiterleitung

Aaaalso...MySQL-DB wird und wird und ich freu mich immer wieder wie n Schnitzel auf Urlaub. Langsam schreite ich voran von der kopflosen Suche nach Codeschnipseln, Tutorials, FAQs zu halbwegs überblickenden lösungsorientierten Ansätzen. Und da ward mein Enthusiasmus auch schon wieder gestoppt:

Szenario: Kunde trägt sich in DB ein, das klappt. Eintrag is also gemacht. Perfetto.

Folgeszenario A: Kunde wird weitergeleitet auf Bestätigungsseite, sieht dort seine ganzen Eingaben nochmal und zusätzlich die ihm zugeteilte Kundennummer. Gut soweit. Schlecht: Die Reload-Sache (nochmaliger Eintrag der gleichen Kundendaten). Abhilfe: header (Location usw...)

Folgeszenario B: Header (Location usw..) - Kunde kann nicht reloaden und nochmal eintragen, was mich und die DB freut, aber leider, leider sind natürlich so alle Variablen wech, der Kunde sieht also nun nicht mehr, welche Kundennummer er bekommen hat und welche Daten er eingab. Böse, böse.

Wie verbinde ich also nun Szenario A mit Szenario B, und das auf möglichst einfache Weise? Ich las bislang schon einiges über IP merken und auf Zeit sperren usw., aber das kommt mir alles fast n bisschen kompliziert vor für die geniale (kommt mir zumindest so vor) Sprache PHP...

Was ich wohl meine, ist so ne Art Header-Location inkl. Submit...jibbet sowatt?!

Gruß,
Miky

  1. Hallo,

    Folgeszenario B: Header (Location usw..) - Kunde kann nicht reloaden und nochmal eintragen, was mich und die DB freut, aber leider, leider sind natürlich so alle Variablen wech, der Kunde sieht also nun nicht mehr, welche Kundennummer er bekommen hat und welche Daten er eingab. Böse, böse.

    Grundsätzliches erst mal zur Weiterleitung. Ich hab' dazu mal 'ne Frage ins Forum gestellt (Browserunterstützung, Einhaltung des HTTP-Standards), vielleicht interessierts dich ja mal:

    </archiv/2002/9/23708/>
    </archiv/2002/9/23976/>

    Desweiteren: Kannst Du mit Sessions arbeiten? Wenn ja, dann kannst Du es ja so machen, dass (a) der Benutzer nur das Formular abschicken kann, wenn er schon eine Session gestartet hat (in der Session merken, ob er schon mal auf dem Formular war)

    Dann hast Du mehrere Alternativen:

    Ohne Weiterleitung: Dann kannst Du Dir zusätzlich beim Submit merken, ob das Formular schon mal abgeschickt wurde. Dann kannst Du stattdessen die Kundennummer noch mal raussuchen, anstelle dass Du die Daten noch einmal einträgst.

    Mit Weiterleitung: Du speicherst in der Session auch die Kundennummer (in der Submit-Seite) und gibst sie in der zweiten Seite, auf die weitergeleitet wurde, aus.

    Mit Weiterleitung (narrensicher): Du kombinierst beides, da Reload nicht das einzige ist, um ein Formular 2x zu submitten (zweimal auf den Button geklickt?)

    Wenn Du nicht mit Sessions arbeiten kannst, dann könntest Du Dir höchstens die IP merken, aber das ist irgendwie auch blöd.

    Oder Du machst das ganz anders: Du schaust bei jedem Submit, ob exakt dieselben Kundendaten schon mal in die DB eingetragen worden sind, und holst Dir ggf. die Kundennummer. (bzw. kombinierst das ganze in einem SELECT - das halt 1 Zeile zurückliefert, falls schon etwas vorhanden und keine Zeile falls noch nichts vorhanden) Dann brauchst Du auch keine Sessions und keine Weiterleitung.

    Such' Dir einen Lösungsansatz aus.

    Grüße,

    Christian

    1. Hallo,

      Grundsätzliches erst mal zur Weiterleitung. Ich hab' dazu mal 'ne Frage ins Forum gestellt (Browserunterstützung, Einhaltung des HTTP-Standards), vielleicht interessierts dich ja mal:

      </archiv/2002/9/23708/>
      </archiv/2002/9/23976/>

      Happig happig. Gut, ich lass das mit dem weiterleiten :-)
      Die Methode unten gefällt mir auch besser.

      Desweiteren: Kannst Du mit Sessions arbeiten? Wenn ja, dann kannst Du es ja so machen, dass (a) der Benutzer nur das Formular abschicken kann, wenn er schon eine Session gestartet hat (in der Session merken, ob er schon mal auf dem Formular war)

      Dann hast Du mehrere Alternativen:

      Ohne Weiterleitung: Dann kannst Du Dir zusätzlich beim Submit merken, ob das Formular schon mal abgeschickt wurde. Dann kannst Du stattdessen die Kundennummer noch mal raussuchen, anstelle dass Du die Daten noch einmal einträgst.

      Mit Weiterleitung: Du speicherst in der Session auch die Kundennummer (in der Submit-Seite) und gibst sie in der zweiten Seite, auf die weitergeleitet wurde, aus.

      Mit Weiterleitung (narrensicher): Du kombinierst beides, da Reload nicht das einzige ist, um ein Formular 2x zu submitten (zweimal auf den Button geklickt?)

      [ x ] Genommen! Der taugt, der Mann. Vielen Dank für den Denkanstoss!

      Wenn Du nicht mit Sessions arbeiten kannst, dann könntest Du Dir höchstens die IP merken, aber das ist irgendwie auch blöd.

      Oder Du machst das ganz anders: Du schaust bei jedem Submit, ob exakt dieselben Kundendaten schon mal in die DB eingetragen worden sind, und holst Dir ggf. die Kundennummer. (bzw. kombinierst das ganze in einem SELECT - das halt 1 Zeile zurückliefert, falls schon etwas vorhanden und keine Zeile falls noch nichts vorhanden) Dann brauchst Du auch keine Sessions und keine Weiterleitung.

      Such' Dir einen Lösungsansatz aus.

      Grüße,

      Christian

      Vielleicht noch ne kleine Frage, da du dich hier recht gut auszukennen scheinst: Ich möchte (weitgehend) von vornherein ausschließen, dass sich User mehrmals eintragen. Nun dachte ich daran, ein Cookie beim Eintragen zu setzen (falls Cookie da, würde dann erst gar kein Formular zum Eintragen mehr angeboten). Macht das Sinn oder wär das doch zu fies? Ja, ich weiß, nicht jeder akzepriert Cookies und so mancher ist auch etwas schlauer als der Obststand an der Ecke und löscht den Keks eben...aber "Gelegenheit macht Diebe", und je mehr Steine im Weg liegen, desto weniger hab ich mit Abstaubern zu kämpfen (es geht hier um eine kostenlose Dienstleistung, die natürlich nur 1x pro Person angefordert können werden soll)...

      Gruß,
      Miky

      1. Hallo,

        Happig happig. Gut, ich lass das mit dem weiterleiten :-)

        Naja - ganz so dramatisch ist es nicht:

        ... code ...
        if ($_SERVER["REQUEST_METHOD"] == "HTTP/1.1") {
          Header ("Status: 303 See other");
        }
        Header ("Location: ....");
        ... code (z.B. exit) ...

        Die Methode unten gefällt mir auch besser.

        Diese, die Du nimmst, ist aber auch mit einer Weiterleitung.

        Oder Du machst das ganz anders: Du schaust bei jedem Submit, ob exakt dieselben Kundendaten schon mal in die DB eingetragen worden sind, und holst Dir ggf. die Kundennummer. (bzw. kombinierst das ganze in einem SELECT - das halt 1 Zeile zurückliefert, falls schon etwas vorhanden und keine Zeile falls noch nichts vorhanden) Dann brauchst Du auch keine Sessions und keine Weiterleitung.

        Ehrlich gesagt gefällt mir diese Methode im Nachhinein am besten, da Du dich nicht auf Sessions verlassen musst, und dein unteres Problem schon gelöst bekommst. Da bräuchtest Du auch keine Weiterleitung.

        Vielleicht noch ne kleine Frage, da du dich hier recht gut auszukennen scheinst: Ich möchte (weitgehend) von vornherein ausschließen, dass sich User mehrmals eintragen. Nun dachte ich daran, ein Cookie beim Eintragen zu setzen (falls Cookie da, würde dann erst gar kein Formular zum Eintragen mehr angeboten). Macht das Sinn oder wär das doch zu fies? Ja, ich weiß, nicht jeder akzepriert Cookies und so mancher ist auch etwas schlauer als der Obststand an der Ecke und löscht den Keks eben...aber "Gelegenheit macht Diebe", und je mehr Steine im Weg liegen, desto weniger hab ich mit Abstaubern zu kämpfen (es geht hier um eine kostenlose Dienstleistung, die natürlich nur 1x pro Person angefordert können werden soll)...

        s.o.

        Evtl. kannst Du nicht nach allen Daten suchen sondern nur nach eindeutigen. (z.B. Namen oder so) Cookies kannst Du vergessen, Serverseitige DB-Prüfung ist sicherer. Wenn jemand sich unter anderen Daten dann ein zweites Mal einträgt, dann kann er auch meistens einen Cookie löschen.

        Grüße,

        Christian

        1. Hallo,

          Oder Du machst das ganz anders: Du schaust bei jedem Submit, ob exakt dieselben Kundendaten schon mal in die DB eingetragen worden sind, und holst Dir ggf. die Kundennummer. (bzw. kombinierst das ganze in einem SELECT - das halt 1 Zeile zurückliefert, falls schon etwas vorhanden und keine Zeile falls noch nichts vorhanden) Dann brauchst Du auch keine Sessions und keine Weiterleitung.

          Ehrlich gesagt gefällt mir diese Methode im Nachhinein am besten, da Du dich nicht auf Sessions verlassen musst, und dein unteres Problem schon gelöst bekommst. Da bräuchtest Du auch keine Weiterleitung.

          Vielleicht noch ne kleine Frage, da du dich hier recht gut auszukennen scheinst: Ich möchte (weitgehend) von vornherein ausschließen, dass sich User mehrmals eintragen. Nun dachte ich daran, ein Cookie beim Eintragen zu setzen (falls Cookie da, würde dann erst gar kein Formular zum Eintragen mehr angeboten). Macht das Sinn oder wär das doch zu fies? Ja, ich weiß, nicht jeder akzepriert Cookies und so mancher ist auch etwas schlauer als der Obststand an der Ecke und löscht den Keks eben...aber "Gelegenheit macht Diebe", und je mehr Steine im Weg liegen, desto weniger hab ich mit Abstaubern zu kämpfen (es geht hier um eine kostenlose Dienstleistung, die natürlich nur 1x pro Person angefordert können werden soll)...

          s.o.

          Evtl. kannst Du nicht nach allen Daten suchen sondern nur nach eindeutigen. (z.B. Namen oder so) Cookies kannst Du vergessen, Serverseitige DB-Prüfung ist sicherer. Wenn jemand sich unter anderen Daten dann ein zweites Mal einträgt, dann kann er auch meistens einen Cookie löschen.

          --> Der Mann is Gold wert. Klar, ich vergleiche einfach signifikante Daten miteinander...au Mann...wieder etwas, worauf man auch selbst hätte kommen können! Tiefen Dank jedenfalls für die erneute Korrektur meiner wirren Gedanken.

          Gruß & nen schönen Restsonntag noch,
          Miky