Teil von  SELFPHP   Teil von  Praxisbuch  Teil von  Lösungen für den Alltag
  +++ SELFPHP CronJob-Service :: Jetzt auch als Professional-Version verfügbar! +++



:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: SELFPHP Forum ::

Fragen rund um die Themen PHP? In über 120.000 Beiträgen finden Sie sicher die passende Antwort!  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

:: Qozido ::

Die Bilderverwaltung mit Logbuch für Taucher und Schnorchler.   

 
 
Online-Umfrage




Dieses Thema ist immer wieder etwas, das Entwickler und Anwender gleichermaßen vor eine Herausforderung stellt, die es zu bewältigen gilt. Der Anwender muss eine Wahl treffen, und der Entwickler muss dafür sorgen, dass die Stimmabgabe ordnungsgemäß verarbeitet wird.

Im folgenden Beispiel versuche ich, Ihnen als Entwickler eine Lösung an 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 aus zwei wesentlichen Skripts zusammen.
  • umfrage.php – In diesem Skript wird mithilfe eines Arrays, 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, das 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 – Enthält das Gästebuchlogo (umfragelogo.gif), hier können Sie nach Belieben weitere Grafikdateien ablegen.
  • css – Enthält die CSS-Datei (umfrage.css), welche für das Layout der Online-Umfrage zuständig ist.
  • daten – In diesem Ordner befindet sich die Textdatei (stimmen.txt), welche die abgegebenen Stimmen der Onlinewähler enthält.




Bild 5.10: Dateischema 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 2005";
$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>




Bild 5.11: Aufbau der dynamischen Bestandteile der Eingabemaske



Bild 5.12: Umfrage samt Eingabemaske

Die vorliegende Umsetzung legt mithilfe eines Cookies fest, dass jeder Onlinewä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 damit jedoch bereits eine gewisse Kontrolle über die Online-Umfrage erreichen. Eine Kombination aus Cookie und IP-Zeitsperre würde zusätzliche Sicherheit bieten, eine absolute Sperre wird es jedoch ohne größeren Aufwand nicht geben.

Um die Umfrageergebnisse zu betrachten, wird folgendes Skript verwendet:

2. Ergebnis.php

<?php

$thema = "Atomic-Umfrage 2005";
$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 ausgeben
$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>




Bild 5.13: Umfrageergebnis – Tabellenfelder dienen hier als Anzeige


Sie können durch eine leichte Anpassung die Umfrageergebnisse auch mithilfe von Grafikdateien wiedergeben. Hierfür müssen Sie lediglich die folgende echo-Codezeile 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>
";




Bild 5.14: Umfrageergebnis – Balkendarstellung


 




:: Premium-Partner ::

Webhosting/Serverlösungen


Premium-Partner MECO Systemhaus GmbH & Co. KG
Premium-Partner PSW GROUP GmbH & Co. KG
Premium-Partner BPI-Systeme
Premium-Partner Pixel X
Premium-Partner
 

:: SELFPHP Sponsoren ::


Microsoft Deutschland GmbH
twosteps.net - ...Premium-Webhosting
Sedo - Bei uns wird PHP großgeschrieben
hostfactory.ch - OptimaNet Schweiz AG
ZEND - The PHP Company
Kaspersky Labs
HighText iBusiness
SELFPHP Sponsoren
 

Qozido


© 2001-2009 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt