PHP-projecten: maak een opiniepeilingtoepassing
In dit PHP-project, we gaan een opiniepeiling-applicatie maken.
De opiniepeiling zal uit drie hoofdcomponenten bestaan;
Voorste controleur โ dit is de indexpagina die bepaalt welke HTML-code moet worden geladen. Dit zorgt ervoor dat onze applicatie รฉรฉn enkel toegangspunt heeft. Dit geeft ons meer controle over de applicatie.
Zakelijke logica โ dit bevat de PHP-code voor interactie met de database. Hierdoor kunnen we de bedrijfslogica scheiden van de presentatie, waardoor onze applicatie eenvoudig te onderhouden is
Weergaves โ dit bevat de HTML-code. We zullen twee pagina's hebben namelijk;
- opinie.html.php โ dit bevat de HTML-code met de vraag en opties
- results.html.php โ dit bevat de HTML-code die de resultaten van de opiniepeiling weergeeft
Aannames gemaakt
De opiniepeiling zal de vraag stellen:
Wat is uw favoriete JavaScript Bibliotheek?
Antwoorden zouden zijn
- JQuery
- MooTools
- YUI-bibliotheek
- Glow
Hier zijn de stappen om de applicatie te makenโ
Stap 1) Databaseconnectiviteit
Dit onderdeel veronderstelt kennis van MySQL en hoe u het moet toedienen, als u hiermee niet bekend bent MySQL, check onze SQL-tutorials pagina.
Onze applicatie zal slechts รฉรฉn tabel hebben met 3 velden, namelijk;
- id โ nummer automatisch genereren als primaire sleutel
- keuze โ het getal dat een presidentskandidaat vertegenwoordigt
- ts โ de tijdstempel voor de stemming
Met het onderstaande script wordt onze tabel js_libraries gemaakt.
<?php 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`) ); ?>
Stap 2) Coderen van onze applicatie
Laten we nu onze bedrijfslogische laag maken die de databaseconnectiviteit afhandelt. 'opiniepoll_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_error());
if (!mysqli_select_db($this->db_handle,$this->db)) die("Unable to select database: " . mysqli_error());
}
private function execute_query($sql_stmt) {
$result = mysqli_query($db_handle,$sql_stmt); //execute SQL statement
return !$result ? FALSE : TRUE;
}
public function select($sql_stmt) {
$result = mysqli_query($db_handle,$sql_stmt);
if (!$result) die("Database access failed: " . mysqli_error());
$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()โ is de klassenconstructormethode die wordt gebruikt om de databaseverbinding tot stand te brengen
- โpublic function execute_query(โฆ)โ is de methode voor het uitvoeren van queries zoals invoegen, bijwerken en verwijderen
- โpublic function selectโ is de methode voor het ophalen van gegevens uit de databank en het retourneren van een numerieke array.
- โpublic function insert(โฆ)โ is de insert-methode die de execute_query-methode aanroept.
- โpublic function __destruct()โ is de klassendestructor die de databaseverbinding sluit.
Laten we nu de voorcontroller maken index.php
<?php
require 'opinion_poll_model.php';
$model = new Opinion_poll_model();
if (count($_POST) == 1) {
echo "<script>alert('You did not vote!');</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,'$ts')";
$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,
- โvereis 'opinion_poll_model.php';โ laadt de klasse bedrijfslogica
- โ$model = nieuw Opinion_poll_model();โ creรซert een exemplaar van de bedrijfslogicaklasse
- โif (count($_POST) == 1)...โ voert de gegevensvalidatie uit en gebruikt JavaScript om een โโberichtvenster weer te geven als er niet op een kandidaat is gestemd.
- โif (count($_POST) > 1)...โ controleert of er een stem is geselecteerd door het aantal items in de $_POST array te tellen. Als er geen item is geselecteerd, bevat de $_POST alleen het ingediende item. Als er een kandidaat is gekozen, bevat de $_POST-array twee elementen: het onderwerp Verzenden en Stemmen. Deze code wordt ook gebruikt om een โโnieuw stemrecord in te voegen en vervolgens de resultatenpagina weer te geven
- โexit;โ wordt gebruikt om de uitvoering van het script te beรซindigen nadat de resultaten zijn weergegeven, zodat het opiniepeilingsformulier niet wordt weergegeven.
- โvereis 'opinion.html.php';โ geeft het opiniepeilingformulier weer als er niets is geselecteerd.
Laten we nu de weergaven maken. mening.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" />MooToolsl
<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>
resultaten.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>
Stap 3) Onze applicatie testen
Als je de bestanden in de map 'opinionpoll' hebt opgeslagen, ga dan naar de betreffende map. URL http://localhost/opinionpoll/
Als u op de OK-knop klikt zonder een JS-bibliotheek te selecteren, krijgt u het volgende berichtvenster te zien.
Selecteer een JS-bibliotheek en klik vervolgens op de knop OK. U krijgt een resultatenpagina die lijkt op de onderstaande pagina.
Samenvatting
- Het verdelen van uw applicatie in bedrijfslogica en front-controllerweergavelagen is een goede praktijk voor het ontwerpen van applicaties
- JavaScript is handig voor het uitvoeren van client-side validatie
- Het is een goede programmeerpraktijk om file.html.php te gebruiken voor bestanden die zowel HTML als .php bevatten PHP-codes
- De toepassing van de opiniepeiling laat zien hoe de kennis die in de voorgaande lessen is opgedaan, kan worden gecombineerd om te ontwikkelen.ping Een werkende applicatie met een database als backend.



