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

keer bekeken – 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

In deze sectie wordt ervan uitgegaan dat u kennis heeft van MySQL en hoe u deze moet beheren. Als u niet bekend bent met deze MySQL, raadpleeg dan 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 ​​bericht weer te geven box 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
  • "Uitgang;" wordt gebruikt om de uitvoering van het script te beëindigen nadat de resultaten zijn weergegeven, zodat het opiniepeilingformulier 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

Ervan uitgaande dat u de bestanden in de map opiniepoll hebt opgeslagen, bladert u naar de URL http://localhost/opinionpoll/

Een opiniepeilingtoepassing testen

Als u op de knop Ok klikt zonder een JS-bibliotheek te selecteren, krijgt u het volgende berichtwing Bericht box.

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

Samengevat

  • 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 validatie aan de clientzijde
  • Het is een goede programmeerpraktijk om file.html.php te gebruiken voor bestanden die zowel HTML als .php bevatten PHP-codes
  • De opiniepeiling-applicatie laat zien hoe de kennis die in de voorgaande lessen is geleerd, kan worden samengevoegd tot het ontwikkelen van een werkende applicatie met een database-backend.