Progetti PHP: crea un'applicazione per sondaggi d'opinione

โšก Riepilogo intelligente

Questo progetto PHP crea da zero un'applicazione per sondaggi d'opinione, unendo le lezioni precedenti in un unico esempio funzionante. L'applicazione รจ suddivisa in un front controller, un modello di logica di business e file di visualizzazione, quindi memorizza e conta i voti per un candidato preferito. JavaLibreria di script in un MySQL Banca dati.

  • ๐Ÿงญ Controller frontale: Un singolo punto di ingresso index.php decide quale vista caricare, fornendo all'applicazione un unico punto controllato per instradare le richieste.
  • ๐Ÿง  Logica di business: Una classe modello gestisce tutto il lavoro del database, mantieniping Accesso ai dati separato dalla presentazione per una manutenzione piรน semplice.
  • ๏ธ Vedi files: I file di visualizzazione .html.php contengono il modulo del sondaggio e la pagina dei risultati, mescolando HTML con piccoli tag di output PHP.
  • ๐Ÿ—ƒ๏ธ Tabella banca dati: Una singola tabella js_libraries memorizza ogni voto come numero di scelta e timestamp, con chiave basata su un ID a incremento automatico.
  • โœ… convalida: Una piccola JavaIl controllo dello script avvisa l'utente quando il modulo viene inviato senza aver selezionato alcuna libreria.
  • ๐Ÿ“Š Conteggio dei voti: Il controller inserisce il voto, quindi esegue query COUNT per ogni opzione per costruire la tabella dei risultati.
  • ๐Ÿค– Assistenza AI: Gli strumenti di intelligenza artificiale possono estendere questo sondaggio trasformandolo in un'app completa per sondaggi e analizzare il codice alla ricerca di bug e problemi di sicurezza.

Applicazione PHP per sondaggi di opinione

Come creare un'applicazione per sondaggi d'opinione utilizzando PHP

In questo progetto PHP, creeremo un'applicazione per sondaggi d'opinione.

Il sondaggio d'opinione sarร  composto da 3 componenti principali:

Controllore anteriore โ€“ Questa รจ la pagina indice che determina il codice HTML da caricare. Ciรฒ garantisce che la nostra applicazione abbia un unico punto di ingresso, il che ci offre un maggiore controllo sull'applicazione.

Logica di business โ€“ questa sezione conterrร  il codice PHP per l'interazione con il database. Ciรฒ ci consente di separare la logica di business dalla presentazione, rendendo la nostra applicazione di facile manutenzione.

Visualizzazioni โ€“ questa conterrร  il codice HTML. Avremo due pagine, ovvero:

  • opinion.html.php โ€“ conterrร  il codice HTML con la domanda e le opzioni
  • results.html.php โ€“ conterrร  il codice HTML che visualizza i risultati del sondaggio di opinione

Supposizioni fatte

Il sondaggio d'opinione porrร  la domanda: Qual รจ il tuo preferito? JavaCopione Biblioteca?

Le risposte sarebbero:

  • JQuery
  • MooTools
  • Libreria YUI
  • Splendore

Ecco i passaggi per creare l'applicazione.

Passaggio 1) Connettivitร  al database

Questa sezione presuppone la conoscenza di MySQL e come somministrarlo. Se non hai familiaritร  con MySQL, controlla il nostro Tutorial sull'SQL .

La nostra applicazione avrร  una sola tabella, con 3 campi, ovvero:

  • id โ€“ numero generato automaticamente come chiave primaria
  • scelta โ€“ il numero che rappresenta il scelto JavaLibreria di script
  • ts โ€“ il timestamp del voto

Lo script seguente crea la nostra tabella 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`)
);

Passaggio 2) Codifica della nostra applicazione

Creiamo ora il livello di logica di business che gestirร  la connettivitร  al database. 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_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);
}
 
}
 
?>

QUI,

  • "funzione pubblica __construct()" รจ il metodo di costruzione della classe utilizzato per stabilire la connessione al database
  • โ€œpublic function execute_query(โ€ฆ)โ€ รจ il metodo per eseguire query come insert, update e delete
  • โ€œpublic function select(โ€ฆ)โ€ รจ il metodo per recuperare i dati da banca dati e restituendo un array.
  • "public function insert(...)" รจ il metodo di inserimento che chiama il metodoexecute_query.
  • "funzione pubblica __destruct()" รจ il distruttore di classe che chiude la connessione al database.

Creiamo ora il controller frontale. 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';
 
?>

QUI,

  • โ€œrichiedi 'opinion_poll_model.php';โ€ carica la classe della logica aziendale
  • โ€œ$modello = nuovo Opinion_poll_model();โ€ crea un'istanza della classe di logica aziendale
  • "if (count($_POST) == 1)โ€ฆ" esegue la convalida dei dati e utilizza JavaScript per visualizzare una finestra di messaggio se nessun candidato รจ stato votato.
  • โ€œif (count($_POST) > 1)โ€ฆโ€ verifica se รจ stato selezionato un voto contando il numero di elementi nell'array $_POST. Se non รจ stato selezionato alcun elemento, $_POST conterrร  solo l'elemento di invio. Se รจ stata scelta una biblioteca, l'array $_POST conterrร  due elementi: l'elemento di invio e l'elemento di voto. Questo codice inserisce anche un nuovo record di voto e quindi visualizza la pagina dei risultati.
  • Il comando โ€œexit;โ€ viene utilizzato per terminare lโ€™esecuzione dello script dopo la visualizzazione dei risultati, in modo che il modulo del sondaggio di opinione non venga visualizzato.
  • โ€œrichiede 'opinion.html.php';โ€ visualizza il modulo del sondaggio d'opinione se non รจ stato selezionato nulla.

Procediamo ora a creare le viste. opinione.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>

risultati.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>

Passaggio 3) Testare la nostra applicazione

Supponendo che tu abbia salvato i file nella cartella opinionpoll, vai alla cartella URL http://localhost/opinionpoll/

Testare un'applicazione per un sondaggio d'opinione

Se fai clic sul pulsante OK senza selezionare una libreria JS, visualizzerai il seguente messaggio.

Testare un'applicazione per un sondaggio d'opinione

Seleziona una libreria JS, quindi fai clic sul pulsante OK. Otterrai una pagina di risultati simile a quella mostrata di seguito.

Testare un'applicazione per un sondaggio d'opinione

Modi per migliorare l'app per i sondaggi d'opinione

Questo progetto ha una solida base. Per renderlo pronto per la produzione, si consiglia di valutare i seguenti miglioramenti:

  • Usa dichiarazioni preparate nel modello per eliminare il rischio di SQL injection dalle query concatenate.
  • Prevenire il doppio voto tramite un cookie, un flag di sessione o registrando l'indirizzo IP dell'elettore insieme al timestamp.
  • Mostra le percentuali e un grafico a barre nella pagina dei risultati, anzichรฉ i conteggi grezzi, per una visione piรน chiara dell'esito.
  • Rendi dinamico il sondaggio memorizzando la domanda e le opzioni nel database, รจ possibile riutilizzare il codice per qualsiasi sondaggio.

DOMANDE FREQUENTI

Il front controller instrada ogni richiesta attraverso un singolo punto di ingresso, solitamente index.php, che carica poi la logica e la vista appropriate. Centralizza il routing, l'autenticazione e la configurazione condivisa ed รจ alla base della maggior parte dei framework PHP.

I metodi piรน comuni includono l'impostazione di un cookie dopo il voto, la marcatura della sessione come votante o la memorizzazione dell'indirizzo IP e del timestamp del votante nel database. Nessuno di questi metodi รจ infallibile, quindi รจ consigliabile combinarli o richiedere l'accesso tramite login per un controllo piรน rigoroso.

Sostituisci le query concatenate con istruzioni preparate in mysqli o PDO, associando il valore del voto come parametro. Verifica inoltre che la scelta corrisponda a uno dei numeri previsti prima che venga eseguita la query.

Sรฌ. L'IA puรฒ aggiungere piรน domande, opzioni dinamiche dal database, risultati percentuali con un grafico e una pagina di amministrazione. Descrivi le funzionalitร  desiderate, quindi rivedi e testa il codice generato prima di implementarlo.

Sรฌ. Incolla il modello, il controller e le viste, e l'IA puรฒ individuare variabili non definite, argomenti di connessione mancanti, rischi di injection e output non codificati, quindi suggerire versioni corrette e piรน sicure da testare.

Riassumi questo post con: