Hallo
Ich (absoluter Neuling in Sachen php) habe folgendes (siehe weiter unten) php-Skript, welches mir bei einem 1-seitigen Fragebogen beim Drücken auf den submit-Button Daten in ein Text-File auf dem Server schreibt, und zwar folgendermassen: 0;1;99;1;2;... usw.
Nun möchte ich einen mehrseitigen Fragebogen machen und mit möglichst wenig Aufwand, am besten, durch eine kleine Änderung dieses Skriptes, die Daten eines Benutzers in EINE ZEILE schreiben, wie dies bei einem einseitigen Fragebogen der Fall wäre.
Ist es möglich, dieses Skript so abzuändern, dass bis zur zweitletzten Zeile eine Wertzeile, z.B. 0;1;2;1; beim Abschicken der nächsten Seite einfach weitergeführt wird, bis der Benutzer die letzte Seite ausgefüllt hat und ein nächster Benutzer mit einer neuen Zeile beginnt, oder als Alternative (um die Gefahr zu reduzieren, dass sich zwei Benuzter in die Quere kommen) für jeden Benutzer ein neues Textfile generiert wird, welches mit den Antworten auf allen Seiten aufgefüllt wird?
ps: Für die Person die antwortet: ich verstehe leider wirklich nichts von php und es ist mir auch nicht so wichtig, welche Änderungen was zur Folge haben (wenn ich das mal so sagen darf...), froh wäre ich aber um Angaben wie für Seite 1 ist die Form-Action dieses Skript, für Seite 2 dieses, usw. Danke und liebe Grüsse Nadja
<?php
header("Location: https://www.unizh.ch/puk-west/ssl-dir/Ende.html");
/* --------------------------- Modulbeginn ---------------------------*/
/* Hier wird der PFADNAME gesetzt. Dieser darf in der Hierarchie nicht über dem
PHP-Script stehen (dies ist durch die lokale PHP-Konfiguration bedingt) */
$file_name ="result/results.txt";
/* Wenn Ihr PHP-Script (exform.php) in Ihrem Verzeichnis public_html steht,
dann wird das File "results.txt" an folgendem Ort geschrieben:
/public_html/result/
----------------------------------------------------------------------- */
// Globale Variable $row, welche eine Observation beinhaltet
$row = "";
// Der vom Formular gesandte Text wird aufgespalten
while (list($key, $val) = each($HTTP_POST_VARS)) {
// In $z wird geprueft, ob als Wert ein Array uebergeben wurde
// Dies ist bei den Mehrfachantworten der Fall
$z = count($HTTP_POST_VARS[$key]);
// Wenn z < 2 dann ist keine Mehrfachantwort vorhanden
if ($z < 2 ){
$val2="";
}
// $z ist > 1 und ist somit eine Mehrfachauswahl
else {
// Existiert ein Wert?
if (count($val)) {
// Die einzelnen Werte werden herausgelesen
for ($i=1; $i<count($val);$i++){
$val2=$val2.$val[$i];
}
}
else { echo "Error, vermutlich fehlt in Ihrem Formular ein Hidden-Feld!";}
}
// Die Zeichenkette fuer eine Observation (Zeile) wird zusammengestellt
$row = $row.$val.$val2.";";
}
// Es folgen die Anweisungen zum Schreiben des Files:
$output_line=$row."\n";
$try = touch($file_name);
if (!$try) {
echo "<p>File cannot be opened, call Systemoperator";
exit;
}
$output_stream = fopen($file_name,"a");
$lock = flock($output_stream,2);
$results = fputs ($output_stream, $output_line);
//$results Gibt die laenge des Strings an
if ($results) {
// echo "<p> Danke, die Daten wurden aufgenommen!";
}
else {
echo "<p> Die Daten konnten nicht geschrieben werden, bitte versuchen Sie es nochmals!";
}
$lock = flock($output_stream,3);
fclose($output_stream);
?>
Ich (absoluter Neuling in Sachen php) habe folgendes (siehe weiter unten) php-Skript, welches mir bei einem 1-seitigen Fragebogen beim Drücken auf den submit-Button Daten in ein Text-File auf dem Server schreibt, und zwar folgendermassen: 0;1;99;1;2;... usw.
Nun möchte ich einen mehrseitigen Fragebogen machen und mit möglichst wenig Aufwand, am besten, durch eine kleine Änderung dieses Skriptes, die Daten eines Benutzers in EINE ZEILE schreiben, wie dies bei einem einseitigen Fragebogen der Fall wäre.
Ist es möglich, dieses Skript so abzuändern, dass bis zur zweitletzten Zeile eine Wertzeile, z.B. 0;1;2;1; beim Abschicken der nächsten Seite einfach weitergeführt wird, bis der Benutzer die letzte Seite ausgefüllt hat und ein nächster Benutzer mit einer neuen Zeile beginnt, oder als Alternative (um die Gefahr zu reduzieren, dass sich zwei Benuzter in die Quere kommen) für jeden Benutzer ein neues Textfile generiert wird, welches mit den Antworten auf allen Seiten aufgefüllt wird?
ps: Für die Person die antwortet: ich verstehe leider wirklich nichts von php und es ist mir auch nicht so wichtig, welche Änderungen was zur Folge haben (wenn ich das mal so sagen darf...), froh wäre ich aber um Angaben wie für Seite 1 ist die Form-Action dieses Skript, für Seite 2 dieses, usw. Danke und liebe Grüsse Nadja
<?php
header("Location: https://www.unizh.ch/puk-west/ssl-dir/Ende.html");
/* --------------------------- Modulbeginn ---------------------------*/
/* Hier wird der PFADNAME gesetzt. Dieser darf in der Hierarchie nicht über dem
PHP-Script stehen (dies ist durch die lokale PHP-Konfiguration bedingt) */
$file_name ="result/results.txt";
/* Wenn Ihr PHP-Script (exform.php) in Ihrem Verzeichnis public_html steht,
dann wird das File "results.txt" an folgendem Ort geschrieben:
/public_html/result/
----------------------------------------------------------------------- */
// Globale Variable $row, welche eine Observation beinhaltet
$row = "";
// Der vom Formular gesandte Text wird aufgespalten
while (list($key, $val) = each($HTTP_POST_VARS)) {
// In $z wird geprueft, ob als Wert ein Array uebergeben wurde
// Dies ist bei den Mehrfachantworten der Fall
$z = count($HTTP_POST_VARS[$key]);
// Wenn z < 2 dann ist keine Mehrfachantwort vorhanden
if ($z < 2 ){
$val2="";
}
// $z ist > 1 und ist somit eine Mehrfachauswahl
else {
// Existiert ein Wert?
if (count($val)) {
// Die einzelnen Werte werden herausgelesen
for ($i=1; $i<count($val);$i++){
$val2=$val2.$val[$i];
}
}
else { echo "Error, vermutlich fehlt in Ihrem Formular ein Hidden-Feld!";}
}
// Die Zeichenkette fuer eine Observation (Zeile) wird zusammengestellt
$row = $row.$val.$val2.";";
}
// Es folgen die Anweisungen zum Schreiben des Files:
$output_line=$row."\n";
$try = touch($file_name);
if (!$try) {
echo "<p>File cannot be opened, call Systemoperator";
exit;
}
$output_stream = fopen($file_name,"a");
$lock = flock($output_stream,2);
$results = fputs ($output_stream, $output_line);
//$results Gibt die laenge des Strings an
if ($results) {
// echo "<p> Danke, die Daten wurden aufgenommen!";
}
else {
echo "<p> Die Daten konnten nicht geschrieben werden, bitte versuchen Sie es nochmals!";
}
$lock = flock($output_stream,3);
fclose($output_stream);
?>
Kommentar