PHP-prosjekter: Lag en applikasjon for meningsmåling
I dette PHP-prosjektet, vi skal lage en meningsmålingsapplikasjon.
Meningsmålingen vil bestå av 3 hovedkomponenter;
Kontroller foran – dette er indekssiden som bestemmer HTML-koden som skal lastes. Dette vil sikre at applikasjonen vår har ett enkelt inngangspunkt. Dette vil gi oss mer kontroll over applikasjonen.
Forretningslogikk – dette vil inneholde PHP-koden for samhandling med databasen. Dette vil tillate oss å skille forretningslogikken fra presentasjonen, noe som gjør applikasjonen vår enkel å vedlikeholde
Visninger – dette vil inneholde HTML-koden. Vi vil ha to sider nemlig;
- opinion.html.php – dette vil inneholde HTML-koden med spørsmålet og alternativene
- results.html.php – dette vil inneholde HTML-koden som viser meningsmålingsresultatene
Forutsetninger gjort
Meningsmålingen vil stille spørsmålet –
Hva er din favoritt JavaScript Bibliotek?
Svarene ville være
- JQuery
- MooTools
- YUI-biblioteket
- Glow
Her er trinnene for å lage applikasjonen-
Trinn 1) Databasetilkobling
Denne delen forutsetter kunnskap om MySQL og hvordan du administrerer det, hvis du ikke er kjent med disse MySQL, sjekk vår SQL-opplæringer seksjon.
Vår applikasjon vil kun ha en tabell med 3 felt, nemlig;
- id – autogenerer nummer som primærnøkkel
- valg – tallet som representerer en presidentkandidat
- ts – tidsstempelet for avstemningen
Skriptet nedenfor lager js_libraries-tabellen vår.
<?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`) ); ?>
Trinn 2) Koding av applikasjonen vår
La oss nå lage vårt forretningslogikklag som skal håndtere databasetilkoblingen. 'opinion_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_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);
}
}
?>
HER,
- "public function __construct()" er klassekonstruktørmetoden som brukes til å etablere databaseforbindelsen
- "public function execute_query(...)" er metoden for å utføre spørringer som sett inn, oppdater og slett
- "public function select" er metoden for å hente data fra database og returnere en numerisk matrise.
- "public function insert(...)" er insert-metoden som kaller execute_query-metoden.
- "public function __destruct()" er klassedestruktoren som lukker databasetilkoblingen.
La oss nå lage frontkontrolleren 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';
?>
HER,
- "krever 'opinion_poll_model.php';" laster forretningslogikkklassen
- "$model = new Opinion_poll_model();" oppretter en forekomst av forretningslogikkklassen
- "if (count($_POST) == 1)..." utfører datavalideringen og bruker JavaSkript for å vise en meldingsboks hvis det ikke er stemt på en kandidat.
- "if (count($_POST) > 1)..." sjekker om en stemme er valgt ved å telle antall elementer i $_POST-matrisen. Hvis ingen vare er valgt, vil $_POST bare inneholde innsendingselementet. Hvis en kandidat har blitt valgt, vil $_POST-matrisen ha to elementer, innsending og stemmeelement. Denne koden brukes også til å sette inn en ny stemmerekord og deretter vise resultatsiden
- "gå;" brukes til å avslutte skriptkjøringen etter at resultatene har blitt vist, slik at meningsmålingsskjemaet ikke vises.
- "krever 'opinion.html.php';" viser meningsmålingsskjemaet hvis ingenting er valgt.
La oss nå lage visningene. opinion.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>
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>
Trinn 3) Tester applikasjonen vår
Forutsatt at du har lagret filene i opinionpoll-mappen, bla til URL http://localhost/opinionpoll/
Hvis du klikker på OK-knappen uten å velge et JS-bibliotek, får du opp følgende meldingsboks.
Velg et JS-bibliotek og klikk deretter på OK-knappen. Du vil få resultatsiden som ligner på den som vises nedenfor.
Sammendrag
- Å dele applikasjonen inn i forretningslogikk, frontkontrollervisningslag er en god applikasjonsdesignpraksis
- JavaSkript er nyttig for å utføre validering på klientsiden
- Det er en god programmeringspraksis å bruke file.html.php for filer som inneholder både HTML og PHP-koder
- Meningsmålingsapplikasjonen demonstrerer hvordan kunnskapen fra de foregående leksjonene kan settes sammen for å utvikleping en fungerende applikasjon med en database-backend.



