Daten aus Formular in CSV Spaltenweise eintragen

Kalito

Erfahrenes Mitglied
Hallo,

ich möchte gerne Daten aus einem Formular in eine CSV-Datei speichern. Das ansich ist nicht das Ding. Nur sollen die Daten nciht in eine Zeile sondern in eine Spalte gespeichert werden. Also in Spalte A kommen die Fragen aus dem Formular, in Spalte B die Antworten des ersten Fragebogen, Spalte C die Ergebnisse des zweiten Fragebogen, ... .

Wie mach ich das am dämlichsten?
 
[Ironie]Nun, wie wir ja alle bei deinem Forum sehen, musst du das Feld ...[/Ironie]

Mit diesen wenigen Angaben erwartest hoffentlich nicht ernsthaft Hilfe...

Was sind das für Fragebogen? Technisch gesehen - Kann mir grad gar nix drunter vorstellen
Wie ist da Formular aufgebaut?
In Welcher Form liest du die Daten aus dem Forum?

Mach doch mal ein Beispiel
 
Ich verstehe die Anordnung nicht so ganz.

In Spalte A stehen die Fragen (alle), in Spalte B die Antworten der ersten Seite/des ersten Formulars und in Spalte C die Antworten der zweiten Seite/des zweiten Formulars?

Code:
Spalte A  | Spalte B  | Spalte C  |
Frage 1/1 | Antwort 1 |           |
Frage 1/2 | Antwort 2 |           |
Frage 1/3 | Antwort 3 |           |
Frage 2/1 |           | Antwort 1 |
Frage 2/2 |           | Antwort 2 |
Frage 2/3 |           | Antwort 3 |

Dann würde es so aussehen wenn ich dich richtig verstanden habe!?
 
nicht ganz.

Spalte A | Spalte B | Spalte C | ...
Frage 1 | Antwort 1 | Antwort 1 | ....
Frage 2 | Antwort 2 | Antwort 2 | ...
Frage 3 | Antwort 3 | Antwort 3 | ...
. | ... | .... | ....


Sprich in jeder Spalte wird ein Datensatz gespeichert.

Das Formular besteht größtenteils aus Radio-Buttons und Checkboxes und übermittle die Daten mittels php mit post
.
.
 
Und Die Daten für Spalten B und C werden mit einmal Senden des Formulars abgeschickt?
Oder muss beim Abschicken des Forumlars das CSV gelesen werden und um eine Spalte erweitert werden?
 
Ich habe das immer noch nicht wirklich verstanden.

Willst du jetzt für jede Antwort die (für die selbe Frage) gegeben wird eine zusätzlichs Spalte anlegen?

Code:
Frage 1 | erste Antwort | zweite Antwort | dritte Antwort |
Frage 2 | erste Antwort | zweite Antwort |
Frage 3 | erste Antwort | zweite Antwort | dritte Antwort | vierte Antwort |
Frage 4 | erste Antwort |
 
jein

ich habe ein Fragebogen mit 15 Fragen. Diese 15 kommen in Spalte A. Wenn jetzt User A den Fragebogen ausfüllt kommen seine Antworten in Spalte B (Frage 1 | Antwort 1). Wenn User B den Fragebogen ausfüllt werden seine Daten in Spalte C gespeichert und so weiter und sofort.
 
jein

ich habe ein Fragebogen mit 15 Fragen. Diese 15 kommen in Spalte A. Wenn jetzt User A den Fragebogen ausfüllt kommen seine Antworten in Spalte B (Frage 1 | Antwort 1). Wenn User B den Fragebogen ausfüllt werden seine Daten in Spalte C gespeichert und so weiter und sofort.
 
Hab mal ein kleiner Test gemacht.
Meine Datei test.csv:
Code:
"Frage 1";"Antwort 1";"Antwort 1"
"Frage 2";"Antwort 2";"Antwort 2"
"Frage 3";"Antwort 3";"Antwort 3"

Und nu der Code
PHP:
<?php
//Simulation der Antworten
$neueAntworten = array(
    'Frage 1' => 'neu Antwort 1',
    'Frage 2' => 'neu Antwort 2',
    'Frage 3' => 'neu Antwort 3');

//Konstanzen definieren
define('C_FLAG_FILE', 'test.flag');
define('C_CSV_DELEMITER', ';');
define('C_CSV_ENCLOSURE', '"');

//Um gleichzeitziges lesen und Schreiben durch mehrere User zu
//verhindern wird hier geprüft ob das Flag-File existiert
while(file_exists(C_FLAG_FILE)){
    //warten bis kein Flagfile vorhanden ist
    sleep(2);
}

//Flag-File erstellen um die Exklusive-Rechte am csv-File zu erhalten
file_put_contents(C_FLAG_FILE, 'Bei Absturz des System diese Datei von Hand löschen');

//Datei zum einlsen öffnen
$handle = fopen('test.csv','r');
//Jede Zeile als CSV-Zeile auslesen
while (($data = fgetcsv ($handle, 1000, C_CSV_DELEMITER, C_CSV_ENCLOSURE)) !== FALSE ){
    //Die Frage ermitteln    
    $frage = $data[0];
    //Die Antwort auf die Frage auslesen und dem Daten-Array dieser Zeile hinzufügen
    $data[] = $neueAntworten[$frage];
    //Die Ziele zwieschenspeichern
    $rows[] = $data;
}
//Datei schliessen
fclose($handle);

//Datei zum überschreiben öffnen
$handle = fopen('test.csv','w');
//Jede zwieschengespeicherte Zeile druchgehen
foreach($rows as $data){
    //Die Zeile als CSV-Zeile speichern
    fputcsv($handle, $data, C_CSV_DELEMITER, C_CSV_ENCLOSURE);
}
//Datei schliessen
fclose($handle);

//Flagfile wieder löschen
unlink(C_FLAG_FILE);

echo 'Alles eingetragen';

?>

Und so sieht die Datei nachher aus
Code:
"Frage 1";"Antwort 1";"Antwort 1";"neu Antwort 1"
"Frage 2";"Antwort 2";"Antwort 2";"neu Antwort 2"
"Frage 3";"Antwort 3";"Antwort 3";"neu Antwort 3"
 
Zurück