Projekty PHP: Utwórz aplikację do ankiety

⚡ Inteligentne podsumowanie

Ten projekt PHP buduje aplikację ankietową od podstaw, łącząc wcześniejsze lekcje w jeden działający przykład. Dzieli aplikację na kontroler frontowy, model logiki biznesowej i pliki widoków, a następnie przechowuje i zlicza głosy na faworyta. JavaBiblioteka skryptów w MySQL Baza danych.

  • 🧭 Kontroler przedni: Pojedynczy punkt wejścia index.php decyduje, który widok załadować, zapewniając aplikacji jedno kontrolowane miejsce do kierowania żądań.
  • ???? Logika biznesowa: Klasa modelu obsługuje całą pracę związaną z bazą danych,ping dostęp do danych oddzielony od prezentacji dla łatwiejszej konserwacji.
  • 🖼️ Wyświetl pliki: Pliki widoku .html.php zawierają formularz ankiety i stronę wyników, łącząc kod HTML z małymi znacznikami wyjściowymi PHP.
  • 🗃️ Tabela bazy danych: Pojedyncza tabela js_libraries przechowuje każdy głos jako numer wyboru i znacznik czasu, których kluczem jest identyfikator automatycznie zwiększany.
  • Uprawomocnienie: Mały JavaKontrola skryptu ostrzega użytkownika, gdy formularz zostanie wysłany bez wybrania żadnej biblioteki.
  • 📊 Liczenie głosów: Kontroler wprowadza głos, a następnie uruchamia zapytania COUNT dla każdej opcji w celu utworzenia tabeli wyników.
  • 🤖 Asystent AI: Narzędzia AI mogą rozszerzyć tę ankietę do pełnej aplikacji ankietowej i przejrzeć kod pod kątem błędów i kwestii bezpieczeństwa.

Aplikacja do ankiety opinii PHP

Jak stworzyć aplikację do ankiet opinii publicznej za pomocą PHP

W tym projekcie PHP utworzymy aplikację do przeprowadzania ankiet opinii.

Sondaż opinii publicznej będzie składał się z 3 głównych komponentów:

Kontroler przedni – to strona indeksowa, która określi kod HTML do załadowania. Dzięki temu nasza aplikacja ma jeden punkt wejścia, co daje nam większą kontrolę nad aplikacją.

Logika biznesowa – będzie zawierał kod PHP do interakcji z bazą danych. Pozwala nam to oddzielić logikę biznesową od prezentacji, ułatwiając utrzymanie naszej aplikacji.

odwiedzajacy – tutaj będzie znajdował się kod HTML. Będziemy mieli 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 ankiecie opinii zostanie zadane pytanie: Jaki jest Twój ulubiony JAVASCRIPT Biblioteka?

Odpowiedzi brzmiałyby:

  • JQuery
  • Narzędzia Moo
  • Biblioteka YUI
  • Poświata

Oto kroki tworzenia aplikacji.

Krok 1) Łączność z bazą danych

W tej części zakłada się znajomość MySQL i jak go stosować. Jeśli nie znasz MySQL, sprawdź nasze Samouczki SQL

Nasza aplikacja będzie miała tylko jedną tabelę z 3 polami, mianowicie:

  • id – automatycznie generowany numer jako klucz podstawowy
  • wybór – liczba reprezentująca wybranego JavaBiblioteka skryptów
  • ts – znacznik czasu głosowania

Poniższy skrypt tworzy naszą tabelę js_libraries.

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

Utwórzmy teraz 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_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);
}
 
}
 
?>

TUTAJ,

  • „Funkcja publiczna __construct()” to metoda konstruktora klasy używana do nawiązania połączenia z bazą danych
  • „public function execute_query(…)” to metoda wykonywania zapytań, takich jak wstawianie, aktualizowanie i usuwanie
  • „public function select(…)” to metoda pobierania danych z baza danych i zwracanie tablicy.
  • „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.

Utwórzmy teraz kontroler frontowy 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';
 
?>

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 oddano głosu na żadnego kandydata.
  • „if (count($_POST) > 1)…” sprawdza, czy głos został wybrany, licząc liczbę elementów w tablicy $_POST. Jeśli żaden element nie został wybrany, tablica $_POST będzie zawierać tylko element przesłany. Jeśli wybrano bibliotekę, tablica $_POST będzie zawierać dwa elementy: element przesłany i element głosowania. Ten kod wstawia również nowy rekord głosowania, a następnie wyświetla stronę wyników.
  • „exit;” służy do zakończenia 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.

Utwó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" />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>

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/

Testowanie aplikacji do ankiety

Jeśli klikniesz przycisk OK bez wybrania biblioteki JS, pojawi się poniższy komunikat.

Testowanie aplikacji do ankiety

Wybierz bibliotekę JS, a następnie kliknij przycisk OK. Zostanie wyświetlona strona wyników podobna do tej pokazanej poniżej.

Testowanie aplikacji do ankiety

Sposoby na ulepszenie aplikacji do ankiet opinii publicznej

Ten projekt to solidny fundament. Aby przygotować go do produkcji, rozważ następujące ulepszenia:

  • Użyj przygotowanych oświadczeń w modelu w celu wyeliminowania ryzyka ataku SQL injection z łączonych zapytań.
  • Zapobiegaj podwójnemu głosowaniu za pomocą pliku cookie, flagi sesji lub rejestrując adres IP wyborcy wraz ze znacznikiem czasu.
  • Pokaż procenty i wykres słupkowy na stronie wyników zamiast surowych liczb, aby uzyskać jaśniejszy obraz rezultatów.
  • Uczyń ankietę dynamiczną przechowując pytanie i opcje w bazie danych, dzięki czemu możesz ponownie wykorzystać kod w dowolnej ankiecie.

FAQ

Kontroler frontowy kieruje każde żądanie przez pojedynczy punkt wejścia, zazwyczaj index.php, który następnie ładuje odpowiednią logikę i widok. Centralizuje routing, uwierzytelnianie i współdzieloną konfigurację, stanowiąc podstawę większości frameworków PHP.

Typowe metody to ustawienie pliku cookie po głosowaniu, oznaczenie sesji jako oddanej lub zapisanie adresu IP i znacznika czasu wyborcy w bazie danych. Żadna z nich nie jest niezawodna, dlatego należy łączyć metody lub wymagać logowania w celu zapewnienia ściślejszej kontroli.

Zastąp połączone zapytania przygotowanymi poleceniami w MySQL lub PDO, wiążąc wartość głosu jako parametr. Sprawdź również, czy wybór jest jedną z oczekiwanych liczb, zanim dotrze do zapytania.

Tak. Sztuczna inteligencja może dodawać wiele pytań, dynamiczne opcje z bazy danych, wyniki procentowe z wykresem oraz stronę administracyjną. Opisz funkcje, których potrzebujesz, a następnie przejrzyj i przetestuj wygenerowany kod przed wdrożeniem.

Tak. Wklej model, kontroler i widoki, a AI wykryje niezdefiniowane zmienne, brakujące argumenty połączenia, ryzyko wstrzyknięcia i nieskorygowane dane wyjściowe, a następnie zasugeruje poprawione, bezpieczniejsze wersje do przetestowania.

Podsumuj ten post następująco: