PHP 项目:创建民意调查应用程序

在这个 PHP 项目中, 我们将创建一个民意调查应用程序。

民意调查将由三个主要部分组成;

前端控制器 – 这是索引页,它将确定要加载的 HTML 代码。这将确保我们的应用程序有一个单一的入口点。这将使我们对应用程序有更多的控制权。

商业逻辑 – 这将包含用于与数据库交互的 PHP 代码。这将使我们能够将业务逻辑与表示分离,从而使我们的应用程序易于维护

观看数 – 这将包含 HTML 代码。我们将有两个页面,即:

  • opinion.html.php – 这将包含带有问题和选项的 HTML 代码
  • results.html.php – 这将包含显示民意调查结果的 HTML 代码

做出的假设

民意调查将提出以下问题——

什么是你最喜欢的 JavaScript 图书馆?

答案是

  • JQuery的
  • Moo工具
  • YUI图书馆
  • 辉光

以下是创建应用程序的步骤-

步骤 1)数据库连接

本节假设您了解 MySQL 以及如何管理它,如果你不熟悉这些 MySQL,检查我们的 SQL 教程 部分。

我们的应用程序将只有一个表,其中包含 3 个字段,即;

  • id – 自动生成数字作为主键
  • 选择——代表总统候选人的数字
  • ts – 投票的时间戳

下面的脚本创建了我们的 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`)

);
?>

步骤 2)编写应用程序代码

现在让我们创建处理数据库连接的业务逻辑层。 '意见投票模型.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);

    }

}

?>

这里,

  • “public function __construct()”是用于建立数据库连接的类构造函数方法
  • “public function execute_query(…)”是执行插入、更新和删除等查询的方法
  • “public function select” 是从 数据库 并返回一个数字数组。
  • “public function insert(…)”是调用execute_query方法的插入方法。
  • “public function __destruct()”是关闭数据库连接的类析构函数。

现在让我们创建前端控制器 的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';

?>

这里,

  • “require 'opinion_poll_model.php';”加载业务逻辑类
  • “$model = new Opinion_poll_model();” 创建业务逻辑类的实例
  • “if (count($_POST) == 1)…” 执行数据验证并使用 Java如果没有候选人被投票,则脚本显示一个消息框。
  • “if (count($_POST) > 1)…” 通过计算 $_POST 数组中的项目数来检查是否已选中投票。如果没有选择任何项目,则 $_POST 将仅包含提交项目。如果已选择候选人,则 $_POST 数组将包含两个元素,即提交和投票项目。此代码还用于插入新的投票记录,然后显示结果页面
  • “exit;”用于在结果显示之后终止脚本执行,这样就不会显示民意调查表格。
  • 如果没有选择任何内容,“require 'opinion.html.php';”则显示民意调查表。

现在让我们创建视图。 意见.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>

结果.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>

步骤 3)测试我们的应用程序

假设您已将文件保存在 opinionpoll 文件夹中,请浏览到 URL http://localhost/opinionpoll/

测试民意调查应用程序

如果您单击“确定”按钮而没有选择 JS 库,您将看到以下消息框。

测试民意调查应用程序

选择一个 JS 库,然后单击“确定”按钮。您将获得类似于下图的结果页面。

测试民意调查应用程序

总结

  • 将应用程序划分为业务逻辑层、前端控制器视图层是一种很好的应用程序设计实践
  • Java脚本对于执行客户端验证很有用
  • 对于同时包含 HTML 和 PHP代码
  • 民意调查应用程序演示了如何将前面课程中学到的知识结合起来,开发一个具有数据库后端的工作应用程序。