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.

  • ๐Ÿงญ Etuohjain: Yksi index.php-tiedoston aloituspiste pรครคttรครค, mikรค nรคkymรค ladataan, mikรค antaa sovellukselle yhden hallitun paikan pyyntรถjen reitittรคmiseen.
  • ๐Ÿง  Liiketoiminnan logiikka: Malliluokka hoitaa kaiken tietokantatyรถn, keeping tietojen kรคyttรถ erillรครคn esitystavasta helpottaakseen yllรคpitoa.
  • ๐Ÿ–ผ๏ธ Nรคytรค tiedostot: .html.php-nรคkymรคtiedostot sisรคltรคvรคt kyselylomakkeen ja tulossivun yhdistรคen HTML:รครค pieniin PHP-tulostetageihin.
  • ๐Ÿ—ƒ๏ธ Tietokantataulukko: Yksi js_libraries-taulukko tallentaa jokaisen รครคnen valintanumerona ja aikaleimana, jotka avataan automaattisesti kasvavalla tunnuksella.
  • โœ… Vahvistus: Pieni JavaSkriptitarkistus varoittaa kรคyttรคjรครค, kun lomake lรคhetetรครคn valitsematta kirjastoa.
  • ๐Ÿ“Š ร„รคntenlaskenta: Ohjain lisรครค รครคnen ja suorittaa sitten COUNT kyselyรค asetusta kohden tulostaulukon rakentamiseksi.
  • ๐Ÿค– AI Assist: Tekoรคlytyรถkalut voivat laajentaa tรคmรคn kyselyn tรคyteen kyselysovellukseen ja tarkistaa koodin virheiden ja tietoturvaongelmien varalta.

PHP-mielipidekyselysovellus

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/

Mielipidekyselysovelluksen testaus

Jos napsautat OK-painiketta valitsematta JS-kirjastoa, saat seuraavan viestiruudun.

Mielipidekyselysovelluksen testaus

Valitse JS-kirjasto ja napsauta sitten OK-painiketta. Saat alla olevan kaltaisen tulossivun.

Mielipidekyselysovelluksen testaus

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

UKK

Etuosan ohjain reitittรครค jokaisen pyynnรถn yhden aloituspisteen, yleensรค index.php-tiedoston, kautta, joka sitten lataa oikean logiikan ja nรคkymรคn. Se keskittรครค reitityksen, todennuksen ja jaetun asennuksen ja on useimpien PHP-kehysten perusta.

Yleisiรค lรคhestymistapoja ovat evรคsteen asettaminen รครคnestรคmisen jรคlkeen, istunnon merkitseminen รครคnestetyksi tai รครคnestรคjรคn IP-osoitteen ja aikaleiman tallentaminen tietokantaan. Mikรครคn niistรค ei ole erehtymรคtรถn, joten yhdistรค menetelmiรค tai vaadi kirjautumista tiukemman hallinnan saavuttamiseksi.

Korvaa yhdistetyt kyselyt valmiilla lausekkeilla MySQLissรค tai PDO:ssa ja sido รครคnestysarvo parametrina. Varmista myรถs, ettรค valinta on yksi odotetuista luvuista ennen kuin se edes saavuttaa kyselyn.

Kyllรค. Tekoรคly voi lisรคtรค useita kysymyksiรค, dynaamisia vaihtoehtoja tietokannasta, prosentuaalisia tuloksia kaavion avulla ja hallintasivun. Kuvaile haluamasi ominaisuudet ja tarkista ja testaa sitten luotu koodi ennen kรคyttรถรถnottoa.

Kyllรค. Liitรค malli, ohjain ja nรคkymรคt, niin tekoรคly voi havaita mรครคrittelemรคttรถmรคt muuttujat, puuttuvat yhteysargumentit, injektioriskit ja koodinvaihtomerkitsemรคttรถmรคt tulosteet ja ehdottaa sitten korjattuja, turvallisempia versioita testattavaksi.

Tiivistรค tรคmรค viesti seuraavasti: