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.

  • 🧭 Controlador frontal: Um Ćŗnico ponto de entrada index.php decide qual visualização carregar, proporcionando ao aplicativo um local controlado para rotear as solicitaƧƵes.
  • 🧠 LogĆ­ca de negócios: Uma classe de modelo lida com todo o trabalho de banco de dados, mantenhaping Acesso aos dados separado da apresentação para facilitar a manutenção.
  • šŸ–¼ļø Visualizar arquivos: Os arquivos de visualização .html.php contĆŖm o formulĆ”rio da pesquisa e a pĆ”gina de resultados, misturando HTML com pequenas tags de saĆ­da PHP.
  • šŸ—ƒļø Tabela de banco de dados: Uma Ćŗnica tabela js_libraries armazena cada voto como um nĆŗmero de escolha e um registro de data e hora, indexados por um ID de incremento automĆ”tico.
  • āœ… Validação: Uma pequena JavaA verificação de script avisa o usuĆ”rio quando o formulĆ”rio Ć© enviado sem que nenhuma biblioteca seja selecionada.
  • šŸ“Š Contagem de votos: O controlador insere o voto e, em seguida, executa consultas COUNT para cada opção, a fim de construir a tabela de resultados.
  • šŸ¤– AssistĆŖncia de IA: As ferramentas de IA podem transformar essa pesquisa em um aplicativo completo e revisar o código em busca de erros e problemas de seguranƧa.

Aplicativo PHP para Pesquisa de Opinião

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/

Testando um aplicativo de pesquisa de opinião

Se você clicar no botão OK sem selecionar uma biblioteca JS, a seguinte mensagem serÔ exibida.

Testando um aplicativo de pesquisa de opinião

Selecione uma biblioteca JS e clique no botão OK. Você verÔ uma pÔgina de resultados semelhante à mostrada abaixo.

Testando um aplicativo de pesquisa de opinião

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.

Perguntas Frequentes

O controlador frontal encaminha todas as requisições por meio de um único ponto de entrada, geralmente o arquivo index.php, que então carrega a lógica e a visualização corretas. Ele centraliza o roteamento, a autenticação e a configuração compartilhada, sendo a base da maioria dos frameworks PHP.

As abordagens mais comuns são definir um cookie após a votação, marcar a sessão como votada ou armazenar o endereço IP e o registro de data e hora do votante no banco de dados. Nenhuma delas é infalível, portanto, combine métodos ou exija login para um controle mais rigoroso.

Substitua as consultas concatenadas por instruções preparadas em mysqli ou PDO, vinculando o valor do voto como um parâmetro. Além disso, valide se a escolha é um dos números esperados antes mesmo de chegar à consulta.

Sim. A IA pode adicionar vÔrias perguntas, opções dinâmicas do banco de dados, resultados percentuais com um grÔfico e uma pÔgina administrativa. Descreva os recursos desejados e, em seguida, revise e teste o código gerado antes de implantÔ-lo.

Sim. Cole o modelo, o controlador e as visualizaƧƵes, e a IA poderĆ” identificar variĆ”veis ​​indefinidas, argumentos de conexĆ£o ausentes, riscos de injeção e saĆ­das nĆ£o escapadas, sugerindo entĆ£o versƵes corrigidas e mais seguras para teste.

Resuma esta postagem com: