PHP-projektit: Luo mielipidekyselysovellus
โก รlykรคs yhteenveto
Tรคmรค PHP-projekti rakentaa mielipidekyselysovelluksen tyhjรคstรค yhdistรคmรคllรค aiemmat oppitunnit yhdeksi toimivaksi esimerkiksi. Se jakaa sovelluksen etupaneeliin, liiketoimintalogiikkamalliin ja katselutiedostoihin, ja tallentaa ja laskee sitten suosikkiรครคnet. JavaSkriptikirjasto MySQL tietokanta.

Mielipidekyselysovelluksen luominen PHP:llรค
Tรคssรค PHP-projektissa aiomme luoda mielipidekyselysovelluksen.
Mielipidekysely koostuu kolmesta pรครคosasta:
Etuohjain โ tรคmรค on hakemistosivu, joka mรครคrittรครค ladattavan HTML-koodin. Tรคmรค varmistaa, ettรค sovelluksellamme on yksi aloituskohta, mikรค antaa meille paremman hallinnan sovelluksesta.
Liiketoiminnan logiikka โ tรคmรค sisรคltรครค PHP-koodin tietokannan kanssa toimimiseen. Nรคin voimme erottaa liiketoimintalogiikan esitystavasta, mikรค helpottaa sovelluksemme yllรคpitoa.
Nรคyttรถkerrat โ tรคmรค sisรคltรครค HTML-koodin. Meillรค on kaksi sivua, nimittรคin:
- mielipide.html.php โ tรคmรค sisรคltรครค HTML-koodin, jossa on kysymys ja vaihtoehtoja
- results.html.php โ tรคmรค sisรคltรครค HTML-koodin, joka nรคyttรครค mielipidekyselyn tulokset
Tehty oletuksia
Mielipidekyselyssรค kysytรครคn: Mikรค on suosikkisi? JavaKรคsikirjoitus Kirjasto?
Vastaukset olisivat:
- JQuery
- MooTools
- YUI-kirjasto
- Hehku
Tรคssรค ovat vaiheet sovelluksen luomiseksi.
Vaihe 1) Tietokantayhteys
Tรคmรค osio edellyttรครค tietรคmystรค MySQL ja miten sitรค annetaan. Jos et ole perehtynyt MySQL, tarkista meidรคn SQL opetusohjelmat osiossa.
Sovelluksessamme on vain yksi taulukko, jossa on kolme kenttรครค:
- id โ automaattisesti luotu numero ensisijaisena avaimena
- valinta โ valittua edustava numero JavaSkriptikirjasto
- ts โ รครคnestyksen aikaleima
Alla oleva komentosarja luo js_libraries-taulukon.
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`) );
Vaihe 2) Koodaa sovelluksemme
Luodaan nyt liiketoimintalogiikkakerros, joka kรคsittelee tietokantayhteydet. mielipidekysely_malli.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); } } ?>
TรSSร,
- "julkinen funktio __construct()" on luokan rakentajamenetelmรค, jota kรคytetรครคn tietokantayhteyden muodostamiseen
- โpublic function execute_query(โฆ)โ on metodi kyselyiden, kuten lisรคys, pรคivitys ja poisto, suorittamiseen.
- โpublic function select(โฆ)โ on menetelmรค tiedon hakemiseksi tietokanta ja palauttaa taulukon.
- "public function insert(โฆ)" on lisรคysmenetelmรค, joka kutsuu execute_query-menetelmรครค.
- "julkinen funktio __destruct()" on luokan tuhoaja, joka sulkee tietokantayhteyden.
Luodaan nyt etuohjain 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'; ?>
TรSSร,
- "require 'opinion_poll_model.php';" lataa bisneslogiikkaluokan
- "$malli = new Opinion_poll_model();" luo bisneslogiikkaluokan esiintymรคn
- "if (count($_POST) == 1)โฆ" suorittaa tietojen validoinnin ja kรคyttรครค JavaSkripti, joka nรคyttรครค viestiruudun, jos ehdokasta ei ole รครคnestetty.
- โif (count($_POST) > 1)โฆโ tarkistaa, onko รครคni valittu laskemalla $_POST-taulukon alkioiden lukumรครคrรคn. Jos yhtรครคn alkiota ei ole valittu, $_POST-taulukko sisรคltรครค vain lรคhetettรคvรคn alkion. Jos kirjasto on valittu, $_POST-taulukossa on kaksi elementtiรค: lรคhetettรคvรคt ja รครคnestettรคvรคt alkiot. Tรคmรค koodi lisรครค myรถs uuden รครคnestystietueen ja nรคyttรครค sitten tulossivun.
- โexit;โ-komentoa kรคytetรครคn skriptin suorituksen lopettamiseen tulosten nรคyttรคmisen jรคlkeen, jotta mielipidekyselylomaketta ei nรคytetรค.
- "require 'opinion.html.php';" nรคyttรครค mielipidekyselylomakkeen, jos mitรครคn ei ole valittu.
Luodaanpa nyt nรคkymรคt. mielipide.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>
tulokset.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>
Vaihe 3) Testaa sovellustamme
Olettaen, ettรค olet tallentanut tiedostot mielipidekyselykansioon, selaa kohtaan URL http://localhost/opinionpoll/
Jos napsautat OK-painiketta valitsematta JS-kirjastoa, saat seuraavan viestiruudun.
Valitse JS-kirjasto ja napsauta sitten OK-painiketta. Saat alla olevan kaltaisen tulossivun.
Tapoja parantaa mielipidekyselysovellusta
Tรคmรค projekti on vankka perusta. Jotta se olisi tuotantovalmiina, harkitse seuraavia parannuksia:
- Kรคytรค valmiita lausuntoja mallissa SQL-injektioriskien poistamiseksi yhdistetyistรค kyselyistรค.
- Estรครค pรครคllekkรคisen รครคnestรคmisen evรคsteen, istuntolipun avulla tai tallentamalla รครคnestรคjรคn IP-osoitteen aikaleiman rinnalle.
- Nรคytรค prosenttiosuudet ja pylvรคsdiagrammi tulossivulla raakalukujen sijaan, jotta lopputuloksesta saa selkeรคmmรคn kuvan.
- Tee kyselystรค dynaaminen tallentamalla kysymyksen ja vaihtoehdot tietokantaan, jotta voit kรคyttรครค koodia uudelleen missรค tahansa kyselyssรค.



