Ir para conteúdo
Fórum Script Brasil
  • 0

CÓDIGO PARA SELEÇÃO DE POLTRONAS


Neto Sales

Pergunta

Alguém pode me ajudar com esse código para seleção de poltronas. Atualmente ele gera a numeração das poltronas, à partir de uma consulta no banco de dados. O que alta funcionar é a seleção da poltrona com um clique no mouse, e a gravação das informações do form (cliente, pacote de viagem e poltrona) em uma nova tabela específica.

Segue código parcialmente funcional...

<?php
// Inicia a sessão
session_start();

// Verifica se o usuário está logado
if (!isset($_SESSION['usuario_id']) || empty($_SESSION['usuario_id'])) {
    // Redireciona para a página de login se não estiver logado
    header("Location: ../login.php");
    exit();
}

// Inclui a conexão ao banco de dados
include('../includes/db.php');

// Habilita a exibição de erros
error_reporting(E_ALL);
ini_set('display_errors', 1);

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    // Retorna a lista de nomes para o pacote selecionado
    if (isset($_POST['pacoteId'])) {
        $pacoteId = $_POST['pacoteId'];
        $stmt = $conn->prepare("
            SELECT cv.id, c.nome 
            FROM cadastro_vendas cv 
            INNER JOIN clientes c ON cv.nome = c.id 
            WHERE cv.pacote = :pacoteId
        ");
        $stmt->bindParam(':pacoteId', $pacoteId);
        $stmt->execute();
        $nomes = $stmt->fetchAll(PDO::FETCH_ASSOC);

        // Retorna os nomes como JSON
        echo json_encode($nomes);
        exit();
    }

    // Retorna o mapa de poltronas para o modelo selecionado
    if (isset($_POST['modeloId'])) {
        $modeloId = $_POST['modeloId'];
        $stmt = $conn->prepare("SELECT * FROM bus WHERE id = :modeloId");
        $stmt->bindParam(':modeloId', $modeloId);
        $stmt->execute();
        $modelo = $stmt->fetch(PDO::FETCH_ASSOC);

        // Verifica poltronas ocupadas
        $stmt = $conn->prepare("SELECT numero_poltrona, piso FROM poltronas WHERE modelo_id = :modeloId AND ocupada = 1");
        $stmt->bindParam(':modeloId', $modeloId);
        $stmt->execute();
        $poltronasOcupadas = $stmt->fetchAll(PDO::FETCH_ASSOC);

        // Mapeia as poltronas ocupadas
        $ocupadas = [];
        foreach ($poltronasOcupadas as $poltrona) {
            $ocupadas[$poltrona['piso']][] = $poltrona['numero_poltrona'];
        }

        // Retorna o mapa de poltronas como HTML
        ob_start();
        echo '<p>Modelo: ' . $modelo['modelo'] . '</p>';
        echo '<p>Pisos: ' . $modelo['pisos'] . '</p>';
        echo '<div>';
        echo '<h3>Poltronas do Ônibus</h3>';

        function createSeatMap($start, $end, $numSeatsPerRow, $modeloId, $piso, $ocupadas) {
            echo '<div class="bus-row">';
            for ($i = $start; $i <= $end; $i++) {
                if (($i - $start) % $numSeatsPerRow == 0 && $i != $start) {
                    echo '</div><div class="bus-row">';
                }
                $cor = (isset($ocupadas[$piso]) && in_array($i, $ocupadas[$piso])) ? 'red' : 'green';
                echo '<div class="seat" style="background-color:' . $cor . ';" data-poltrona="' . $i . '" data-piso="' . $piso . '" data-modelo="' . $modeloId . '">' . $i . '</div>';
                if (($i - $start + 1) % ($numSeatsPerRow / 2) == 0) {
                    echo '<div class="aisle"></div>';
                }
            }
            echo '</div>';
        }

        if ($modelo['pisos'] == 1) {
            echo '<h4>Piso 1</h4>';
            createSeatMap($modelo['num_inicio_piso1'], $modelo['num_final_piso1'], 4, $modeloId, 1, $ocupadas);
        } else {
            echo '<h4>Piso 1</h4>';
            createSeatMap($modelo['num_inicio_piso1'], $modelo['num_final_piso1'], 4, $modeloId, 1, $ocupadas);
            echo '<h4>Piso 2</h4>';
            createSeatMap($modelo['num_inicio_piso2'], $modelo['num_final_piso2'], 4, $modeloId, 2, $ocupadas);
        }
        echo '</div>';
        echo ob_get_clean();
        exit();
    }

    // Salva a poltrona selecionada
    if (isset($_POST['poltrona'])) {
        $poltrona = $_POST['poltrona'];
        $piso = $_POST['piso'];
        $modeloId = $_POST['modeloId'];
        $pacoteId = $_POST['pacoteId'];
        $clienteId = $_POST['clienteId'];

        // Verifica se a poltrona já está ocupada
        $stmt = $conn->prepare("SELECT * FROM poltronas WHERE modelo_id = :modeloId AND numero_poltrona = :poltrona AND piso = :piso AND ocupada = 1");
        $stmt->bindParam(':modeloId', $modeloId);
        $stmt->bindParam(':poltrona', $poltrona);
        $stmt->bindParam(':piso', $piso);
        $stmt->execute();
        $poltronaOcupada = $stmt->fetch(PDO::FETCH_ASSOC);

        if ($poltronaOcupada) {
            echo 'Poltrona já ocupada!';
        } else {
            // Insere a poltrona no banco de dados
            $stmt = $conn->prepare("INSERT INTO poltronas (pacote_id, cliente_id, modelo_id, numero_poltrona, piso, ocupada) VALUES (:pacoteId, :clienteId, :modeloId, :poltrona, :piso, 1)");
            $stmt->bindParam(':pacoteId', $pacoteId);
            $stmt->bindParam(':clienteId', $clienteId);
            $stmt->bindParam(':modeloId', $modeloId);
            $stmt->bindParam(':poltrona', $poltrona);
            $stmt->bindParam(':piso', $piso);
            if ($stmt->execute()) {
                echo 'Poltrona reservada com sucesso!';
            } else {
                echo 'Erro ao reservar poltrona!';
            }
        }
        exit();
    }
}
?>
<!DOCTYPE html>
<html lang="pt-br">
<head>
    <meta charset="UTF-8">
    <title>Reserva de Poltronas</title>
    <link href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" rel="stylesheet">
    <script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
    <style>
        .bus-row {
            display: flex;
            margin-bottom: 10px;
        }
        .seat {
            width: 50px;
            height: 50px;
            margin: 5px;
            display: flex;
            align-items: center;
            justify-content: center;
            border-radius: 5px;
            cursor: pointer;
        }
        .aisle {
            width: 30px;
        }
    </style>
    <script>
        $(document).ready(function() {
            // Carrega os nomes quando um pacote é selecionado
            $('#pacote').change(function() {
                var pacoteId = $(this).val();
                $.ajax({
                    url: 'mapa_poltronas.php',
                    type: 'POST',
                    data: {pacoteId: pacoteId},
                    success: function(response) {
                        var nomes = JSON.parse(response);
                        var options = '<option value="">Selecione um nome</option>';
                        nomes.forEach(function(nome) {
                            options += '<option value="' + nome.id + '">' + nome.nome + '</option>';
                        });
                        $('#nomes').html(options);
                    },
                    error: function(xhr, status, error) {
                        console.log("Erro na requisição AJAX: " + error);
                    }
                });
            });

            // Carrega o mapa de poltronas quando um modelo é selecionado
            $('#modelo').change(function() {
                var modeloId = $(this).val();
                $.ajax({
                    url: 'mapa_poltronas.php',
                    type: 'POST',
                    data: {modeloId: modeloId},
                    success: function(response) {
                        $('#poltronas').html(response);
                    },
                    error: function(xhr, status, error) {
                        console.log("Erro na requisição AJAX: " + error);
                    }
                });
            });

            // Seleciona uma poltrona
            $(document).on('click', '.seat', function() {
                var poltrona = $(this).data('poltrona');
                var piso = $(this).data('piso');
                var modeloId = $('#modelo').val();
                var pacoteId = $('#pacote').val();
                var clienteId = $('#nomes').val();

                if (!clienteId) {
                    alert('Selecione um cliente antes de reservar a poltrona.');
                    return;
                }

                $.ajax({
                    url: 'mapa_poltronas.php',
                    type: 'POST',
                    data: {
                        poltrona: poltrona,
                        piso: piso,
                        modeloId: modeloId,
                        pacoteId: pacoteId,
                        clienteId: clienteId
                    },
                    success: function(response) {
                        alert(response);
                        // Atualiza o mapa de poltronas após a reserva
                        $('#modelo').trigger('change');
                    },
                    error: function(xhr, status, error) {
                        console.log("Erro na requisição AJAX: " + error);
                    }
                });
            });
        });
    </script>
</head>
<body>
    <div class="container">
        <h2>Reserva de Poltronas</h2>
        <form>
            <div class="form-group">
                <label for="pacote">Pacote</label>
                <select class="form-control" id="pacote" name="pacote">
                    <option value="">Selecione um pacote</option>
                    <?php
                    $stmt = $conn->query("SELECT id, nome_pacote FROM pacotes_viagem");
                    $pacotes = $stmt->fetchAll(PDO::FETCH_ASSOC);
                    foreach ($pacotes as $pacote) {
                        echo '<option value="' . $pacote['id'] . '">' . $pacote['nome_pacote'] . '</option>';
                    }
                    ?>
                </select>
            </div>
            <div class="form-group">
                <label for="nomes">Nomes</label>
                <select class="form-control" id="nomes" name="nomes">
                    <option value="">Selecione um nome</option>
                </select>
            </div>
            <div class="form-group">
                <label for="modelo">Modelo do Ônibus</label>
                <select class="form-control" id="modelo" name="modelo">
                    <option value="">Selecione um modelo</option>
                    <?php
                    $stmt = $conn->query("SELECT id, modelo FROM bus");
                    $modelos = $stmt->fetchAll(PDO::FETCH_ASSOC);
                    foreach ($modelos as $modelo) {
                        echo '<option value="' . $modelo['id'] . '">' . $modelo['modelo'] . '</option>';
                    }
                    ?>
                </select>
            </div>
        </form>
        <div id="poltronas">
            <!-- Informações do modelo selecionado serão exibidas aqui -->
        </div>
    </div>
</body>
</html>

 

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

O seu código envolve muitos detalhes. Para focar no problema da alocação de clientes para os seus assentos, eu simplifiquei tudo, onde só tenho um pacote que vão levar 3 clientes num fusca, assim:
 

mysql
CREATE TABLE cliente (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nome VARCHAR(255) NOT NULL
);

INSERT INTO cliente (nome) values ('Frank'),('João'),('Pedro');

CREATE TABLE poltrona (
    id INT AUTO_INCREMENT PRIMARY KEY,
    poltrona INT NOT NULL,
    pacote VARCHAR(255) NOT NULL,
    id_cliente INT,
    FOREIGN KEY (id_cliente) REFERENCES cliente(id)
);

arquivo index.php
<?php
if(isset($_POST['cliente'])) {
    try {
        $conn = new PDO('mysql:host=localhost;dbname=teste', 'root', '');
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

        if ($_SERVER['REQUEST_METHOD'] == 'POST') {
            $clienteId = $_POST['cliente'];
            $poltronaId = $_POST['poltrona'];

            // Verificar se a poltrona já está reservada
            $stmt = $conn->prepare("SELECT id_cliente FROM poltrona WHERE poltrona = :poltrona");
            $stmt->bindParam(':poltrona', $poltronaId);
            $stmt->execute();
            $result = $stmt->fetch();

            if ($result && $result['id_cliente']) {
                echo "<script>alert('Esta poltrona já está reservada!');</script>";
            } else {
                // Atualizar ou inserir a poltrona com o ID do cliente
                if ($result) {
                    $stmt = $conn->prepare("UPDATE poltrona SET id_cliente = :id_cliente WHERE poltrona = :poltrona");
                } else {
                    $stmt = $conn->prepare("INSERT INTO poltrona (poltrona, id_cliente) VALUES (:poltrona, :id_cliente)");
                }
                $stmt->bindParam(':id_cliente', $clienteId);
                $stmt->bindParam(':poltrona', $poltronaId);
                $stmt->execute();
            }
        }
    } catch (PDOException $e) {
        echo "Erro: " . $e->getMessage();
    }
}
?>
<!DOCTYPE html>
<html lang="pt-BR">
<head>
    <meta charset="UTF-8">
    <title>Reservar Poltrona</title>
</head>
<body style="width:500px;margin:0 auto;margin-top:50px;">
    <h1>Reservar Poltrona</h1>
    <form method="post">
        <label for="cliente">Cliente:</label>
        <select name="cliente" id="cliente" required>
            <option value=''>Selecione um cliente</option>
            <?php
            // Conectar ao banco de dados e buscar os clientes não reservados
            $conn = new PDO('mysql:host=localhost;dbname=teste', 'root', '');
            $stmt = $conn->query("SELECT id, nome FROM cliente WHERE id NOT IN (SELECT id_cliente FROM poltrona WHERE id_cliente IS NOT NULL)");
            while ($row = $stmt->fetch()) {
                echo "<option value='{$row['id']}'>{$row['nome']}</option>";
            }
            ?>
        </select><br><br>
        
        <label for="poltrona">Poltrona:</label>
        <select name="poltrona" id="poltrona" required>
            <option value=''>Selecione uma poltrona</option>
            <?php
            // Buscar poltronas disponíveis
            $stmt = $conn->query("SELECT * FROM poltrona WHERE id_cliente IS NULL");
            $poltronasDisponiveis = $stmt->fetchAll();
            // mostrar poltronas disponíveis
            if (empty($poltronasDisponiveis)) {
                for ($i = 1; $i <= 3; $i++) {
                    $ocupado=$conn->query("SELECT * FROM poltrona WHERE poltrona=$i")->fetchAll();
                    if(count($ocupado)==0) {
                        echo "<option value='$i'>Poltrona $i</option>";
                    }
                }
            }
            ?>
        </select><br><br>
        
        <input type="submit" value="Reservar">
    </form>
    
    <h2>Reservas Feitas</h2>
    <ul>
        <?php
        // Exibir reservas feitas
        $stmt = $conn->query("SELECT c.nome, p.poltrona FROM poltrona p JOIN cliente c ON p.id_cliente = c.id WHERE p.id_cliente IS NOT NULL");
        while ($row = $stmt->fetch()) {
            echo "<li>Cliente: {$row['nome']}, Poltrona: {$row['poltrona']}</li>";
        }
        ?>
    </ul>
</body>
</html>

 

Captura de tela 2025-01-29 214358.png

Editado por Frank K Hosaka
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,1k
×
×
  • Criar Novo...