PHP-Projekte: Erstellen Sie eine Meinungsumfrageanwendung

⚡ Intelligente Zusammenfassung

Dieses PHP-Projekt entwickelt eine Umfrageanwendung von Grund auf und verknüpft dabei frühere Lektionen zu einem praktischen Beispiel. Die Anwendung ist in einen Front-Controller, ein Geschäftslogikmodell und Ansichtsdateien unterteilt und speichert und zählt anschließend die Stimmen für einen Favoriten. JavaSkriptbibliothek in einem MySQL Datenbank.

  • 🧭 Front-Controller: Ein einziger Einstiegspunkt in der Datei index.php bestimmt, welche Ansicht geladen wird, und gibt der Anwendung somit eine zentrale Stelle zur Weiterleitung von Anfragen.
  • 🧠 Geschäftslogik: Eine Modellklasse übernimmt die gesamte Datenbankarbeit, keeping Datenzugriff und Präsentation sind getrennt, um die Wartung zu vereinfachen.
  • 🖼️ Dateien ansehen: Die .html.php-Ansichtsdateien enthalten das Umfrageformular und die Ergebnisseite und mischen HTML mit kleinen PHP-Ausgabetags.
  • 🗃️ Datenbanktabelle: Eine einzelne Tabelle namens js_libraries speichert jede Stimme als Auswahlnummer und Zeitstempel, wobei die ID automatisch inkrementiert wird.
  • ✅ Validierung: Eine kleine JavaDie Skriptprüfung warnt den Benutzer, wenn das Formular abgeschickt wird, ohne dass eine Bibliothek ausgewählt wurde.
  • 📊 Stimmenauszählung: Der Controller fügt die Stimme ein und führt dann COUNT-Abfragen pro Option aus, um die Ergebnistabelle zu erstellen.
  • 🤖 KI-Assistent: KI-Tools können diese Umfrage zu einer vollständigen Umfrage-App erweitern und den Code auf Fehler und Sicherheitsprobleme überprüfen.

PHP-Umfrageanwendung

Wie man eine Meinungsumfrage-Anwendung mit PHP erstellt

In diesem PHP-Projekt werden wir eine Anwendung zur Durchführung von Meinungsumfragen erstellen.

Die Meinungsumfrage wird aus 3 Hauptkomponenten bestehen:

Front-Controller Dies ist die Indexseite, die den zu ladenden HTML-Code bestimmt. Dadurch hat unsere Anwendung einen einzigen Einstiegspunkt, was uns mehr Kontrolle über die Anwendung ermöglicht.

Geschäftslogik – Dieser Abschnitt enthält den PHP-Code für die Datenbankinteraktion. Dadurch können wir die Geschäftslogik von der Präsentation trennen, was die Wartung unserer Anwendung vereinfacht.

Aufrufe – Dies enthält den HTML-Code. Wir werden zwei Seiten haben, nämlich:

  • meinung.html.php – diese enthält den HTML-Code mit der Frage und den Optionen
  • results.html.php – enthält den HTML-Code, der die Ergebnisse der Meinungsumfrage anzeigt

Annahmen getroffen

Die Meinungsumfrage wird die Frage stellen: Was ist Ihr Favorit? JavaSkript Bibliothek?

Die Antworten wären:

  • JQuery
  • MooTools
  • YUI-Bibliothek
  • Glühen

Hier sind die Schritte zur Erstellung der Anwendung.

Schritt 1) ​​Datenbankkonnektivität

In diesem Abschnitt werden Kenntnisse über Folgendes vorausgesetzt MySQL und wie man es verabreicht. Wenn Sie damit nicht vertraut sind MySQL, überprüfen Sie unsere SQL-Tutorials .

Unsere Anwendung wird nur eine Tabelle mit drei Feldern enthalten, nämlich:

  • ID – automatisch generierte Nummer als Primärschlüssel
  • Auswahl – die Zahl, die die gewählte Auswahl darstellt JavaSkriptbibliothek
  • ts – der Zeitstempel für die Abstimmung

Das folgende Skript erstellt unsere js_libraries-Tabelle.

CREATE TABLE `js_libraries` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`choice` tinyint(4) NOT NULL DEFAULT '0',
`ts` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`)
);

Schritt 2) Codierung unserer Anwendung

Nun erstellen wir unsere Geschäftslogikschicht, die die Datenbankanbindung übernimmt. meinung_poll_model.php

<?php
 
class Opinion_poll_model {
 
private $db_handle;
private $host = 'localhost';
private $db = 'opinion_poll';
private $uid = 'root';
private $pwd = 'melody';
 
public function __construct() {
$this->db_handle = mysqli_connect($this->host, $this->uid, $this->pwd); // connect to MySQL server
if (!$this->db_handle) die("Unable to connect to MySQL: " . mysqli_connect_error());
if (!mysqli_select_db($this->db_handle, $this->db)) die("Unable to select database: " . mysqli_error($this->db_handle));
}
 
private function execute_query($sql_stmt) {
$result = mysqli_query($this->db_handle, $sql_stmt); // execute SQL statement
return !$result ? FALSE : TRUE;
}
 
public function select($sql_stmt) {
$result = mysqli_query($this->db_handle, $sql_stmt);
if (!$result) die("Database access failed: " . mysqli_error($this->db_handle));
$rows = mysqli_num_rows($result);
$data = array();
if ($rows) {
while ($row = mysqli_fetch_array($result)) {
$data = $row;
}
}
return $data;
}
 
public function insert($sql_stmt) {
return $this->execute_query($sql_stmt);
}
 
public function __destruct(){
mysqli_close($this->db_handle);
}
 
}
 
?>

HIER,

  • „public function __construct()“ ist die Klassenkonstruktormethode, die zum Herstellen der Datenbankverbindung verwendet wird
  • Die Methode „public function execute_query(…)“ dient zum Ausführen von Abfragen wie INSERT, UPDATE und DELETE.
  • „public function select(…)“ ist die Methode zum Abrufen von Daten aus der Datenbank und gibt ein Array zurück.
  • „public function insert(…)“ ist die Einfügemethode, die die Methode „execute_query“ aufruft.
  • „public function __destruct()“ ist der Klassendestruktor, der die Datenbankverbindung schließt.

Erstellen wir nun den Frontcontroller. index.php

<?php
 
require 'opinion_poll_model.php';
 
$model = new Opinion_poll_model();
 
if (count($_POST) == 1) {
echo "<script>alert(1);</script>";
}
 
if (count($_POST) > 1) {
$ts = date("Y-m-d H:i:s");
$option = $_POST['vote'][0];
$sql_stmt = "INSERT INTO js_libraries (`choice`,`ts`) VALUES ($option,3)";
$model->insert($sql_stmt);
$sql_stmt = "SELECT COUNT(choice) choices_count FROM js_libraries;";
$choices_count = $model->select($sql_stmt);
$libraries = array("", "JQuery", "MooTools", "YUI Library", "Glow");
$table_rows = '';
for ($i = 1; $i < 5; $i++) {
$sql_stmt = "SELECT COUNT(choice) choices_count FROM js_libraries WHERE choice = $i;";
$result = $model->select($sql_stmt);
$table_rows .= "<tr><td>" . $libraries[$i] . " Got:</td><td><b>" . $result[0] . "</b> votes</td></tr>";
}
require 'results.html.php';
exit;
}
 
require 'opinion.html.php';
 
?>

HIER,

  • „erfordere ‚opinion_poll_model.php‘;“ lädt die Geschäftslogikklasse
  • „$model = new Opinion_poll_model();“ Erstellt eine Instanz der Geschäftslogikklasse
  • „if (count($_POST) == 1)…“ führt die Datenvalidierung durch und verwendet JavaSkript zur Anzeige einer Meldungsbox, falls kein Kandidat gewählt wurde.
  • Die Zeile „if (count($_POST) > 1)…“ prüft, ob eine Stimme abgegeben wurde, indem die Anzahl der Elemente im Array $_POST gezählt wird. Wurde keine Stimme abgegeben, enthält $_POST nur das Element „Absenden“. Wurde eine Bibliothek ausgewählt, enthält das Array $_POST zwei Elemente: „Absenden“ und „Stimme abgeben“. Dieser Code fügt außerdem einen neuen Stimmeintrag ein und zeigt anschließend die Ergebnisseite an.
  • Mit „exit;“ wird die Skriptausführung beendet, nachdem die Ergebnisse angezeigt wurden, sodass das Formular für die Meinungsumfrage nicht angezeigt wird.
  • „erforderlich ‚opinion.html.php‘;“ Zeigt das Meinungsumfrageformular an, wenn nichts ausgewählt wurde.

Lasst uns nun die Ansichten erstellen. meinung.html.php

<html>
<head>
<title>JavaScript Libraries - Opinion Poll</title>
</head>
<body>
 
<h2>JavaScript Libraries - Opinion Poll</h2>
 
<p><b>What is your favorite JavaScript?</b></p>
 
<form method="POST" action="index.php">
 
<p> <input type="radio" name="vote" value="1" />JQuery
 
<br /><input type="radio" name="vote" value="2" />MooTools
 
<br /><input type="radio" name="vote" value="3" />YUI Library
 
<br /><input type="radio" name="vote" value="4" />Glow
 
</p>
 
<p><input type="submit" name="submitbutton" value="OK" /></p>
 
</form>
 
</body>
 
</html>

results.html.php

<html>
 
<head>
 
<title>JavaScript Libraries Poll Results</title>
 
</head>
 
<body>
 
<h2>Opinion Poll Results</h2>
 
<p><b>What is your favorite JavaScript Library?</b></p>
 
<p><b><?php echo $choices_count[0]; ?></b> people have thus far taken part in this poll:</p>
 
<p>
<table>
 
<?php echo($table_rows); ?>
</table>
</body>
</html>

Schritt 3) Testen unserer Anwendung

Vorausgesetzt, Sie haben die Dateien im Ordner „opinionpoll“ gespeichert, navigieren Sie zu folgendem Pfad: URL http://localhost/opinionpoll/

Testen einer Anwendung zur Meinungsumfrage

Wenn Sie auf die Schaltfläche „OK“ klicken, ohne eine JS-Bibliothek auszuwählen, erhalten Sie die folgende Meldung.

Testen einer Anwendung zur Meinungsumfrage

Wählen Sie eine JS-Bibliothek aus und klicken Sie anschließend auf die Schaltfläche „OK“. Sie erhalten eine Ergebnisseite, die der unten gezeigten ähnelt.

Testen einer Anwendung zur Meinungsumfrage

Möglichkeiten zur Verbesserung der Meinungsumfrage-App

Dieses Projekt bildet eine solide Grundlage. Um es produktionsreif zu machen, sollten Sie folgende Verbesserungen in Betracht ziehen:

  • Verwenden vorbereiteter Anweisungen im Modell, um das Risiko von SQL-Injection durch die verketteten Abfragen zu eliminieren.
  • Doppelte Stimmabgabe verhindern mit einem Cookie, einem Session-Flag oder durch Aufzeichnung der IP-Adresse des Wählers zusammen mit dem Zeitstempel.
  • Prozentsätze und ein Balkendiagramm anzeigen auf der Ergebnisseite anstelle der Rohdaten, um einen besseren Überblick über das Ergebnis zu ermöglichen.
  • Gestalten Sie die Umfrage dynamisch Indem die Frage und die Antwortmöglichkeiten in der Datenbank gespeichert werden, kann der Code für beliebige Umfragen wiederverwendet werden.

Häufig gestellte Fragen

Der Front-Controller leitet jede Anfrage über einen zentralen Einstiegspunkt, üblicherweise index.php, der dann die passende Logik und Ansicht lädt. Er zentralisiert Routing, Authentifizierung und gemeinsame Konfiguration und bildet die Grundlage der meisten PHP-Frameworks.

Gängige Ansätze sind das Setzen eines Cookies nach der Abstimmung, das Markieren der Sitzung als abgestimmt oder das Speichern der IP-Adresse und des Zeitstempels des Wählers in der Datenbank. Keiner dieser Ansätze ist absolut sicher, daher empfiehlt es sich, verschiedene Methoden zu kombinieren oder für eine strengere Kontrolle eine Anmeldung vorzuschreiben.

Ersetzen Sie die verketteten Abfragen durch vorbereitete Anweisungen in mysqli oder PDO und binden Sie den Abstimmungswert als Parameter. Überprüfen Sie außerdem, ob die Auswahl einer der erwarteten Zahlen entspricht, bevor sie die Abfrage erreicht.

Ja. KI kann mehrere Fragen, dynamische Antwortmöglichkeiten aus der Datenbank, prozentuale Ergebnisse mit Diagramm und eine Administrationsseite hinzufügen. Beschreiben Sie die gewünschten Funktionen und überprüfen und testen Sie den generierten Code vor der Bereitstellung.

Ja. Fügen Sie das Modell, den Controller und die Ansichten ein, und die KI kann undefinierte Variablen, fehlende Verbindungsargumente, Injektionsrisiken und nicht maskierte Ausgaben erkennen und anschließend korrigierte, sicherere Versionen zum Testen vorschlagen.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: