PHP Umfrage ohne Datenbank aktualisiert am 29.03.2023
Einleitung:
Der Autor dieser Webseite ist Neuling in PHP, deshalb sind einige Ausführungen nur beschränkt gültig.
Der PHP-Code funktioniert, gehen Sie auf diesen Link zur Überprüfung.
Das Script basiert auf einer Umfrageseite in HTML, einer PHP-Seite und drei
Textdateien, die erstellt werden müssen. Es gibt kein Fallback.
Auf der
Eingabeseite befindet sich ein Formular mit zwei sogenannten Radio-Buttons.
Nach Auswahl wird der Besucher auf eine
PHP-Seite umgeleitet, wo er die aktuellen Ergebnisse übermittelt
bekommt und es wird ein Säulendiagramm in CSS angezeigt.
Die Ergebnisse
werden zusätzlich in einer log.txt mit Datum und Zeit des Besuches
festgehalten. Alles ohne Datenbank - nur HTML , CSS und PHP!
Drei Textdateien: Namen (können im Code angepasst werden):
log.txt : Hier steht später Datum Uhrzeit Ja- und Nein-Stimmen
ja.txt : hier eine 1 eintragen
nein.txt : wie oben eine eins eintragen, hier stehen die Nein-Stimmen der Umfrage.
Alle Dateien müssen im selben Verzeichnis liegen!
Eine HTML- Seite zur Eingabe und eine PHP-Seite für die Auswertung.
Danach kommen wir zur Eingabeseite in html, der Name ist eher unwichtig...:
--------------------------------------------------------------------------------------------------------
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><title>Umfrage</title>
<meta content="text/html; charset=ISO-8859-1" http-equiv="content-type">
<meta content="Sternenhimmelstuermer.eu" name="author"></head>
<body style="color: white; background-color: black;" alink="red" link="yellow" vlink="#3333ff"><br>
<form name="umf" action="umfragespeicher.php" method="get" enctype="txt/html">
Ihre Meinung zu meiner Webseite;
<div><input name="UserOption" id="Useroption" value="1" type="radio">
<label for="UserOption">Die Seite ist toll</label><br>
<input name="UserOption" id="Useroption" value="2" type="radio">
<label for="UserOption">Die Seite ist mies</label>
<br>
<input name="" value="speichern" type="submit">
<div id="zeit"></div>
<script>
var d = new Date();
document.getElementById("zeit").textContent = d.toLocaleString();
</script>
</div></form></body></html>
-----------------------------------------------------------------
Kurze Erklärung:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><title>Umfrage</title>
<meta content="text/html; charset=ISO-8859-1" http-equiv="content-type">
<meta content="Sternenhimmelstuermer.eu" name="author"></head>
<body style="color: white; background-color: black;" alink="red" link="yellow" vlink="#3333ff"><br>
<form name="umf" action="umfragespeicher.php" method="get" enctype="txt/html">
Eben der Kopf einer HTML-Seite. Dann noch die Eröffnungdes Bodys mit der Background und Seitenfarbe...
<body style="color: white; background-color: black;" alink="red" link="yellow" vlink="#3333ff"><br>
<form name="umf" action="umfragespeicher.php" method="get" enctype="txt/html">
Ihre Meinung zu meiner Webseite;
<div><input name="UserOption" id="Useroption" value="1" type="radio">
<label for="UserOption">Die Seite ist toll</label><br>
<input name="UserOption" id="Useroption" value="2" type="radio">
<label for="UserOption">Die Seite ist mies</label>
<br>
<input name="" value="speichern" type="submit">
Jetzt geht es ans eingemachte...
Da wird also ein Webformular mit zwei Radio-Buttons kreiert.
Ich benutze hier zwei Mal den Wert UserOptions. Das ist eigentlich
falsch. Hat aber den Vorteil, dass immer, auch wenn der Befragte nichts
eingibt, der Wert 1 übergeben wird. Keine Sorge, wenn der User mit Nein
antwortet, dann wird auch die zwei übergeben an die Seite
umfragespeicher.php - die sollte so heißen oder Sie ändern den Namen
hier nach belieben um - nur eine PHP muss es sein!
<div id="zeit"></div>
<script>
var d = new Date();
document.getElementById("zeit").textContent = d.toLocaleString();
</script>
</div></form></body></html>
Dann wird noch die Zeit erfasst, was an dieser Stelle eher eine Spielerei ist! Danach die Seite geschlossen.
Dann Kommen wir zur Ausgabeseite: die muss erstmal umfragespeiche.php heißen:
Quellcode:
-------------------------------------------------------------------------------------
<html>
<head>
<meta content="text/html; charset=ISO-8859-1"
http-equiv="content-type">
<title>Umfrage in PHP - DEMO</title>
<meta content="Sternenhimmelstuermer.eu" name="author">
<style type="text/css">dl.vertical {font-size:12px; font-family:Arial;}
dl.vertical dt {float:left; width:60px; margin:260px 0 0 0; text-align:center;}
dl.vertical dd {float:left;
width:60px; height:200px; margin:50px 15px 0 -60px; padding:1px 2px 2px
2px; border:1px solid #aaaaaa; position:relative;
-moz-box-shadow: 1px 1px 3px #aaaaaa;}
dl.vertical dd span
{width:60px; display:block; position:absolute; bottom:0px;
background:#d3179c; color:#ffffff; text-align:center;</style>
</head>
<body style="color: white; background-color: black;" alink="red"
link="yellow" vlink="#3333ff">
<?php
$meinung = $_GET["UserOption"];
$negativ = "2";
if ($meinung < "2") {
$dateinamen = "ja.txt";
$handle = fopen ($dateinamen, "r");
$inhalt = fread ($handle, filesize ($dateinamen));
fclose ($handle);
$inhalt = $inhalt + 1;
echo "<p>bisher stimmten <b> $inhalt </b> Besucher mit ja</p>";
// Schreiben des neuen Wertes
$handle = fopen ("ja.txt", "w");
fwrite ($handle, $inhalt);
fclose ($handle);
} elseif ($negativ == $meinung) {
$dateiname = "nein.txt";
$handles = fopen ($dateiname, "r");
$inhalte = fread ($handles, filesize ($dateiname));
fclose ($handles);
$inhalte = $inhalte + 1;
echo "<p>bisher stimmten <b> $inhalte </b> Besucher hier mit nein ab</p>";
// Schreiben des neuen Wertes
$handles = fopen ("nein.txt", "w");
fwrite ($handles, $inhalte);
fclose ($handles);
}
$zitate = file_get_contents('ja.txt');
$zitaten = file_get_contents('nein.txt');
echo "<p> Es gab bisher <b> $zitate </b> Jastimmen
und <b> $zitaten </b> Neinstimmen hier!</p>";
$daters =date('d F Y, h:i:s A ');
$ja=$zitate;
$ja .= $zitaten;
$meinung = $ja;
$daters .= $meinung;
$filename = 'log.txt';
$somecontent = "$daters \n";
// Let's make sure the file exists and is writable first.
if (is_writable($filename)) {
// In our example we're opening $filename in append mode.
// The file pointer is at the bottom of the file hence
// that's where $somecontent will go when we fwrite() it.
if (!$fp = fopen($filename, 'a')) {
echo "Cannot open file ($filename)";
exit;
}
// Write $somecontent to our opened file.
if (fwrite($fp, $somecontent) === FALSE) {
echo "Cannot write to file ($filename)";
exit;
}
echo "<div><dl class=\"vertical\">";
echo "<dt>Jastimmen</dt>";
echo "<dd><span style=\"height:$zitate%;\">ja mit $zitate</span></dd>";
echo "<dt>Neinstimmen</dt>";
echo "<dd><span style=\"height:$zitaten%;\">nein mit $zitaten</span></dd>";
echo "</dl> </div>";
echo "Umfrage beendet";
fclose($fp);
} else {
echo "The file $filename is not writable";
}
?>
</body>
</html>
--------------------------------------------------------------------------------------------------------
Der Code wieder Im Schnelldurchlauf:
<html>
<head>
<meta content="text/html; charset=ISO-8859-1"
http-equiv="content-type">
<title>Umfrage in PHP - DEMO</title>
<meta content="Sternenhimmelstuermer.eu" name="author">
<style type="text/css">dl.vertical {font-size:12px; font-family:Arial;}
dl.vertical dt {float:left; width:60px; margin:260px 0 0 0; text-align:center;}
dl.vertical dd {float:left; width:60px; height:200px; margin:50px 15px
0 -60px; padding:1px 2px 2px 2px; border:1px solid #aaaaaa;
position:relative; -moz-box-shadow: 1px 1px 3px #aaaaaa;}
dl.vertical dd span {width:60px; display:block; position:absolute;
bottom:0px; background:#d3179c; color:#ffffff;
text-align:center;</style>
</head>
Hier steht der Code in CSS
für das Säulendiagramm. Im eben angegebenen Link ist eine Beschreibung
- einfach reinschreiben. Sind nur CSS Anweisungen für die Darstellung
der grafischen Auswertung, wo zwei Säulen angezeigt werden...wir kommen
später darauf zurück.
<body style="color: white; background-color: black;" alink="red"
link="yellow" vlink="#3333ff">
<?php
$meinung = $_GET["UserOption"];
$negativ = "2";
if ($meinung < "2") {
$dateinamen = "ja.txt";
$handle = fopen ($dateinamen, "r");
$inhalt = fread ($handle, filesize ($dateinamen));
fclose ($handle);
$inhalt = $inhalt + 1;
echo "<p>bisher stimmten <b> $inhalt </b> Besucher mit ja</p>";
// Schreiben des neuen Wertes
$handle = fopen ("ja.txt", "w");
fwrite ($handle, $inhalt);
fclose ($handle);
Dieses ist der Code zur Auswertung in einer if -Funktion.
if ($meinung < "2") heißt so viel, dass wenn der übermittete Wert aus dem $_GET["UserOption"];
Befehl
größer als zwei ist (erinnern Sie sich, wir übergaben mit dem
Radiobutton ja und nein nur Zahlen) dann öffne den ja.Text (ja.tx) und lese dort die Zahl aus, addiere eine 1
$inhalt = $inhalt + 1; dazu und schließe den Text.
Dann informiere den Besucher über die Ja-Stimmen und packe den Text wieder in die Datei und schließe sie.
} elseif ($negativ == $meinung) {
$dateiname = "nein.txt";
$handles = fopen ($dateiname, "r");
$inhalte = fread ($handles, filesize ($dateiname));
fclose ($handles);
$inhalte = $inhalte + 1;
echo "<p>bisher stimmten <b> $inhalte </b> Besucher hier mit nein ab</p>";
// Schreiben des neuen Wertes
$handles = fopen ("nein.txt", "w");
fwrite ($handles, $inhalte);
fclose ($handles);
}
Sonst , wenn der Wert =zwei ist, also eine Nein-Stimme, so tue dasselbe
mit der Neinstimme (nein.txt öffnen - Inhalt auslesen - Inhalt
reinschreiben - Besucher informieren schließen.
$zitate = file_get_contents('ja.txt');
$zitaten = file_get_contents('nein.txt');
echo "<p> Es gab bisher <b> $zitate </b> Jastimmen
und <b> $zitaten </b> Neinstimmen hier!</p>";
$daters =date('d F Y, h:i:s A ');
$ja=$zitate;
$ja .= $zitaten;
$meinung = $ja;
$daters .= $meinung;
$filename = 'log.txt';
$somecontent = "$daters \n";
// Let's make sure the file exists and is writable first.
if (is_writable($filename)) {
// In our example we're opening $filename in append mode.
// The file pointer is at the bottom of the file hence
// that's where $somecontent will go when we fwrite() it.
if (!$fp = fopen($filename, 'a')) {
echo "Cannot open file ($filename)";
exit;
}
// Write $somecontent to our opened file.
if (fwrite($fp, $somecontent) === FALSE) {
echo "Cannot write to file ($filename)";
exit;
}
Jetzt ziehen wir uns das Datum mit Uhrzeit date('d F Y, h:i:s A ');
und öffnen unseren log.txt. Dort tragen wir Datum,Uhrzeit ja und
neinstimmen ein. Der Code ist ein wenig schöner, da hier genauer
geprüft wurde. War auf einer englischen Seite, die ich leider nicht
mehr fand.
Hier wird die Textdatei um Zeilen ergänzt!!! Das ist der große
Unterschied zum vorherigen Code: Dort wurden die alten Zahlen in der
Datei ja.txt und nein.txt überschrieben, nachdem eine 1 dazu
addiert wurde (natürlich abhängig davon, ob der User mit Ja oder nein
geantwortet hatte.)
echo "<div><dl class=\"vertical\">";
echo "<dt>Jastimmen</dt>";
echo "<dd><span style=\"height:$zitate%;\">ja mit $zitate</span></dd>";
echo "<dt>Neinstimmen</dt>";
echo "<dd><span style=\"height:$zitaten%;\">nein mit $zitaten</span></dd>";
echo "</dl> </div>";
echo "Umfrage beendet";
fclose($fp);
} else {
echo "The file $filename is not writable";
}
Jetzt kommen wir schon zur letzten Aufgabe. Der grafischen Darstellung.
Im gelben Text steht dann der CSS-Body Code, der von der PHP
hinzugefügt wird - natürlich mit den frischen Zahlen, die wir als
Variable zum Ausdruck mit angeben, wodurch das CSS immer den aktuellen
Stand anzeigt.
Ach ja, Das Prozentzeichen hinter der Variable ist erlaubt. Das ist für die CSS-Ausgabe span style=\"height:$zitate%
lebensnotwendig, denn die Balken werden eigentlich z. B. als 30%
ausgegeben. Wenn sie da etwas ändern oder neue Säulen erstellen wollen,
dann immer im zweizeilentakt wiederholen...
echo "<dd><span style=\"height:$zitate%;\">ja mit $zitate</span></dd>";
echo "<dt>Neinstimmen</dt>";
Ist doch tricky und ganz ohne aufwendigen Code mit ein wenig CSS.
Wie gesagt, schauen Sie sich den Code an und es gibt hier wirklich
unzählige Anregungen, was man so alles mit PHP ohne Datenanbindung
machen kann.
Mir fiel das auch nicht zu und ich habe zwei schlaflose Nächte für die
Lösung aller Probleme gebraucht. PHP, Javascript, CSS, Google-Charts.
Ich habe alles erwogen und vieles versucht:
Mit Javascript kommt man leider nur schwer an Variablen rann und CSS ist der Königsweg-:)
Wer PHP kann, wird mir zustimmen. Wie gesagt, das ist eine eher
unsichere Lösung und Sie können sich gerne die Textdokumente mit dem
Browser anschauen-:)
Wer aber eher eine unwichtige Umfrage machen will und auf Transparenz wert legt, für den ist das hier eine gute Lösung.
Das war dann mein erstes und vielleicht auch letztes Script in PHP,
weil diese Sprache einen wirklich in den Wahnsinn treiben kann-:)
Ich wünsche Ihnen viel Spaß mit dem Script und nicht vergessen die drei
Textdokumente sind wichtig und in zwei davon (ja und nein.txt) am
besten eine 1 reinschreiben. Dann sollte eigentlich alles
funktionieren. Bitte sehen sie von Fragen im Detail ab: Auch ich bin
Anfänger. Ich kann nicht mehr dazu sagen, als hier steht! Fachfragen
laufen bei mir ins Leere...