| |
| * Link führt ins Internet |
|
| |
Dieses Thema ist immer wieder etwas das Entwickler und Anwender gleichermassen vor eine Herausforderung stellt, die es zu bewältigen gilt. Der Anwender muss die Qual der Wahl treffen und der Entwickler muss dafür, sorgen dass die Stimmabgabe ordnungsgemäss verarbeitet wird.
Im folgenden Beispiel versuchen wir Ihnen zumindest für Sie als Entwickler eine Lösung in die Hand zu geben, mit deren Hilfe Sie hoffentlich in der Lage sind erfolgreich Online-Umfragen durchzuführen, sei es für Wahlen oder für die Lieblingsfarbe Ihrer Besucher.
Die Online-Umfrage setzt sich hierbei aus zwei wesentlichen Skripten zusammen.
. umfrage.php - in diesem Skript wird mit Hilfe eines Array, welches die möglichen Auswahlmöglichkeiten enthält eine dynamische Eingabemaske (Formular) erzeugt, mit deren Hilfe der Besucher in der Lage ist seine Stimme abzugeben. Die Stimmen für die jeweiligen Auswahlmöglichkeiten werden in der Textdatei stimmen.txt gespeichert. Nach der Stimmabgabe wird ein Cookie erzeugt, welches eine erneute Stimmabgabe verhindert soll.
. eregbnis.php - in diesem Skript werden die Umfrageergebnisse aus der Textdatei stimment.txt in grafischer Form ausgegeben.
Zusätzlich wurden folgende drei Ordner angelegt:
. bild - dieser enthält das Gästebuchlogo (umfragelogo.gif), hier können Sie nach belieben weiter Grafikdatein ablegen.
. css - dieser enthält die CSS-Datei (umfrage.css), welche für die Layout-Formatierung der Online-Umfrage zuständig ist.
. daten - in diesem Ordner befindet sich die Textdatei (stimmen.txt), welche die abgegeben Stimmen der Online-Wähler enthält.
Struktur der Atomic-Umfrage
1. Umfrage.php
<?php
if (isset($_POST["ergebnis"])) {
// Aktuelle Sperre 1 Minute
// 30 Tage Sperre time()+60*60*24*30
setcookie("abgestimmt","ja",time()+60);
}
$thema = "Atomic-Umfrage 2004";
$auswahl = array("Super","Sehr Gut","Gut","Naja","Schlecht");
$anzahl = count($auswahl);
?>
<html>
<head>
<title>Atomic-Umfrage</title>
<link rel='stylesheet' type='text/css' href='css/umfrage.css'>
</head>
<body>
<img src='bild/umfragelogo.gif' width='506' height='62'><br>
<h3><?php echo $thema ?></h3>
<form method='post' action='<?php echo $PHP_SELF; ?>'>
<p>
<?php
foreach ($auswahl as $key=>$eintrag) {
echo "<input type='radio' name='ergebnis' value='$key'> $eintrag<br>\n";
}
?>
</p>
<?php
if (empty($_COOKIE["abgestimmt"]) && !isset($_POST["ergebnis"])) {
// Submit nur zeigen, wenn Formular noch nicht abgeschickt wurde
echo "<input type='submit' value='Daten senden'>";
} else {
echo "<p>Danke für die Übermittlung der Daten!</p>\n";
// Formular abgeschickt? Aber bisher noch nicht abgestimmt?
if (empty($_COOKIE["abgestimmt"]) && isset($_POST["ergebnis"])) {
// Dateiname in Variable speichern
$datei="daten/stimmen.txt";
// Datei vorhanden?
if (file_exists($datei)) {
$fp=fopen($datei,"r+");
} else {
$fp=fopen($datei,"w");
}
// Datei einlesen
$stimmen=fread($fp,filesize($datei));
// String aus Datei in Array zerlegen
$stimmen=explode(",",$stimmen);
// Der gewählte Punkt wird um 1 erhöht!
$stimmen[$_POST["ergebnis"]]++;
// Stimmen in einem String zusammensetzen
for ($i=0;$i<$anzahl;$i++) {
$total .= $stimmen[$i] .",";
}
// Neuen String in Datei schreiben
rewind($fp);
fputs($fp,$total);
fclose($fp);
}
}
?>
</form>
<p>
[ <a href='ergebnis.php' target='_blank'>Umfrageergebnisse betrachten</a> ]
</p>
</body>
</html>
|
Umfrage samt Eingabemaske
Die vorliegende Umsetzung legt mit Hilfe eines Cookies fest, dass jeder Online-Wähler lediglich einmal pro Minute eine Stimme abgeben kann. Natürlich lässt sich diese Sperrzeit beliebig erhöhen.
| Hinweis: Die eingesetzte Sperre stellt keinen absoluten Schutz dar. Sie können hiermit jedoch bereits eine gewisse Kontrolle auf die Online-Umfrage erreichen. Eine Kombination aus Cookie und IP-Zeitsperre würde zusätzliche Sicherheit bieten, eine absolute Sperre wird es jedoch nicht geben ohne grösseren Aufwand zu betreiben. |
Um die Umfrageergebnisse zu betrachten wird folgendes Skript verwendet.
2. Ergebnis.php
<?php
$thema = "Atomic-Umfrage 2004";
$auswahl = array("Super","Sehr Gut","Gut","Naja","Schlecht");
$farben = array("9999FF","8888FF","7777FF","6666FF","5555FF");
$anzahl = count($auswahl);
?>
<html>
<head>
<title>Atomic-Umfrage - Ergebnis</title>
<link rel="stylesheet" type="text/css" href="css/umfrage.css">
</head>
<body>
<img src='bild/umfragelogo.gif' width='506' height='62'><br>
<h3><?php echo $thema; ?> - Ergebnisse</h3>
<?php
$datei="daten/stimmen.txt";
@$fp=fopen($datei,"r");
@$stimmen=fread($fp,filesize($datei));
@fclose($fp);
// String zerlegen, Array entsteht
$stimmen=explode(",",$stimmen);
for ($i=0;$i<$anzahl;$i++) {
$gesamt += $stimmen[$i];
}
if ($gesamt>0) {
// Höchstlänge der Balken angeben
$laenge=400;
for ($i=0;$i<$anzahl;$i++) {
// Anteil der Balken
$blaenge=$stimmen[$i]*$laenge/$gesamt;
// Werte auf ganze Zahlen runden
$blaenge= round($blaenge);
// Prozentwert ermitteln und ausgaben
$prozent = sprintf('%1.1f', 100*$stimmen[$i]/$gesamt);
echo "
<table border='0'>
<tr>
<td width='100'>$auswahl[$i]</td>
<td> </td><td width='$blaenge' bgcolor='$farben[$i]'> </td>
<td> <i>$prozent% ($stimmen[$i])</i></td>
</tr>
</table>
";
}
echo "<p>Anzahl der Stimmen: <b>$gesamt</b></p>";
} else {
echo "<p>Bisher wurden noch keine Stimmen abgegeben!</p>";
}
?>
</body>
</html>
|
Umfrageergebnis - Tabellenfelder dienen hier als Anzeige
Wie Sie feststellen werden können Sie durch eine leichte Anpassung, die Umfrageergebnisse auch mit Hilfe von Grafikdateien wiedergeben. Hierfür müssen Sie lediglich die folgende echo-Codzeile einsetzen.
echo "
<table border='0'>
<tr>
<td width='100'>$auswahl[$i]</td>
<td> </td><td><img src='bild/balken_ende_l.gif' width='6' height='10'><img src='bild/balken.gif' width='$blaenge' height='10'><img src='bild/balken_ende_r.gif' width='6' height='10'> </td>
<td> <i>$prozent% ($stimmen[$i])</i></td>
</tr>
</table>
";
|
|
|
|
|
|
|
|