====== Übung Umfragemodul ======
Erstelle für ein Content-Management-System (CMS) ein Modul, welches eine Umfrage realisiert. Der Webmaster des CMS soll im laufenden Betrieb über eine Eingabemaske Umfragen erstellen und bearbeiten können.
==== Textdatei und Datenbank ====
Eine Umfrage besteht aus einem Titel und maximal fünf Auswahlmöglichkeiten. Der Titel findet sich in einer Textdatei, die Auswahlmöglichkeiten in einer Datenbank.
* Erstelle eine Textdatei (''titel.txt'') und gib in die Datei den Titel einer Umfrage ein.
* Erstelle eine MySQL-Datenbank und eine entsprechende Tabelle (Name: umfrage) mit den Feldern:
|auswahl|varchar(50)|
|zaehler|varchar(4)|
* Fülle die Datenbank mit maximal fünf Auswahlmöglichkeiten. Gib beim Zähler überall 0 ein.
==== Backend (backend.php) ====
Erstelle eine PHP-Datei namens ''backend.php'', in der der Webmaster die Umfrage aktualisieren bzw. durch eine neue Umfrage mit zurückgesetzten Zählern ersetzen kann, mit folgenden Feldern:
{{:inf:inf7b_201011:mysql:umfrage_bearbeiten.gif|}}
* Die Felder sollen entsprechend der Eingaben des Titels (aus titel.txt) bzw. der Auswahloptionen (aus der Datenbank) gefüllt werden.
* Durch Drücken des Buttons »Speichern« in der Datei ''backend.php'' sollen die geänderten Eingaben gespeichert werden.
* Der geänderte Titel wird in die Textdatei ''titel.txt'' geschrieben, die Auswahl-möglichkeiten und die Anzahl werden in der Datenbank aktualisiert. (Beachte: Es können auch Auswahloptionen freigelassen werden, wenn sich der Webmaster entscheidet z.B. nur drei Optionen anzugeben.)
* Bei erfolgreichem Speichern wird eine entsprechende Meldung ausgegeben.
==== Frontend (abstimmung.php)====
{{:inf:inf7b_201011:mysql:umfrage_abstimmen.gif|}}
* Der Besucher der Website soll an der Abstimmung teilnehmen können. Erstelle dazu eine Datei ''abstimmung.php''.
* Der Titel der Umfrage sowie die nicht leeren Auswahlmöglichkeiten sollen aufgelistet werden.
* Mittels Radio-Buttons kann der Besucher eine der Auswahl-möglichkeiten auswählen und an der Umfrage teilnehmen. In der Datenbank wird dabei der Zähler der ausgewählten Option erhöht. (Auf Verhinderung von Manipulationen durch mehrmaliges Abstimmen soll in dieser Version verzichtet werden.)
* Nach getätigter Umfrage wird das Abstimmungsergebnis (''ergebnis.php'') angezeigt:
==== Abstimmungsergebnis (ergebnis.php) ====
Nach getätigter Umfrage soll eine Darstellung der Online-Umfrage am Bildschirm ausgegeben werden.
{{:inf:inf7b_201011:mysql:umfrage_ergebnis.gif|}}
* Bei der Ausgabe sollen folgende Elemente vorkommen:
* die Gesamtzahl der abgegebenen Stimmen,
* die Anzahl der Stimmen pro Auswahlmöglichkeit,
* der prozentuelle Anteil an den Gesamtstimmen gerundet auf zwei Dezimalstellen sowie
* ein graphischer Balken mit entsprechender Breite. Der Balken mit der höchsten Stimmanzahl soll genau 150 Pixel breit sein, die restlichen Balken anteilsmäßig kürzer. Balken mit verschiedenen Farben und 1 px Breite (umfrage0.gif bis umfrage4.gif) finden sich hier: {{:inf:inf7b_201011:mysql:umfrage0.gif|umfrage0.gif}}, {{:inf:inf7b_201011:mysql:umfrage1.gif|umfrage1.gif}}, {{:inf:inf7b_201011:mysql:umfrage2.gif|umfrage2.gif}}, {{:inf:inf7b_201011:mysql:umfrage3.gif|umfrage3.gif}}, und {{:inf:inf7b_201011:mysql:umfrage4.gif|umfrage4.gif}}
\\
===== Lösung =====
==== backend.php ====
Bearbeiten der Umfrage
Die Änderungen wurden gespeichert!\n
\n\n";
$titel=$_POST["titel"];
$file=fopen("titel.txt", "w");
fputs($file, $titel);
fclose($file);
include("config.inc.php");
for ($i=1; $i<=5; $i++)
{
$o=$_POST["option$i"];
$a=$_POST["anzahl$i"];
$sql="UPDATE $tabelle SET auswahl='$o', anzahl='$a' WHERE id=$i;";
$result=mysql_query($sql);
}
mysql_close($verbindung);
}
$file=fopen("titel.txt", "r");
$titel=fgets($file);
fclose($file);
?>
\\
==== abstimmung.php ====
Umfrage
$titel";
echo "
Zum Ergebnis
\\
==== ergebnis.php ====
Ergebnis
$titel";
$sql="SELECT * FROM $tabelle WHERE auswahl!='';";
$result=mysql_query($sql);
$count=mysql_num_rows($result);
$alle=0;
$max=0;
for ($i=0; $i<$count; $i++)
{
$alle=$alle+mysql_result($result, $i, 2);
if (mysql_result($result, $i, 2)>$max)
$max=mysql_result($result, $i, 2);
}
echo "
Es wurden $alle Stimmen abgegeben!
\n\n";
for ($i=0; $i<$count; $i++)
{
$auswahl=mysql_result($result, $i, 1);
$stimmen=mysql_result($result, $i, 2);
$p=round((($stimmen/$alle)*100), 1);
$p2=round(($stimmen/$max)*150);
echo "$auswahl
\n$stimmen Stimmen ($p %)

\n\n";
}
?>
Zurück zur Abstimmung