Criando um Chat Online em PHP

Como Criar um Sistema de Chat em Tempo Real com PHP, JavaScript e MySQL

Este tutorial irá guiá-lo na criação de um sistema de chat em tempo real com PHP, JavaScript e MySQL. Vamos criar uma área administrativa para os atendentes monitorarem e responderem aos visitantes, além de implementar um sistema de login, notificações em tempo real, painel administrativo e outras funcionalidades.


Passo 1: Estrutura do Banco de Dados

Primeiro, vamos criar a estrutura do banco de dados necessário para o sistema de chat. A tabela `chats` irá armazenar as informações do chat, enquanto a tabela `users` irá armazenar os usuários (atendentes e administradores). Além disso, criamos as tabelas `messages` para armazenar as mensagens individuais dos chats, e `visitor_sessions` para registrar as sessões dos visitantes.

CREATE TABLE `users` (
      `user_id` INT(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
      `email` VARCHAR(320) NOT NULL,
      `password` VARCHAR(128) NOT NULL,
      `role` ENUM('admin', 'attendant') NOT NULL,
      `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP
    );

    CREATE TABLE `visitor_sessions` (
      `session_id` INT(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
      `visitor_id` INT(11) UNSIGNED NOT NULL,
      `chat_id` INT(11) UNSIGNED NOT NULL,
      `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP
    );

    CREATE TABLE `chats` (
      `chat_id` INT(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
      `visitor_id` INT(11) UNSIGNED NOT NULL,
      `attendant_id` INT(11) UNSIGNED DEFAULT NULL,
      `status` ENUM('open', 'closed') DEFAULT 'open',
      `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
      `feedback` VARCHAR(255) DEFAULT NULL
    );

    CREATE TABLE `messages` (
      `message_id` INT(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
      `chat_id` INT(11) UNSIGNED NOT NULL,
      `sender_id` INT(11) UNSIGNED NOT NULL,
      `message` TEXT NOT NULL,
      `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP
    );

As tabelas agora estão organizadas da seguinte maneira:

  • users: Contém os usuários do sistema, incluindo atendentes e administradores.
  • visitor_sessions: Registra as sessões dos visitantes no chat (relacionando com a tabela `chats`).
  • chats: Armazena os chats, incluindo o status (aberto ou fechado) e o feedback após o atendimento.
  • messages: Armazena as mensagens enviadas dentro de cada chat.

Passo 2: Sistema de Login e Área Administrativa

Agora, vamos criar o sistema de login, onde administradores e atendentes poderão acessar a área administrativa do chat.

Criação do Formulário de Login

Crie um arquivo chamado login.php para o formulário de login. O formulário permitirá que o usuário insira o email e a senha.

<form method="POST" action="login_process.php">
        <label for="email">Email:</label>
        <input type="email" name="email" required />
        <br>
        <label for="password">Senha:</label>
        <input type="password" name="password" required />
        <br>
        <button type="submit">Entrar</button>
    </form>

Agora, crie o arquivo login_process.php, que irá verificar as credenciais do usuário e redirecionar para a área administrativa.

<?php
    session_start();
    include('db_connection.php');

    $email = $_POST['email'];
    $password = $_POST['password'];

    $stmt = $pdo->prepare("SELECT * FROM users WHERE email = ?");
    $stmt->execute([$email]);
    $user = $stmt->fetch();

    if ($user && password_verify($password, $user['password'])) {
        $_SESSION['user_id'] = $user['user_id'];
        $_SESSION['role'] = $user['role'];
        header("Location: admin_dashboard.php");
    } else {
        echo "Email ou senha inválidos.";
    }
    ?>

Este script irá verificar as credenciais do usuário e, se estiverem corretas, redirecionará o usuário para a área administrativa de acordo com seu perfil.


Passo 3: Área Administrativa (Admin Dashboard)

A área administrativa permitirá que os atendentes visualizem os chats em tempo real, respondam às mensagens e alterem o status do chat.

Criação do Painel de Administração

Crie um arquivo chamado admin_dashboard.php. Este arquivo exibirá o painel com todos os chats abertos e permitirá aos atendentes responderem e mudar o status das conversas.
<?php
    session_start();
    include('db_connection.php');

    // Verifica se o usuário está logado e é um atendente
    if (!isset($_SESSION['user_id']) || $_SESSION['role'] !== 'attendant') {
        header("Location: login.php");
        exit;
    }

    // Obtém os chats abertos
    $stmt = $pdo->prepare("SELECT * FROM chats WHERE status = 'open' ORDER BY created_at DESC");
    $stmt->execute();
    $chats = $stmt->fetchAll();
    ?>

    <h2>Painel de Atendentes</h2>
    <table>
        <tr>
            <th>Chat ID</th>
            <th>Visitante</th>
            <th>Mensagem</th>
            <th>Ação</th>
        </tr>
        <?php foreach ($chats as $chat): ?>
            <tr>
                <td><?php echo $chat['chat_id']; ?></td>
                <td>Visitante <?php echo $chat['visitor_id']; ?></td>
                <td><?php echo htmlspecialchars($chat['message']); ?></td>
                <td>
                    <a href="respond_chat.php?chat_id=<?php echo $chat['chat_id']; ?>">Responder</a>
                    <a href="close_chat.php?chat_id=<?php echo $chat['chat_id']; ?>">Fechar Chat</a>
                </td>
            </tr>
        <?php endforeach; ?>
    </table>

Passo 4: Implementando Feedback dos Visitantes

Após cada chat, permita que os visitantes forneçam feedback. Crie um formulário simples de feedback como mostrado a seguir.
<form action="submit_feedback.php" method="POST">
        <label for="feedback">Seu Feedback:</label>
        <textarea name="feedback" required></textarea>
        <br>
        <button type="submit">Enviar Feedback</button>
    </form>

Conclusão

Agora você tem um sistema de chat em tempo real, completo com painel administrativo, login de usuários, feedback dos visitantes e muitas funcionalidades interativas. Este sistema é totalmente personalizável e pode ser expandido com mais recursos, como notificações em tempo real e autenticação de dois fatores.

Recomendações de segurança:

  • Use HTTPS para proteger as informações enviadas entre o cliente e o servidor.
  • Adicione validação de entrada para prevenir ataques de SQL Injection.
  • Considere implementar autenticação de dois fatores para maior segurança.

Se precisar de ajuda ou quiser personalizar ainda mais o seu sistema, entre em contato conosco!

Solicite Suporte para Personalização de Chat

  • 0 Benutzer fanden dies hilfreich
War diese Antwort hilfreich?

Verwandte Artikel

Como Criar um Formulário de Contato em PHP

Como Criar um Formulário de Contato em PHP Um formulário de contato é essencial para qualquer...

Contador de Visitas em PHP: Fácil, Rápido e Funcional

Contador de Visitas em PHP: Fácil, Rápido e Funcional Quer saber quantas vezes seu site foi...

Como criar um sistema de comentários em PHP

Como Criar um Sistema de Comentários com Moderação em PHP Quer permitir que visitantes...

1º Método: Recuperar senha de Usuário em Banco de Dados com Bcrypt

Como Redefinir Senha no Banco de Dados com PHP Se você perdeu o acesso a uma conta no seu...

2º Método: Recuperar senha de Usuário em Banco de Dados com Bcrypt

Recuperação de Senha com Hashing em PHP e Conexão com Banco de Dados Este tutorial foi...