PHP-projecten: maak een opiniepeilingtoepassing

In dit PHP-project, we gaan een opiniepeiling-applicatie maken.

De opiniepeiling zal uit drie hoofdcomponenten bestaan;

Voorste controleur โ€“ dit is de indexpagina die bepaalt welke HTML-code moet worden geladen. Dit zorgt ervoor dat onze applicatie รฉรฉn enkel toegangspunt heeft. Dit geeft ons meer controle over de applicatie.

Zakelijke logica โ€“ dit bevat de PHP-code voor interactie met de database. Hierdoor kunnen we de bedrijfslogica scheiden van de presentatie, waardoor onze applicatie eenvoudig te onderhouden is

Weergaves โ€“ dit bevat de HTML-code. We zullen twee pagina's hebben namelijk;

  • opinie.html.php โ€“ dit bevat de HTML-code met de vraag en opties
  • results.html.php โ€“ dit bevat de HTML-code die de resultaten van de opiniepeiling weergeeft

Aannames gemaakt

De opiniepeiling zal de vraag stellen:

Wat is uw favoriete JavaScript Bibliotheek?

Antwoorden zouden zijn

  • JQuery
  • MooTools
  • YUI-bibliotheek
  • Glow

Hier zijn de stappen om de applicatie te makenโ€“

Stap 1) Databaseconnectiviteit

Dit onderdeel veronderstelt kennis van MySQL en hoe u het moet toedienen, als u hiermee niet bekend bent MySQL, check onze SQL-tutorials pagina.

Onze applicatie zal slechts รฉรฉn tabel hebben met 3 velden, namelijk;

  • id โ€“ nummer automatisch genereren als primaire sleutel
  • keuze โ€“ het getal dat een presidentskandidaat vertegenwoordigt
  • ts โ€“ de tijdstempel voor de stemming

Met het onderstaande script wordt onze tabel js_libraries gemaakt.

<?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`)

);
?>

Stap 2) Coderen van onze applicatie

Laten we nu onze bedrijfslogische laag maken die de databaseconnectiviteit afhandelt. 'opiniepoll_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);

    }

}

?>

HIER,

  • โ€œpublic function __construct()โ€ is de klassenconstructormethode die wordt gebruikt om de databaseverbinding tot stand te brengen
  • โ€œpublic function execute_query(โ€ฆ)โ€ is de methode voor het uitvoeren van queries zoals invoegen, bijwerken en verwijderen
  • โ€œpublic function selectโ€ is de methode voor het ophalen van gegevens uit de databank en het retourneren van een numerieke array.
  • โ€œpublic function insert(โ€ฆ)โ€ is de insert-methode die de execute_query-methode aanroept.
  • โ€œpublic function __destruct()โ€ is de klassendestructor die de databaseverbinding sluit.

Laten we nu de voorcontroller maken 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';

?>

HIER,

  • โ€œvereis 'opinion_poll_model.php';โ€ laadt de klasse bedrijfslogica
  • โ€œ$model = nieuw Opinion_poll_model();โ€ creรซert een exemplaar van de bedrijfslogicaklasse
  • โ€œif (count($_POST) == 1)...โ€ voert de gegevensvalidatie uit en gebruikt JavaScript om een โ€‹โ€‹berichtvenster weer te geven als er niet op een kandidaat is gestemd.
  • โ€œif (count($_POST) > 1)...โ€ controleert of er een stem is geselecteerd door het aantal items in de $_POST array te tellen. Als er geen item is geselecteerd, bevat de $_POST alleen het ingediende item. Als er een kandidaat is gekozen, bevat de $_POST-array twee elementen: het onderwerp Verzenden en Stemmen. Deze code wordt ook gebruikt om een โ€‹โ€‹nieuw stemrecord in te voegen en vervolgens de resultatenpagina weer te geven
  • โ€œexit;โ€ wordt gebruikt om de uitvoering van het script te beรซindigen nadat de resultaten zijn weergegeven, zodat het opiniepeilingsformulier niet wordt weergegeven.
  • โ€œvereis 'opinion.html.php';โ€ geeft het opiniepeilingformulier weer als er niets is geselecteerd.

Laten we nu de weergaven maken. mening.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>

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

Stap 3) Onze applicatie testen

Als je de bestanden in de map 'opinionpoll' hebt opgeslagen, ga dan naar de betreffende map. URL http://localhost/opinionpoll/

Een opiniepeilingtoepassing testen

Als u op de OK-knop klikt zonder een JS-bibliotheek te selecteren, krijgt u het volgende berichtvenster te zien.

Een opiniepeilingtoepassing testen

Selecteer een JS-bibliotheek en klik vervolgens op de knop OK. U krijgt een resultatenpagina die lijkt op de onderstaande pagina.

Een opiniepeilingtoepassing testen

Samenvatting

  • Het verdelen van uw applicatie in bedrijfslogica en front-controllerweergavelagen is een goede praktijk voor het ontwerpen van applicaties
  • JavaScript is handig voor het uitvoeren van client-side validatie
  • Het is een goede programmeerpraktijk om file.html.php te gebruiken voor bestanden die zowel HTML als .php bevatten PHP-codes
  • De toepassing van de opiniepeiling laat zien hoe de kennis die in de voorgaande lessen is opgedaan, kan worden gecombineerd om te ontwikkelen.ping Een werkende applicatie met een database als backend.

Vat dit bericht samen met: