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á logadoif(!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 selecionadoif(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 selecionadoif(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 selecionadaif(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><htmllang="pt-br"><head><metacharset="UTF-8"><title>Reserva de Poltronas</title><linkhref="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css"rel="stylesheet"><scriptsrc="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><divclass="container"><h2>Reserva de Poltronas</h2><form><divclass="form-group"><labelfor="pacote">Pacote</label><selectclass="form-control"id="pacote"name="pacote"><optionvalue="">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><divclass="form-group"><labelfor="nomes">Nomes</label><selectclass="form-control"id="nomes"name="nomes"><optionvalue="">Selecione um nome</option></select></div><divclass="form-group"><labelfor="modelo">Modelo do Ônibus</label><selectclass="form-control"id="modelo"name="modelo"><optionvalue="">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><divid="poltronas"><!-- Informações do modelo selecionado serão exibidas aqui --></div></div></body></html>
Pergunta
Neto Sales
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...
Link para o comentário
Compartilhar em outros sites
1 resposta a esta questão
Posts Recomendados
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.