Projekty PHP: Utwórz aplikację do ankiety
W tym projekcie PHP, stworzymy aplikację do badania opinii.
Badanie opinii publicznej będzie składać się z 3 głównych elementów;
Kontroler przedni – jest to strona indeksowa, która określi kod HTML do załadowania. Dzięki temu nasza aplikacja będzie miała jeden punkt wejścia. Dzięki temu będziemy mieli większą kontrolę nad aplikacją.
Logika biznesowa – będzie zawierać kod PHP umożliwiający interakcję z bazą danych. Pozwoli nam to oddzielić logikę biznesową od prezentacji, dzięki czemu nasza aplikacja będzie łatwa w utrzymaniu
odwiedzajacy – będzie zawierać kod HTML. Będziemy mieć dwie strony, a mianowicie;
- opinia.html.php – będzie zawierać kod HTML z pytaniem i opcjami
- results.html.php – będzie zawierał kod HTML wyświetlający wyniki ankiety
Poczynione założenia
W sondażu pojawi się pytanie –
Jaki jest Twój ulubiony JAVASCRIPT Biblioteka?
Odpowiedzi byłyby
- JQuery
- Narzędzia Moo
- Biblioteka YUI
- Poświata
Oto kroki, aby utworzyć aplikację-
Krok 1) Łączność z bazą danych
W tej części zakłada się znajomość MySQL i jak nim zarządzać, jeśli nie jesteś z nimi zaznajomiony MySQL, sprawdź nasze Samouczki SQL
Nasza aplikacja będzie miała tylko jedną tabelę z 3 polami, a mianowicie;
- id – automatycznie generuje numer jako klucz podstawowy
- wybór – liczba reprezentująca kandydata na prezydenta
- ts – znacznik czasu głosowania
Poniższy skrypt tworzy naszą tabelę js_libraries.
<?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`) ); ?>
Krok 2) Zakodowanie naszej aplikacji
Stwórzmy teraz naszą warstwę logiki biznesowej, która będzie obsługiwać łączność z bazą danych. „opinia_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);
}
}
?>
TUTAJ,
- „Funkcja publiczna __construct()” to metoda konstruktora klasy używana do nawiązania połączenia z bazą danych
- „funkcja publiczna perform_query(…)” to metoda wykonywania zapytań, takich jak wstawianie, aktualizacja i usuwanie
- „Wybór funkcji publicznej” to metoda pobierania danych z baza danych i zwrócenie tablicy numerycznej.
- „funkcja publiczna wstaw(…)” to metoda wstawiania, która wywołuje metodę wykonywania_query.
- „funkcja publiczna __destruct()” to destruktor klasy, który zamyka połączenie z bazą danych.
Stwórzmy teraz kontroler frontowy 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';
?>
TUTAJ,
- „wymagaj „opinion_poll_model.php”;” ładuje klasę logiki biznesowej
- „$model = nowy model ankiety_opinii();” tworzy instancję klasy logiki biznesowej
- „if (count($_POST) == 1)…” przeprowadza weryfikację i wykorzystuje dane JavaSkrypt wyświetlający okno dialogowe z komunikatem, jeśli nie zagłosowano na żadnego kandydata.
- „if (count($_POST) > 1)…” sprawdza, czy wybrano głosowanie, zliczając liczbę elementów w tablicy $_POST. Jeśli nie wybrano żadnego elementu, $_POST będzie zawierał tylko element przesłany. Jeśli kandydat został wybrany, tablica $_POST będzie zawierać dwa elementy: element przesłania i głosowania. Kod ten służy również do wstawienia nowego rekordu głosowania, a następnie wyświetlenia strony wyników
- „exit;” służy do przerwania wykonywania skryptu po wyświetleniu wyników, tak aby formularz ankiety opinii nie był wyświetlany.
- „wymagaj „opinion.html.php”;” wyświetla formularz ankiety, jeśli nic nie zostało wybrane.
Stwórzmy teraz widoki. opinia.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>
wyniki.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>
Krok 3) Testowanie naszej aplikacji
Zakładając, że zapisałeś pliki w folderze opinionpoll, przejdź do URL http://localhost/opinionpoll/
Jeśli klikniesz przycisk OK bez wybrania biblioteki JS, pojawi się poniższe okno komunikatu.
Wybierz bibliotekę JS, a następnie kliknij przycisk OK. Otrzymasz stronę wyników podobną do pokazanej poniżej.
Podsumowanie
- Podział aplikacji na logikę biznesową i warstwy widoku kontrolera frontowego jest dobrą praktyką projektowania aplikacji
- JavaSkrypt jest przydatny do przeprowadzania walidacji po stronie klienta
- Dobrą praktyką programistyczną jest używanie pliku file.html.php w przypadku plików zawierających zarówno HTML, jak i Kody PHP
- Aplikacja sondażowa pokazuje, w jaki sposób wiedza zdobyta na poprzednich lekcjach może zostać wykorzystana w celu rozwojuping działająca aplikacja z bazą danych.



