Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Formular Problem nicht zwingende Checkboxen dynamischer Sammel DB-Eintrag

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Formular Problem nicht zwingende Checkboxen dynamischer Sammel DB-Eintrag

    Hey Leute,

    Titel oben ist ein wenig unglücklich, versuche mal mein Problem zu schilden.

    Formular (mobile web page), 50 Fragen, Antworten soll am Ende in eine DB eingetragen werden.
    Easy.

    Nun gibt es bei den Antworten auch checkboxen, die man ankreuzen kann.
    Im resultierenden $_REQUEST Array tauchen ggf. diese checkboxen auf, z.B so ["2-cb1"]=> string(2) "on". Wenn man diese nicht "ankreuzt", ist auch kein Eintrag im Request Array. Logisch.

    So, jetzt möchte am beim Absenden des Formulars alle Antworten mit checkbox Einträgen in der DB speichern. Quasi 50x "INSERT into..."

    Irgendwie mangelt es mir gerade an Kreativität, aber ich weiß nicht, wie ich diese Abfragen dynamisch zusammen bastel, da die Anzahl der Checkboxen pro Antwort zwischen 1 und 3 variieren kann.

    Ich hatte mir sowas gedacht wie überprüfe die nächsten Array Einträge nach der Stelle, wo jeweils die letzte Antwort kam, nach der nächsten Antwort, und dann hätte ich ja die tatsächliche Anzahl angekreuzter checkboxen. Aber das $_REQUEST Array ist ja ein key-value array und man kommt nicht über den Zahlenindex ala [5] auf den Wert, ODER?


    Einfacher wäre es natürlich nach jeder Beantwortung einer Frage das ganze an die DB zu schicken, allerdings würde dies den Arbeitsfluß und die Effizienz des Anwenders erheblich stören, da es sich wie gesagt um ein Formular handelt, welches per Smartphone ausgefüllt wird und da möchte ich nur ein einziges Mal den request an den Server schicken.

    Was denkt ihr? Wie würdet ihr das lösen? Bin ich zu doof und hierfür gibt es eine einfache und elegante Lösung?

    Fragen über Fragen....
    TIA,
    sv

  • #2
    Hm verstehe das Problem nicht.

    Willst Du einen neuen Fragenkatalog aufbauen oder einen bestehenden ausfüllen?

    Bei einem bestehenden Fragenkatalog sind Frage und Antwortmöglichkeiten schon mal über eine relationale Relation miteinander verbunden, d. h. man kann ohne weiteres sich etwas überlegen wie die checkbox beschaffen sein soll um diese zu einer Frage zuzuordnen.

    1.) Bsp. name="antwort[fragenr_antwortnr]" und nach dem _ entsprechend beim Auswerten des $_POST trennen.

    2.) Bsp. Du kannst auch ein Array im Script zusammenbauen und mit dem Post Array Vergleichen. Würde diese Variante eher bevorzugen.

    3.) Bsp. Du kannst auch jede Frage für sich speichern mittels AJAX, davon bekommt der Anwender überhaupt nichts mit. Musst nur etwas mehr implementieren wenn er z. B. eine Entscheidung wieder ändert. Auch das würde ich eher bevorzugen, geht mit jquery ziemlich leicht (tolle Javascript Lib)

    Die Anzahl der Anworten spielt an und für sich keine Rolle. Wenn man z. B. in der Datenbank 3 Tabellen verwendet. 1 für die Fragen, 1 für die Antworten und 1 um die Verbindungen zwischen Fragen und Antworten zu realisieren. Das wird dann auch mindestens die 3 NF erfüllen

    Ach ja mit Mysql lassen sich diese Inserts auch in einem erledigen. Bsp. Insert Into (id,name,...) VALUES (1,'fritz'),(1,'fritz'),..... wird vermutlich ein wenig performanter sein. Verwende ich nur nie, da es ein Syntactic Sugger von Mysql ist und Oracle & Co. damit nichts anfangen kann

    Kommentar


    • #3
      Bin ich zu doof
      Welche Antwort darfs denn sein?

      Irgendwas lässt mich vermuten, dass DU alle Daten in einer gemeinsamen Datenbankzeile speicherst?

      Kommentar


      • #4
        nun es gibt den "einfachen" Weg ...

        du baust einfach jeweils passend zu den Checkboxen ein hiddenfeld ins html-Formular, dass dir jeweils den Zustand "off" übermittelt

        Damit hättest du sichergestellt, dass egal wieviele Checkboxen angekreuzt werden, du trotzdem jedesmal die gleiche Anzahl an Daten im $_POST-Array hast ...

        oder du musst halt deine INSERT-Statements dynamisch zusammenbasteln anhand der Information, ob eine Checkbox angekreuzt ist -> dann wurde sie auch übermittelt --- oder eben nicht - dafür gibts isset() (unter anderem)

        Kommentar


        • #5
          nun es gibt den "einfachen" Weg ...

          du baust einfach jeweils passend zu den Checkboxen ein hiddenfeld ins html-Formular, dass dir jeweils den Zustand "off" übermittelt
          Danke eagle275, GENAU DAS meinte ich.
          Und auch Dir payne_of_death für umfangreiche Antwort!

          Kommentar

          Lädt...
          X