PHP プロジェクト: 意見投票アプリケーションの作成
⚡ スマートサマリー
このPHPプロジェクトでは、これまでのレッスンで学んだことをすべて統合し、意見投票アプリケーションをゼロから構築します。アプリケーションはフロントコントローラー、ビジネスロジックモデル、ビューファイルに分割され、お気に入りの投票を保存して集計します。 Javaスクリプトライブラリ MySQL データベース。
PHPを使用して世論調査アプリケーションを作成する方法
このPHPプロジェクトでは、世論調査アプリケーションを作成します。
世論調査は、主に以下の3つの要素で構成されます。
フロントコントローラー これは、読み込むHTMLコードを決定するインデックスページです。これにより、アプリケーションのエントリポイントが1つに絞られ、アプリケーションをより詳細に制御できるようになります。
ビジネスの論理 ―ここにはデータベースとのやり取りを行うためのPHPコードが含まれます。これにより、ビジネスロジックとプレゼンテーションを分離できるため、アプリケーションの保守が容易になります。
ビュー ―ここにはHTMLコードが含まれます。ページは2つあります。具体的には以下のとおりです。
- Opinion.html.php – これには、質問とオプションを含む HTML コードが含まれます
- results.html.php – これには世論調査の結果を表示する HTML コードが含まれます
行われた仮定
世論調査では、「あなたの好きなものは何ですか?」という質問をします。 Javaスクリプト 図書館?
答えは以下のとおりです。
- jQueryの
- Mooツール
- YUIライブラリ
- グロー
アプリケーションを作成する手順は以下のとおりです。
ステップ 1) データベース接続
このセクションは、次の知識があることを前提としています。 MySQL そしてその投与方法について。 MySQL、私たちをチェックしてください SQL チュートリアル のセクションから無料でダウンロードできます。
私たちのアプリケーションには、3つのフィールドを持つテーブルが1つだけあります。具体的には以下のとおりです。
- id – 主キーとして自動生成される番号
- 選択肢 – 選択されたものを表す数字 Javaスクリプトライブラリ
- ts – 投票のタイムスタンプ
以下のスクリプトは 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`) );
ステップ 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_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); } } ?>
ここに、
- 「public function __construct()」は、データベース接続を確立するために使用されるクラス コンストラクター メソッドです。
- 「public function execute_query(…)」は、挿入、更新、削除などのクエリを実行するためのメソッドです。
- 「public function select(…)」は、データ取得のためのメソッドです。 データベース そして配列を返します。
- 「public function insert(…)」は、execute_queryメソッドを呼び出すinsertメソッドです。
- 「public function __destruct()」は、データベース接続を閉じるクラス デストラクターです。
それでは、フロントコントローラーを作成しましょう。 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'; ?>
ここに、
- 「'opinion_poll_model.php' が必要です;」 ビジネスロジッククラスをロードします
- 「$model = 新しい Opinion_poll_model();」 ビジネス ロジック クラスのインスタンスを作成します
- 「if (count($_POST) == 1)…」はデータの検証を実行し、 Java候補者に投票がなかった場合にメッセージボックスを表示するスクリプト。
- 「if (count($_POST) > 1)…」は、$_POST配列内の項目数を数えることで、投票が選択されたかどうかを確認します。項目が選択されていない場合、$_POSTにはsubmit項目のみが含まれます。図書館が選択されている場合、$_POST配列にはsubmit項目とvote項目の2つの要素が含まれます。このコードは、新しい投票記録を挿入し、結果ページを表示します。
- 「exit;」は、結果が表示された後、スクリプトの実行を終了するために使用され、意見調査フォームが表示されないようにします。
- 「'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" />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>
結果.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/
JavaScriptライブラリを選択せずに「OK」ボタンをクリックすると、次のメッセージボックスが表示されます。
JavaScriptライブラリを選択し、「OK」ボタンをクリックしてください。すると、以下のような結果ページが表示されます。
世論調査アプリを改善する方法
このプロジェクトは確固たる基盤を築いています。本番運用に向けて、以下の改善点を検討してください。
- 準備されたステートメントを使用する 連結されたクエリからSQLインジェクションのリスクを排除するために、モデル内で。
- 二重投票を防止する クッキー、セッションフラグ、またはタイムスタンプとともに投票者のIPアドレスを記録することによって。
- パーセンテージと棒グラフを表示する 結果ページでは、生のカウント数ではなく、より明確な結果表示を実現します。
- 投票を動的にする 質問と選択肢をデータベースに保存することで、どのアンケートにもそのコードを再利用できます。




