Umfragensystem mit PHP
Die Betreiber von Webseiten bzw. -portalen suchen nach immer neuen Möglichkeiten, um an persönliche Informationen von ihren Besuchern und Mitgliedern zu gelangen. Neben den eigentlichen Sinn von Umfragen, etwas über die Qualität des Produktes zu erfahren bzw. die Meinung zu bestimmten Ereignissen zu erfragen, werden sie in der Internet-Welt dazu verwendet, um die Persönlichkeit des Nutzers zu erfahren.Design der Datenbank
Bei einem mehrseitigen Umfragesystem bietet es sich an, für jede Umfrageseite eine eigene Tabelle anzulegen, in der die Antworten gespeichert werden können. Aus diesem Grund benötigt eine Tabelle zum einen eine Spaltenmenge, die der Anzahl der Fragen entspricht sowie eine zusätzliche Spalte, in der die Userkennung des Teilnehmers oder ein allgemeiner Ausdruck gespeichert wird, wenn der Teilnehmer nicht bekannt ist. Wenn Userkennungen ein Thema sind, sollte sich ein bekannter User vorher einloggen, wenn er an der Umfrage teilnehmen möchte.Bei einer Umfrage gibt es Multiple-Choice- oder textbasierte Antworten, auf die in der Datenbank Rücksicht genommen werden muss. Deshalb muss auch darauf geachtet werden, welcher Spaltentyp für die einzelnen Spalten vergeben wird.
Als zusätzliche Information kann u.a. das Datum gespeichert werden, an dem der User an der Umfrage teilgenommen hat.
Anlegen der Datenbank
Falls eine entsprechende Datenbank noch nicht existiert, wird sie mit folgendem Befehl angelegt:create database survey;
Arbeitet man im MySQL-Client, muss mit dem Kommando "use survey" die Datenbank aktiviert werden, so dass mit ihr gearbeitet werden kann.Anlegen der Tabellen in der Datenbank
Ausgehend von der Überlegung, dass pro Umfrageseite 5 Fragen beantwortet werden müssen und der Zeitpunkt der Teilnehme gespeichert werden soll, kann mit folgendem SQL-Statement eine Tabelle angelegt werden:CREATE TABLE seite1 (user TEXT NOT NULL, datum DATE NOT NULL,
q1 varchar(5) NOT NULL, q2 varchar(5) NOT NULL, q3 varchar(5)
NOT NULL, q4 varchar(5) NOT NULL, q5 varchar(5) NOT NULL);
Anlegen von Indizes in den Tabellen
Da man im Vorfeld nicht wissen kann, wie viele Leute an der Umfrage teilnehmen, ist es nicht möglich, die Größe, die die Datenbank einmal erreichen wird, im Vorfeld zu beurteilen. Deshalb ist es sinnvoll für alle Tabellen in der Datenbank Indizes zu definieren. Damit wird der Zugriff auf die Informationen speziell in Tabellen mit vielen Datensätzen erheblich beschleunigt. In diesem Fall empfiehlt es sich, für die Spalte "user" einen Index zu erstellen. Das genügt, um zügig an die Antworten des entsprechenden Nutzers zu gelangen. Mit dem folgenden Befehl wird der Index für diese Spalte erstellt:CREATE INDEX user ON seite1 (user(10));
Für die angegebene Spalte muss auf jeden Fall eine Zeichenlänge angegeben werden, für die der Index "wirken" soll. Ein Index kann nur für jeweils eine Spalte definiert werden, so dass entsprechend weitere CREATE INDEX - Kommandos ausgeführt werden müssen.Erstellung des PHP-Skriptes für die erste Umfrage-Seite
Wenn es sich um einen User mit einer Kennung handelt, sollte zuerst überprüft werden, ob der User schon einmal an der Umfrage teilgenommen hat. Dies kann man am besten feststellen, ob die Kennung schon in der Datenbank gespeichert ist. Realisierbar ist dieser Schritt durch die folgende SQL-Abfrage im Skript:mysql_db_query("SELECT user FROM seite1 WHERE user="$user"");
$user_check = mysql_fetch_row($result);
$user_check
zurückgegeben. Ist die Variable leer, hat der User noch nicht an der Umfrage teilgenommen. Über die folgende if-Schleife wird das Ergebnis abgefangen.
if($user_check == $user)
{
echo "Der User hat bereits an der Umfrage teilgenommen";
}
else
{
... Anzeige des Formulares für Seite 1 ...
}
Anzeige des Formulares
Das Formular selbst kann direkt in das PHP-Skript eingebettet werden. Eine eigene HTML-Datei, aus der das PHP-Skript zur weiteren Datenverarbeitung aufgerufen wird, ist zwar auch möglich, aber nicht notwendig. Im else-Zweig der obigen if-Schleife kann jetzt folgender Code eingebunden werden:print("
<form action="page2.php" method=post>
<h1>Fragen zum Kauf des Autos</h1>
<p>In welchem Jahr wurde das Auto gekauft?</p>
<select name=year size=1>
<option value='2004'>2004
<option value='2005'>2005
<option value='2006'>2006
</select>
<p>Wurde für den Kauf ein Kredit aufgenommen ?</p>
<input type=checkbox name=credit value=yes> JA
<input type=checkbox name=credit value=no> NEIN
<p>Wie lange hat es geschätzt bis zur Kaufentscheidung gedauert?</p>
<select name=time_period size=1>
<option value='1 week'>1 Woche
<option value='1 month'>1 Monat
<option value='1 year'>1 Jahr
<option value='longer'>mehr als 1 Jahr
</select>
<p>Welches Auto fuhren Sie vor dem Neukauf ?</p>
<input type=text name=old_car size=30>
<p>Warum haben Sie sich für diese Marke entschieden ?</p>
<textarea name=decision cols=50 rows=10></textarea>
<br><br>
<input type=submit value="Zur Seite 2">
</form>
");
Im Skript für die nächste Umfrageseite werden die Eingaben aus der aktuellen Seite zuerst verarbeitet, bevor die neuen Fragen angezeigt werden. Damit ist das Skript für die erste Seite schon fertig.
PHP-Skript für die zweite Umfrageseite
Nach der Herstellung und Überprüfung der Verbindung zur Datenbank muss zuerst auf die von der vorigen Seite übergebenen Informationen zugegriffen werden. Dies wird durch die folgenden Codezeilen möglich.$year = $_POST['year'];
$credit = $_POST['credit'];
$time_period = $_POST['time_period'];
$old_car = $_POST['old_car'];
$decision = $_POST['decision'];
$_POST
durch $_GET
ersetzt werden.Nachdem noch mit der Zeile
$date = date("d.m.Y");
das Datum der Umfrage ermittelt wurde, können alle Informationen in die Datenbank eingetragen werden.
Eintrag in die Datenbank + Überprüfung
Der folgende Code-Abschnitt schreibt die Antworten in die Datenbank, überprüft ob alles geklappt hat und gibt in Abhängigkeit des Resultates entweder eine Fehlermeldung aus oder zeigt das Formular mit den neuen Fragen an.mysql_select_db("test",$connect);
$result = mysql_query("
INSERT INTO seite1 (user,datum,q1,q2,q3,q4,q5)
VALUES('$user','$date','$year','$credit','$time_period',
'$old_car','$decision')
");
if(!$result)
{
echo "Eintrag in die Datenbank nicht möglich; Fehlerursache: " . mysql_error();
}
else
{
... Anzeige des Formulares für Seite 2 ...
}
action
in der form-Zeile das Skript "page3.php" eingetragen werden und die Bezeichnung des Submit-Buttons auf "Zur Seite 2" geändert werden muss.
Auswertung der Umfrageergebnisse
Anhand der dazugehörigen SQL-Abfragen soll aufgezeigt werden, welche Auswertungen anhand der gespeicherten Informationen in der Datenbank möglich sind. Da man auch nicht zwingend davon ausgehen kann, dass jeder User auch wirklich die komplette Umfrage beantwortet, kann die Auswertung nur für die jeweilige Seite stattfinden.Hinweis: Die hier beschriebenen SQL-Statements beziehen sich immer auf die erste Umfrageseite.
Anzahl der registrierten und anonymen Teilnehmer
In der Beispielumfrage gibt es zwei Teilnehmerkategorien, die an der Umfrage teilnehmen können. Daraus ergibt sich die Möglichkeit, dass dreimal eine Gesamtanzahl der Teilnehmer ermittelt werden kann. Wenn ein nicht-registrierter User an der Umfrage teilnimmt, wird in der Spalte "user" automatisch das Wort "anonymus" eingetragen. Ist der User registriert, wird seine User-Kennung gespeichert. Über verschiedene SQL-Abfragen können alle Teilnehmerzahlen ermittelt werden.Besucher:
SELECT count(user) FROM seite1 WHERE user="anonymus";
Registrierte Nutzer:
SELECT count(user) FROM seite1 WHERE user != "anonymus";
Gesamtanzahl:
SELECT count(user) FROM seite1;
Wieviele User haben an einem bestimmten Tag teilgenommen?
Dazu muss zuerst ermittelt werden, welche Tage in der Datenbank gespeichert sind. Wenn alle Tage bekannt sind, wird durch eine zweite Abfrage die Useranzahl ermittelt. Auch hier ist es dann wiederum möglich, nach anonymen und registrierten Usern zu unterscheiden. Dieses PHP-Code-Segment zeigt, wie die Details ermittelt werden können:$result = mysql_query("SELECT distinct(datum) FROM seite1");
while($datum = mysql_fetch_row($result))
{
$output = mysql_query("SELECT count(user) FROM seite1 where
datum = "$datum"");
$user_cnt = mysql_fetch_row($output);
}
$datum
und $user_cnt
beinhalten die notwendigen Informationen.
Wieviele User haben eine bestimmte Antwort gegeben?
Anhand des Tabellennamens in der SQL-Abfrage steht fest, um welche Tabelle es sich handelt und durch den Spaltennamen im where-Filter wird die Frage eindeutig festgelegt.$result = mysql_query("SELECT count(user) FROM seite1
WHERE q1 = '2004'");
Prozentuale Anteile der Teilnehmer für bestimmte Antworten
Dazu muss die erste und die dritte Auswertung gleichzeitig ausgeführt werden. Wenn die beiden Werte bekannt sind, muss noch der prozentuale Anteil ausgerechnet werden, was durch den folgenden PHP-Code möglich ist:$percent = ($part / $complete) * 100;
Hinweis: Der Inhalt von$part
entspricht der tatsächlichen Teilnehmerzahl für eine Antwort während $complete
der kompletten Teilnehmeranzahl entspricht.
Du arbeitest in einer Agentur oder als Freelancer?
Dann wirf doch mal einen Blick auf unsere Software FeatValue.
Weiterlesen: ⯈ SOAP
Über uns
Wir entwickeln Webanwendungen mit viel Leidenschaft. Unser Wissen geben wir dabei gerne weiter. Mehr über a coding project