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>