Projetos PHP: crie um aplicativo de pesquisa de opinião
ā” Resumo Inteligente
Este projeto em PHP constrói um aplicativo de pesquisa de opinião do zero, integrando lições anteriores em um exemplo funcional. Ele divide o aplicativo em um controlador frontal, um modelo de lógica de negócios e arquivos de visualização, armazenando e contabilizando os votos para um favorito. JavaBiblioteca de scripts em um MySQL base de dados.

Como criar um aplicativo de pesquisa de opinião usando PHP
Neste projeto em PHP, vamos criar um aplicativo de pesquisa de opinião.
A pesquisa de opinião serÔ composta por 3 componentes principais:
Controlador frontal ā Esta Ć© a pĆ”gina inicial que determinarĆ” o código HTML a ser carregado. Isso garante que nossa aplicação tenha um Ćŗnico ponto de entrada, o que nos dĆ” mais controle sobre ela.
LogĆca de negócios ā Esta pasta conterĆ” o código PHP para interação com o banco de dados. Isso nos permite separar a lógica de negócios da apresentação, facilitando a manutenção da nossa aplicação.
VisualizaƧƵes ā aqui estarĆ” o código HTML. Teremos duas pĆ”ginas, a saber:
- OpiniĆ£o.html.php ā conterĆ” o código HTML com a pergunta e opƧƵes
- results.html.php ā conterĆ” o código HTML que exibe os resultados da pesquisa de opiniĆ£o
SuposiƧƵes feitas
A enquete perguntarĆ”: Qual Ć© o seu favorito? JavaScript Biblioteca?
As respostas seriam:
- JQuery
- MooTools
- Biblioteca YUI
- Brilho
Aqui estão os passos para criar a aplicação.
Etapa 1) Conectividade do banco de dados
Esta seção pressupõe conhecimento de MySQL e como administrÔ-lo. Se você não estiver familiarizado com MySQL, verifique nosso Tutoriais SQL seção.
Nossa aplicação terÔ apenas uma tabela, com 3 campos, a saber:
- id ā nĆŗmero gerado automaticamente como chave primĆ”ria
- escolha ā o nĆŗmero que representa a opção escolhida JavaBiblioteca de scripts
- ts ā o carimbo de data/hora da votação
O script abaixo cria nossa tabela 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`) );
Etapa 2) Codificando nosso aplicativo
Vamos agora criar nossa camada de lógica de negócios que irÔ lidar com a conectividade do banco de dados. opinião_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); } } ?>
AQUI,
- āfunção pĆŗblica __construct()ā Ć© o mĆ©todo construtor de classe usado para estabelecer a conexĆ£o com o banco de dados
- A função pĆŗblica `execute_query(ā¦)` Ć© o mĆ©todo para executar consultas como `insert`, `update` e `delete`.
- āpublic function select(ā¦)ā Ć© o mĆ©todo para recuperar dados do banco de dados e retornando um array.
- āpublic function insert(ā¦)ā Ć© o mĆ©todo insert que chama o mĆ©todo execute_query.
- āfunção pĆŗblica __destruct()ā Ć© o destruidor de classe que fecha a conexĆ£o com o banco de dados.
Vamos agora criar o controlador frontal. 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'; ?>
AQUI,
- ārequer 'opinion_poll_model.php';ā carrega a classe de lógica de negócios
- ā$model = novo Opinion_poll_model();ā cria uma instĆ¢ncia da classe de lógica de negócios
- āif (count($_POST) == 1)ā¦ā realiza a validação dos dados e utiliza JavaScript para exibir uma caixa de mensagem caso nenhum candidato tenha sido votado.
- O código āif (count($_POST) > 1)ā¦ā verifica se um voto foi selecionado, contando o nĆŗmero de itens no array $_POST. Se nenhum item foi selecionado, o array $_POST conterĆ” apenas o item de envio. Se uma biblioteca foi escolhida, o array $_POST terĆ” dois elementos: os itens de envio e de voto. Este código tambĆ©m insere um novo registro de voto e, em seguida, exibe a pĆ”gina de resultados.
- O comando āexit;ā Ć© usado para encerrar a execução do script após a exibição dos resultados, de forma que o formulĆ”rio da pesquisa de opiniĆ£o nĆ£o seja exibido.
- āexige 'opinion.html.php';ā exibe o formulĆ”rio de pesquisa de opiniĆ£o se nada tiver sido selecionado.
Vamos agora criar as visualizações. opinião.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>
resultados.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>
Etapa 3) Testando nosso aplicativo
Supondo que você tenha salvo os arquivos na pasta opinionpoll, navegue até o URL http://localhost/opinionpoll/
Se você clicar no botão OK sem selecionar uma biblioteca JS, a seguinte mensagem serÔ exibida.
Selecione uma biblioteca JS e clique no botão OK. Você verÔ uma pÔgina de resultados semelhante à mostrada abaixo.
Formas de melhorar o aplicativo de pesquisa de opinião
Este projeto possui uma base sólida. Para tornÔ-lo pronto para produção, considere as seguintes melhorias:
- Utilize declarações preparadas no modelo para eliminar o risco de injeção de SQL proveniente de consultas concatenadas.
- Impedir a votação dupla com um cookie, um sinalizador de sessão ou registrando o endereço IP do eleitor juntamente com o registro de data e hora.
- Exibir porcentagens e um grÔfico de barras Na pÔgina de resultados, em vez da contagem bruta, para uma visualização mais clara do resultado.
- Torne a enquete dinâmica. Ao armazenar a pergunta e as opções no banco de dados, você pode reutilizar o código para qualquer enquete.



