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

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 determinerà il codice HTML da caricare. Ciò garantirà che la nostra applicazione abbia un unico punto di ingresso. Questo ci darà un maggiore controllo sull'applicazione.

Logica di business – questo conterrà il codice PHP per interagire con il database. Ciò ci consentirà di separare la logica aziendale dalla presentazione rendendo la nostra applicazione facile da mantenere

Visualizzazioni – questo conterrà il codice HTML. Avremo due pagine e precisamente;

  • 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 amministrarlo, se non hai familiarità con questi MySQL, controlla il nostro Tutorial sull'SQL .

La nostra applicazione avrà una sola tabella con 3 campi vale a dire;

  • id: numero generato automaticamente come chiave primaria
  • scelta – il numero che rappresenta un candidato alla presidenza
  • ts – il timestamp del voto

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

);
?>

Passaggio 2) Codifica della nostra applicazione

Creiamo ora il nostro livello di logica aziendale che gestirà la connettività del database. 'opinione_sondaggio_modello.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);

    }

}

?>

QUI,

  • "funzione pubblica __construct()" è il metodo di costruzione della classe utilizzato per stabilire la connessione al database
  • "funzione pubblica esegui_query(...)" è il metodo per eseguire query come inserimento, aggiornamento ed eliminazione
  • "selezione funzione pubblica" è il metodo per recuperare i dati dal file banca dati e restituendo un array numerico.
  • "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 front controller 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';

?>

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 non è stato votato alcun candidato.
  • "if (count($_POST) > 1)…" controlla se è stato selezionato un voto contando il numero di elementi nell'array $_POST. Se non è stato selezionato alcun elemento, $_POST conterrà solo l'elemento inviato. Se è stato scelto un candidato, l'array $_POST avrà due elementi, l'elemento di invio e quello di voto. Questo codice viene utilizzato anche per inserire un nuovo record di voto e quindi visualizzare la pagina dei risultati
  • "Uscita;" viene utilizzato per terminare l'esecuzione dello script dopo che i risultati sono stati visualizzati 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.

Creiamo ora le visualizzazioni. 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" />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>

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 all'URL http://localhost/opinionpoll/

Testare un'applicazione per un sondaggio d'opinione

Se si fa clic sul pulsante Ok senza selezionare una libreria JS, verrà visualizzata la seguente finestra di messaggio.

Testare un'applicazione per un sondaggio d'opinione

Selezionare una libreria JS quindi fare clic sul pulsante OK. Otterrai la pagina dei risultati simile a quella mostrata di seguito.

Testare un'applicazione per un sondaggio d'opinione

Sommario

  • Dividere l'applicazione in logica aziendale, i livelli di visualizzazione del front controller è una buona pratica di progettazione dell'applicazione
  • JavaLo script è utile per eseguire la convalida lato client
  • È una buona pratica di programmazione utilizzare file.html.php per i file che contengono sia HTML che Codici PHP
  • L'applicazione per il sondaggio d'opinione dimostra come le conoscenze apprese nelle lezioni precedenti possano essere combinate per sviluppare un'applicazione funzionante con un database back-end.