PHP 프로젝트: 여론 조사 애플리케이션 만들기
⚡ 스마트 요약
이 PHP 프로젝트는 이전 수업에서 배운 내용들을 통합하여 여론 조사 애플리케이션을 처음부터 구축하는 것을 목표로 합니다. 애플리케이션은 프런트 컨트롤러, 비즈니스 로직 모델, 뷰 파일로 분리되어 있으며, 선호하는 후보에 대한 투표를 저장하고 집계합니다. Java스크립트 라이브러리 MySQL 데이터 베이스.

PHP를 사용하여 여론 조사 애플리케이션을 만드는 방법
이 PHP 프로젝트에서는 여론 조사 애플리케이션을 만들 것입니다.
여론조사는 크게 세 가지 구성 요소로 이루어집니다.
전면 컨트롤러 – 이 페이지는 로드될 HTML 코드를 결정하는 인덱스 페이지입니다. 이를 통해 애플리케이션은 단일 진입점을 갖게 되어 애플리케이션에 대한 제어력을 높일 수 있습니다.
비즈니스 로직 이 영역에는 데이터베이스와 상호 작용하는 PHP 코드가 포함됩니다. 이를 통해 비즈니스 로직과 화면 표시를 분리하여 애플리케이션 유지 관리를 용이하게 할 수 있습니다.
조회수 – 여기에 HTML 코드가 포함됩니다. 페이지는 총 두 개이며, 내용은 다음과 같습니다.
- 의견.html.php - 여기에는 질문과 옵션이 포함된 HTML 코드가 포함됩니다.
- results.html.php – 여기에는 여론 조사 결과를 표시하는 HTML 코드가 포함됩니다.
가정된 내용
여론조사에서는 "가장 좋아하는 것은 무엇입니까?"라는 질문을 할 것입니다. JavaScript 도서관?
답변은 다음과 같습니다.
- JQuery와
- 무도구
- YUI 라이브러리
- 발광
다음은 신청서를 작성하는 단계입니다.
1단계) 데이터베이스 연결
이 섹션에서는 다음에 대한 지식이 있다고 가정합니다. MySQL 그리고 어떻게 투여하는지 알려드리겠습니다. 만약 익숙하지 않으시다면, MySQL, 우리를 확인 SQL 튜토리얼 안내
저희 애플리케이션은 3개의 필드를 가진 테이블 하나만으로 구성됩니다. 필드의 종류는 다음과 같습니다.
- 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단계) 애플리케이션 코딩
이제 데이터베이스 연결을 처리할 비즈니스 로직 계층을 만들어 보겠습니다. 의견_poll_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_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); } } ?>
이리,
- "공용 함수 __construct()"는 데이터베이스 연결을 설정하는 데 사용되는 클래스 생성자 메서드입니다.
- “공개 함수 execute_query(…)”는 삽입, 업데이트, 삭제와 같은 쿼리를 실행하는 메서드입니다.
- “공개 함수 select(…)”는 해당 객체에서 데이터를 검색하는 메서드입니다. 데이터베이스 배열을 반환합니다.
- "공용 함수 삽입(...)"은 Execute_query 메서드를 호출하는 삽입 메서드입니다.
- "공용 함수 __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에는 제출 항목만 포함됩니다. 도서관이 선택된 경우 $_POST 배열에는 제출 항목과 투표 항목, 두 개의 요소가 포함됩니다. 이 코드는 또한 새로운 투표 기록을 삽입한 후 결과 페이지를 표시합니다.
- "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/
자바스크립트 라이브러리를 선택하지 않고 확인 버튼을 클릭하면 다음과 같은 메시지 상자가 나타납니다.
원하는 자바스크립트 라이브러리를 선택한 다음 확인 버튼을 클릭하세요. 아래와 같은 결과 페이지가 나타납니다.
여론조사 앱을 개선하는 방법
이 프로젝트는 탄탄한 기반을 갖추고 있습니다. 상용화 단계로 나아가기 위해서는 다음과 같은 개선 사항을 고려해 보세요.
- 미리 준비된 명세서를 사용하십시오. 이 모델은 연결된 쿼리로 인한 SQL 인젝션 위험을 제거하기 위해 만들어졌습니다.
- 이중 투표 방지 쿠키, 세션 플래그를 사용하거나 투표자의 IP 주소와 타임스탬프를 기록하는 방식으로 확인할 수 있습니다.
- 백분율과 막대 그래프를 표시하세요 결과 페이지에서는 원시 집계 대신 결과를 보다 명확하게 보여주기 위해 관련 정보를 표시합니다.
- 설문조사를 역동적으로 만드세요 질문과 선택지를 데이터베이스에 저장함으로써, 어떤 설문조사에도 동일한 코드를 재사용할 수 있습니다.



