Hannes: Daten aus einem Eingabeformular in Tabelle/Datenbank schreiben?

Hab schön öfter einen Fragebogen mit Hilfe von einem Formular gemacht. Bisher hab ich die Eingaben von den Fragebogen per Mail an mich geschickt und dann in eine Excel oder SPSS Datei geschrieben.
Da ich aber eine Umfrage mit größere Umfang (ca. 1000) plane, möcht ich jetzt das es die Ergebnisse automatisch gleich in eine Datei schreibt.

Welche Möglichkeiten bzgl. des Datenformates (xls., sav., dbf,...) hab ich da?

Und vor allem wie verwirkliche ich das ganze am einfachsten?

thx
Jo

  1. Hallo,

    HTML, aktives Server-Backend und Datenbank

    Benutzerauthentifikation,
    Formular
    Vorschau
    und dann Eintragung
    Damit nicht gemogelt wird, muss man registrieren, welcher Benutzer schon geantwortet hat.

    LG
    Chris

    1. Danke für deine Antwort.

      Ist leider ein wenig abstrackt für mich.

      Gint es irgendwo vielleicht ein Script oder was ähnliches wo ich mir das mal ansehen kann?

      1. Hallo Hannes,   <-- Dies ist die Begrüßung

        Danke für deine Antwort.

        Ist leider ein wenig abstrakt für mich.

        Gibt es irgendwo vielleicht ein Script oder was ähnliches wo ich mir das mal ansehen kann?

        Was Du da vorhast, ist schon ein riesiger Klotz. Das kann man sich nicht in einem einzigen Script anschauen.

        Du benötigst

        • Anmeldesystem für Benuzter.
            Kann auch durch Zuweisung von Zugangskriterien ersetzt werden

        • Erkennungssystem für Benutzer
            nebst "Tracking"

        • Formulargenerator, wenn Du es nicht jedes Mal einzeln
            aufbauen willst. Eventuell HTML-Mailer für die Formulare

        • Multipostsperre bei fehlerhafter Benutzung (nicht böswillig)

        • Datenbank oder Flatfile (CSV könnte schon reichen)

        • Kontrollsystem

        • Mahnsystem

        • Auswertesystem

        So ungefähr jedenfalls.

        Du solltest mal damit anfangen, ein Formular aufzubauen, und dieses als "Affenformular" immer wieder zu betrachten.

        Der nächste Schritt wäre dann die gezielte Überprüfung der übermittelten Formulardaten per Script und die Wiedervorlage, solange die Daten unvollständig sind

        Dann, wenn die Daten vollständig sind, eine Eintragung in eine Datei vornehmen. Dazu benötigst Du die Dateifunktionen. Ich empfehle das einfache Anhängen der Daten an eine Datei im CSV-Format.

        Dann ein Script bauen, dass die bereits vorhandenen Daten tabellarisch anzeigen kann.

        Dann ein Auswerte-Script

        Der Rest wächst dann so nach und nach.

        Ich helf Dir gerne. Im Augenblick sitze ich noch krank zuhause und habe Zeit dafür.

        LG
        Chris

        1. Hi Chris

          Also, das Formular (pkt. 3) hab ich schon mal fertig, nur das ausgefüllte Formular wird an mich gemailt (hab schon ein Formmailer Script) und nicht in eine Tabelle (Datenbank) geschrieben.

          1. Anmeldesystem für Benuzter.
            Kann auch durch Zuweisung von Zugangskriterien ersetzt werden

          2.  Erkennungssystem für Benutzer
            nebst "Tracking"

          3. Formulargenerator, wenn Du es nicht jedes Mal einzeln
            aufbauen willst. Eventuell HTML-Mailer für die Formulare

          4. Multipostsperre bei fehlerhafter Benutzung (nicht böswillig)

          5. Datenbank oder Flatfile (CSV könnte schon reichen)

          6. Kontrollsystem

          7. Mahnsystem

          8. Auswertesyste

          Zu deiner Auflistung; ich versteht nicht warum es so viele Punkte braucht.
          Da es mir egal ist, ob der Fragebogen ein oder mehrmals von der selben Person ausgefüllt wird, glaub ich das man die ersten paar Punkte (1 und 2) weg lassen kann.

          Was die weiteren Pkte betrifft, hab ich ehrlich gesagt wenig Ahnung. Aber das dürft hinkommen für das was ich machen möchte.

          Wobei ich wiederrum nicht weiß für was das Kontrollsystem und v.a. das Mahnsystem da sind.

          Zu Punkt 8, den kannst gleich vergessen, weil die Auswertung erfolgt erst nach Beendidung der Befragung und wird auch nicht fürs Web verwendet.

          Die Information über den Fragebogen erfolgt per zuzsendung von einer Mail etwas mehr als 1000 Personen.

          vg
          Jo

          1. Hallo,

            Zu deiner Auflistung; ich versteht nicht warum es so viele Punkte braucht.

            da kann ich Dir auch noch nicht wirklich weiterhelfen, denn Deine Spezifikationen (Pflichtenheft) kenne ich noch nicht.

            Da es mir egal ist, ob der Fragebogen ein oder mehrmals von der selben Person ausgefüllt wird, glaub ich das man die ersten paar Punkte (1 und 2) weg lassen kann.

            Was ist das dann für eine Statistik, bei der jeder nMal antworten darf, wobei n für jeden individuell ist?

            Was die weiteren Pkte betrifft, hab ich ehrlich gesagt wenig Ahnung. Aber das dürft hinkommen für das was ich machen möchte.

            Wobei ich wiederrum nicht weiß für was das Kontrollsystem und v.a. das Mahnsystem da sind.

            Sollte man nicht feststellen können, ob der "Bogen" vollständig, fast vollständig oder unbrauchbar ist? Und ob nun genügend Antworten verschiedener User zurückgekommen sind, sollte man doch vielleicht auch feststellen können.

            Zu Punkt 8, den kannst gleich vergessen, weil die Auswertung erfolgt erst nach Beendidung der Befragung und wird auch nicht fürs Web verwendet.

            Aber du möchstest die Daten doch aus der DB wieder herausbekommen, oder?

            Die Information über den Fragebogen erfolgt per zuzsendung von einer Mail etwas mehr als 1000 Personen.

            Dann benötigst Du wahrscheinlich einen Mailer, der zertifizierte Formulare versendet?

            Womit willst Du also anfangen?

            Ich schlage vor, dass Du ein einfaches Webfomular mit allen Feldtypen (text, textarea, radio, checkbox, select single, select multiple, uploadfeld) aufbaust, und versuchst, die Werte zu speichern. Ein anderes Script könnte alle Werte aus der Datei dann als Tabelle anzeigen.

            Das sollte als Aufgabe erstmal genügen.

            LG
            Chris

            1. Hi

              Das Webformualr ist fertig!

              Kann es auch anzeigen lassen, halt nur als Text.

              Für alles weitere fehlt mir im Moment das Wissen. Müsst mich erst mal wieder ordentlich einlesen und ein wenig herum probieren.

              Kannst dir das bisherige ja mal anschaun.

              www.radreisen.at.tt/ergebnis2/

              vg

              »»

              1. Hallo Hannes,

                Das Webformualr ist fertig!
                Kannst dir das bisherige ja mal anschaun.

                http://www.radreisen.at.tt/ergebnis2/

                Die Datei ist nicht verfügbar...

                Ich guck nachher nochmal

                LG

                Chris

                1. Sorry falsche Adresse.

                  www.radreisen.at.tt/ereignis2/

                  1. Hallo Hannes,      <-- Das ist die Begrüßung. Darauf wird hier Wert gelegt :-)

                    Sorry falsche Adresse.

                    grausamer Provider. Such Dir nur bald einen anderen.

                    www.radreisen.at.tt/ereignis2/

                    Ok, die Daten kommen also bei Dir an, und können ausgewertet werden.
                    Dann bau Dir nun ein Array mit den Daten auf:

                    $_daten['Wirtschaft'] = $_POST['Wirtschaft'];
                      $_daten['Sport']      = $_POST['Sport'];

                    ## ...

                    if(isset($_POST['sensationel'])
                         and $_POST['sensationel'] >= 1
                         and $_POST['sensationel'] <= 4)
                      {
                        $_daten['sensationel'] = $_POST['sensationel'];
                      }
                      else
                      {
                        $_daten['sensationel'] = 0;  ## oder auch = '';
                      }

                    ## usw.

                    Wichtig dabei ist nur, dass jede Spalte belegt wird, notfalls eben mit einem neutralen Element. Auch die Reihenfolge muss stimmen.

                    Erreichen kannst Du das z.B. auch, indem Du die Namen (Keys) vorher in einem anderen Array anreihst, und dann daraus ein leeres Array mit diesen Namen als Keys bildest. Dafür gibt es in PHP Array-Funktionen. Dieses "Namen-Array" kannst Du dann später auch zum Wiederauslesen der Datei benutzen, die wir hier nun schreiben wollen.

                    Um im CSV-Format schreiben zu können, müssen die Feldwerte erst behandelt werden. Die werte werden in Begrenzern eingeschlossen (") und dann die so eingegrenzten Werte einfach mit Semikolon aneinandergereiht. Damit das sicher funktioniert, müssen in den Werten enthaltene Begrenzer erst gedoppelt (maskiert) werden.

                    $delim = '"';
                    $sep   = ';';
                    $CRLF  = chr(13).chr(10);

                    function array_mask($_array,$mask)
                    {
                      foreach($_array as $key => $val)
                      {
                        if (is_array($val))
                        {
                          array_mask($_array[$key],$mask);
                        }
                        else
                        {
                          str_replace($delim,$delim.$delim,$_array[$key]);
                        }
                      }
                      return $_array;
                    }

                    $_daten = array_mask($_daten,$delim);

                    Und dann baust Du das Array zusammen zu einem Datensatz.

                    $record_str = $delim.implode($delim.$sep.$delim , $_daten).$delim.$CRLF;

                    Diesen Satz kannst Du Dir auch anschauen.

                    echo '<p>'.htmlentities($record,ENT_QUOTES)."</p>\n";

                    oder in die Datei schreiben. Dier musst Du erstmal öffnen:

                    $fh = fopen('umfrage.csv','ab+');

                    und den Satz wegschreiben:

                    fwrite($fh, $record);

                    und die Datei schließen

                    fclose($fh);

                    diese Datei kannst Du später mit Excel einlesen und auswerten.

                    Wenn Du Fragen zu den einzelnen Schritten hast, melde Dich.

                    LG
                    Chris

                    1. Hi Hannes,

                      da ist mir ein Fehler unterlaufen:

                      function array_mask($_array,$mask)
                      {
                        if (is_array($_array))
                        {
                          foreach($_array as $key => $val)
                          {
                            array_mask($_array[$key],$mask);
                          }
                        }
                        else
                        {
                          str_replace($delim,$delim.$delim,$_array);
                        }
                        return $_array;
                      }

                      So sollte die Funktion stimmen jetzt.
                      Rekursion ist eben irgendwie anders :-)

                      LG
                      Chris

                      1. Hi Jo,

                        Verflixt nochmal!

                        da ist immer noch ein Fehler drin. Ich bin irgendwie noch angeschlagen von den Schmerztabletten :-(

                        function array_mask($_array,$mask)
                        {
                          if (is_array($_array))
                          {
                            foreach($_array as $key => $val)
                            {
                              array_mask($_array[$key],$mask);
                            }
                          }
                          else
                          {

                        #»»     str_replace($delim,$delim.$delim,$_array);
                               str_replace($mask,$mask.$mask,$_array);

                        }
                          return $_array;
                        }

                        innerhalb der Funktion hatte ich den Begrenzer $mask genannt. Dann muss er auch überall so heißen!

                        Aber mit der Einstellung

                        error_reporting(E_ALL);

                        am Anfang Deines Scriptes, hättest Du das bestimmt auch gefunden.

                        LG
                        Chris

                        1. Hi Chris

                          Hab schon was erledigt.

                          Das mit dem Fragebogen, Eingabe war ja schon fertig und auch der array der der Daten hab ich nun gemacht.

                          Für die weiteren Arbeitsschritten reicht mein Wissen nicht mehr ganz aus.

                          • kann ich en restlichen Code welchen du getippt hast an den array anhängen?
                          • ist dieser schon fertig? - so dass ich das ganze mal testen kann?

                          hab im Moment zwei Dateien, den Fragebogen (eingabe) und die 2. Datei mit dem array und dem restlichen Code welchen du gepostet hast. Die zwei Dokumente sind schon verlinkt.

                          vg
                          Jo

                          P.S. Hast eigentlich auch ICQ (227065918) oder ein anderen Messanger (AIM)?

                          1. Hi Johannes,

                            • kann ich en restlichen Code welchen du getippt hast an den array anhängen?
                            • ist dieser schon fertig? - so dass ich das ganze mal testen kann?

                            Wenn Du die korrigierten Versionen benutzt, sollte es klappen.
                            Ich hatte meinen Webserver vorhin demoliert. Nun läuft er wieder. da kann ich die Scripte selber nochmal austesten.

                            Außerdem gibt es ab PHP 5.1x die fertige Funktion fputcsv()
                            http://de.php.net/manual/en/function.fputcsv.php

                            Die ersetzt dann die anderen Übungen fast vollständing.

                            LG
                            Chris

                            1. Hi Chris

                              Hab die umgeändereten Dateien auf einen neuen Webspace (mit PHP 4.4.1, ist also nichts mit "fputcsv()" ) gestellt.

                              Leider kommt eine Fehlermeldung. Und ich weiß nicht was falsch ist.

                              vg
                              Jo

                              1. Hi Chris

                                Hab die umgeändereten Dateien auf einen neuen Webspace (mit PHP 4.4.1, ist also nichts mit "fputcsv()" ) gestellt.

                                Leider kommt eine Fehlermeldung. Und ich weiß nicht was falsch ist.

                                vg
                                Jo

                                Hab vergessen die neue Adresse zu posten:
                                 http://josbg.jo.funpic.de/frage/

                    2. Hi Chris

                      Danke für die Antwort mit Code.

                      Werd mir das am Nachmittag mal genauer ansehen und alles eingeben.
                      Das mit dem Formular umwandeln bekomm ich sicher hin.

                      Meld mich dann sicher wieder  ;-)

                      vg
                      Jo