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: