Onlineumfrage programmieren (mehrseitige HTML Formular an PHP übergeben)

Havoc][

Havoc][

Debian && Gentoo'ler
Hallo zusammen,

da ich normalerweise nicht in HTML / PHP programmiere, fehlt mir noch ein wenig die Idee zu folgendem Problem:

Für meine Freundin soll ich eine Onlineumfrage programmieren. Das heisst, wir haben (simplifiziert *g) eine Seite mit Fragen und Radiobuttons like "das ist der fall / das ist nicht der fall" (kennt ihr ganz sicher von so Psycho-Online-Umfragen). Dieses Formular mit, im Moment, 5 Fragen übergebe ich einfach mit POST an ein PHP Script (index.html mit Formular --> function.php).

Diese Art der Übergabe funktioniert jetzt einwandfrei. Allerdings muss ich die Fragen auf ein paar Seiten verteilen. Das Problem: das PHP Script function.php geht automatisch alle POST Variabeln durch und baut danach eine CSV Datei auf.

Hier mal der Quellcode:

onlineumfrage_page1.html:
Code:
  1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  2                       "http://www.w3.org/TR/html4/loose.dtd">
  3 <html>
  4   <head>
  5     <!-- META DATEN -->
  6     <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  7     <meta name="robots" content="noindex">
  8     <meta name="author" content="a">
  9     <meta name="author" content="a">
 10     <meta name="author" content="a">
 11
 12     <!-- TITEL -->
 13     <title>Onlineumfrage - Uni Mannheim / Psychologie</title>
 14
 15     <!-- Sytelsheet -->
 16     <link rel="stylesheet" type="text/css" href="ou_style.css">
 17   </head>
 18   <body>
 19     <!-- ÜBERSCHRIFT -->
 20     <!-- <h1 align="center"> Psychologieprojekt </h1> -->
 21     <!-- <p align="center"><img src="psychoform.png" alt="PsychoForm"></p> -->
 22     <!-- <p align="center"><img src="psychoform_oldpic_script.png" alt="PsychoForm"></p> -->
 23     <p align="center"><img src="onlineumfrage.png" alt="Onlineumfrage"></p>
 24
 25     <br><br>
 26
 27     <!-- TABELLE & FRAGEN -->
 28     <form action="ou_func.php" method="post">
 29       <table align="center" width="90%" border="0">
 30         <tr>
 31           <td colspan="2">
 32       <h3> Bitte nehmen Sie sich kurz Zeit, und beantworten Sie diesen Fragebogen.<br>
 33                  Ich bedanke mich bereits jetzt für Ihre Mithilfe. </h3>
 34     </td>
 35   </tr>
 36
 37         <tr>
 38     <td colspan="2"> <hr> </td>
 39   </tr>
 40
 41         <tr>
 42     <td width="50%"> <b>Unter welchem Geschlecht leiden Sie?</b> </td>
 43     <td width="50%"> <input type="radio" name="q1" value="1"> Männlich <br>
 44                      <input type="radio" name="q1" value="2"> Weiblich <br>
 45                      <input type="radio" name="q1" value="3"> Programmierer <br></td>
 46   </tr>
 47
 48         <tr>
 49     <td colspan="2"> <hr> </td>
 50   </tr>
 51
 52         <tr>
 53           <td width="50%"> <b> Wie alt sind Sie? </b> </td>
 54     <td width="50%"> <input type="text" size="5" name="q2"> </td>
 55   </tr>
 56
 57         <tr>
 58           <td colspan="2"> <hr> </td>
 59   </tr>
 60
 61         <tr>
 62     <td width="50%"> <b> Welches Obst mögen Sie?</b> </td>
 63     <td width="50%">
 64       <input type="checkbox" name="q3[]" value="1"> Schokolade<br>
 65       <input type="checkbox" name="q3[]" value="2"> Hanuta<br>
 66       <input type="checkbox" name="q3[]" value="3"> Testaa<br>
 67       <input type="checkbox" name="q3[]" value="4"> tt<br>
 68       <input type="checkbox" name="q3[]" value="5"> Joghurt<br>
 69     </td>
 70   </tr>
 71
 72         <tr>
 73     <td colspan="2"> <hr> </td>
 74   </tr>
 75
 76         <tr>
 77     <td width="50%"> <b> Wie schätzen Sie sich ein?</b> </td>
 78     <td width="50%">
 79       <input type="checkbox" name="q4[]" value="1"> Stabil<br>
 80       <input type="checkbox" name="q4[]" value="2"> Fahrrad<br>
 81       <input type="checkbox" name="q4[]" value="3"> Auto<br>
 82       <input type="checkbox" name="q4[]" value="4"> Birne<br>
 83       <input type="checkbox" name="q4[]" value="5"> Cola<br>
 84     </td>
 85   </tr>
 86
 87         <tr>
 88           <td colspan="2"> <hr> </td>
 89   </tr>
 90
 91         <tr>
 92     <td width="50%"> <b> Auf welcher Uni waren Sie?</b> </td>
 93     <td width="50%">
 94             <select name="q5[]" size="5" multiple>
 95         <option value="1">Mannheim</option>
 96         <option value="2">Karlsruhe</option>
 97         <option value="3">Dresden</option>
 98         <option value="4">Berlin</option>
 99         <option value="5">Kölleee!</option>
100       </select>
101     </td>
102   </tr>
103
104         <tr>
105     <td colspan="2"> &nbsp; </td>
106   </tr>
107
108         <tr align="center">
109           <td colspan="2"> <input type="submit" value="OK"> </td>
110   </tr>
111
112         <tr align="center">
113     <td colspan="2"> <input type="reset" value="Reset"> </td>
114         </tr>
115       </table>
116     </form>
117
118     <br><br>
119
120     <p align="left">
121       <a href="http://validator.w3.org/check?uri=referer"><img src="http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01 Transitional" height="31" width="88" border="0    "></a>
122     </p>
123   </body>
124 </html>

function.php:
Code:
  1 <html>
  2   <body>
  3     <?php
  4       $filename     = "onlineumfrage.cvs";
  5       $ueberschrift = "ID;";
  6       $datensatz    = "";
  7       $datenarray   = "";
  8       $zaehlerid    = 1;
  9       $irgendwas    = "";
 10
 11       try
 12       {
 13         if (!file_exists($filename))
 14         {
 15           // Wenn die Datei noch nicht existiert, Überschrift erstellen.
 16           $datei = fopen($filename,"w+");
 17           for ($i = 1; $i <= count($_POST); $i++)
 18           {
 19             $ueberschrift .= "q".$i.";";
 20           }
 21           fwrite($datei, $ueberschrift . "IP Adresse" . "Hostname" . "Uhrzeit" . "Datum" . "\n");
 22         } else
 23         {
 24           // Wenn die Datei schon existiert, nur öffnen.
 25           $datei = fopen($filename,"a+");
 26         }
 27
 28         // Datei an den Anfang setzten...
 29         fseek($datei, 0, SEEK_SET);
 30
 31         // ID raussuchen...
 32         while(!feof($datei))
 33         {
 34           fgets($datei);
 35           $zaehlerid++;
 36         }
 37
 38         // Wieder ans Ende setzten.
 39         fseek($datei, 0, SEEK_END);
 40
 41         // ID setzten...
 42         $datensatz .= ($zaehlerid) . ";";
 43
 44         // Datensätze in String schreiben...
 45         for ($i = 1; $i <= count($_POST); $i++)
 46         {
 47           if(is_array($_POST["q".$i]))
 48           {
 49             $datenarray = "";
 50             for ($z=0; $z < count($_POST["q".$i]); $z++)
 51             {
 52               $datenarray .= $_POST["q".$i][$z] . ",";
 53             }
 54
 55             $datensatz .= substr($datenarray,0,strlen($datenarray) -1) . ";";
 56           } else
 57           {
 58             $datensatz .= $_POST["q".$i] . ";";
 59           }
 60         }
 61
 62         // String mit Datensätzen in Datei schreiben...
 63         fwrite($datei, $datensatz . $HTTP_SERVER_VARS["REMOTE_ADDR"] . ";" . gethostbyaddr($HTTP_SERVER_VARS["REMOTE_ADDR"]) . ";" . date("H:i:s") . ";" .date("d.m.Y") . ";"     . "\n");
 64
 65         // Datei schließen
 66         fclose($datei);
 67
 68         // "Vielen Dank" - Ausgeben...
 69         echo "<h1 align=\"center\"> Vielen dank für Ihre Mithilfe.</h1><br>";
 70         echo "<h2 align=\"center\"> Ihre ID lautet: " . $zaehlerid . "<br><br><br>";
 71         echo "<p align=\"center\"> Sie können das Fenster jetzt schließen.</p>";
 72       } catch (Exception $e)
 73       {
 74         echo "<h2 align=\"center\" color=red> FEHLER! Ihr Onlinefragebogen wurde nicht gespeichert. Es ist folgender Fehler aufgetreten: " .  $e->getMessage();
 75
 76       }
 77     ?>
 78   </body>
 79 </html>

Ich hoffe ihr könnt mir einen Tipp geben, wie ich das Ding am besten weiter ausbaue um weiterhin automatisiert die Datei zu schreiben.

Vielen dank im Voraus.

BTW: Die Fragen sind nicht ausgearbeitet. Es ist also nur zu debug und Testzwecken irgendwelcher unsinn dadrin.

Havoc][
 
dmaphy

dmaphy

Routinier
Wenn ich das richtig verstehe, willst du ja die Fragen auf mehrere Seiten verteilen, und brauchst dann quasi eine Art Zwischenspeicher. In diesem Fall ist der Themenbereich rund um Sessions mit PHP sicherlich interessant für dich. Einmal verstanden ist das ziemlich einfach. :)

http://www.php.net/manual/de/ref.session.php

Ich stelle mir da im Moment zwei konkretere Lösungswege vor:
1 . Du hast mehrere HTML-Formulare, allerdings in .php-Dateien, sprich page1.php, page2.php usw. jeweils in denen hast du am Anfang dann ein kurzes Script stehen, wo du die Daten der vorherigen Seite in die Session speicherst. (Diesen Anfang kann man dann sicherlich auch per include() einbinden, macht Sinn)
2. Du hast nur eine umfrage.php in die du per include() immer nur das HTML-Formular auswechselst. Würde dann ungefähr so aussehen: umfrage.php?page=1, umfrage.php?page=2 usw.

Vielleicht hat ja jemand noch andere Ansätze ;)

Ich persönlich würde zu meiner zweiten Idee tendieren^^
 
Havoc][

Havoc][

Debian && Gentoo'ler
Hallo dmaphy,

vielen dank für deine Antwort. Ich dachte das es vielleicht noch einfacher geht. Aber wahrscheinlich sind das die geschicktesten Lösungen. Bin im Moment dahingehend fleißig am umbauen. Scheint soweit sogar zu funktionieren. Ich hoffe das bleibt weiterhin unproblematisch.

Eine Frage hätte ich allerdings noch. Seit dem ich auf eine SESSION umgestiegen bin, funktioniert die Variabel "$HTTP_SERVER_VARS["REMOTE_ADDR"]" nicht mehr (Variabel ist leer). Irgendeine Idee warum das so ist?

Havoc][
 
K

Kaninchenbraten

Jungspund
$HTTP_SERVER_VARS ist keine globale Variable.
Eventuell hast Du sie in einer Funktion benutzt?

Versuchs mal mit $_SERVER['REMOTE_ADDR'];


Gruss
 

Ähnliche Themen

NagiosGrapher 1.7.1 funktioniert nicht

in_array Problem

Links aus HTML- Datei extrahieren

dovecot und postfix Konfiguration Problem

Webinterface für Gameserver/Shellscript wird nicht ausgeführt

Sucheingaben

onlineumfrage programmieren

,

php mehrseitiges formular

Oben