thumbnail

Construindo um Sistema de Sorteio Simples

Yuri do Monte Yuri do Monte | 4 min de leitura
há 2 semanas

Construindo um Sistema de Sorteio Simples com PHP e JavaScript

Neste post, vamos analisar a construção de um sistema de sorteio de nomes simples, baseado no repositório prize_draw de Yuri Martins. Abordaremos a estrutura do projeto, as tecnologias utilizadas e o funcionamento do código, tanto no frontend quanto no backend.


Estrutura do Projeto

O projeto é composto por quatro arquivos principais, cada um com uma responsabilidade bem definida:

image.png 38 KB

O Frontend: A Interface do Usuário

A interface do usuário é construída em index.php e consiste em um formulário simples com uma área de texto para que o usuário insira os nomes dos participantes, separados por vírgula. A estilização é feita com o auxílio do framework Bootstrap, o que garante uma aparência limpa e responsiva.

O arquivo script.js é responsável por interceptar o envio do formulário. Ao invés de um envio tradicional, que recarregaria a página, o script utiliza a Fetch API para enviar os dados ao backend de forma assíncrona. O código a seguir ilustra essa funcionalidade:


document.getElementById('sortForm').addEventListener("submit", function(e){
    e.preventDefault();

    const formData = new FormData(this);

    fetch('sort_names.php', {
        method: 'POST',
        body: formData
    })
    .then(response => response.text())
    .then(data => {
        document.getElementById('sortedName').textContent = data;
        const modal = new bootstrap.Modal(document.getElementById('resultModal'));
        modal.show();

        document.getElementById('sort_names').value = '';
    })
    .catch(error => {
        console.error('Error:', error);
    });
});


Após o recebimento da resposta do backend, o nome sorteado é exibido em um modal do Bootstrap, e o campo de texto é limpo para um novo sorteio.

O Backend: A Lógica do Sorteio

A mágica acontece no arquivo sort_names.php. O script PHP recebe a lista de nomes enviada pelo frontend, processa os dados e retorna um único nome sorteado. O trecho de código a seguir demonstra a lógica principal:


if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $sort_names = isset($_POST['sort']) ? $_POST['sort'] : '';

    $names = explode(',', $sort_names);

    $rand = array_rand($names, 1);

    $name = htmlspecialchars(trim($names[$rand]), ENT_QUOTES, 'UTF-8');

    echo $name;
}else{
    echo "Por favor insira, nomes validos";
}


O script primeiramente verifica se a requisição foi feita utilizando o método POST. Em seguida, a string de nomes é separada em um array utilizando a função explode(). O sorteio em si é realizado pela função array_rand(), que seleciona aleatoriamente um ou mais índices de um array. Neste caso, apenas um índice é selecionado.

Por fim, o nome correspondente ao índice sorteado é retornado como resposta. É importante notar o uso da função htmlspecialchars() para prevenir ataques de Cross-Site Scripting (XSS), uma medida de segurança essencial ao lidar com dados inseridos pelo usuário.

Conclusão

O projeto de sistema de sorteio, embora simples, é um excelente exemplo de como integrar tecnologias de frontend e backend para criar uma aplicação web funcional. A utilização de PHP para a lógica de servidor e JavaScript com a Fetch API para a comunicação assíncrona resulta em uma experiência de usuário fluida e moderna.

Como sugestões de melhorias futuras, poderíamos implementar um sistema de armazenamento dos nomes em um banco de dados, permitir a realização de sorteios com múltiplos ganhadores e aprimorar a interface com animações e um design mais elaborado.


Referências

[1] yuri-spm/desafios: Desafios de Programação.

Comentários

Realize login para comentar neste post
Este post não possui comentários