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...

Impressum
Datenschutz