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.



