Reservas PHP/MYSQL

07/12/2017

0

Bom dia,
Estou fazendo um trabalho para faculdade, nesse trabalho tenho que fazer reservas de poltronas(igual de cinema), porem como estou começando agora com PHP/HTML/MYSQL, ainda não sei como fazer tal reserva.

Como eu fiz: Em uma página, o cliente cadastra todos os dados necessários e no final ele apenas escolheria o box para reserva, como se fosse um check-box, porem não sei como funcionaria essa condição, se teria que usar javascript ou outro método.

Para os botões estou usando: <a href="#" class="button">BOX</a>

Como eu faria para ficar reservado ?
Igor Ferreira

Igor Ferreira

Responder

Post mais votado

07/12/2017

Olá Igor,

Nesse caso, você teria que analisar os requisitos da sua aplicação. Um cliente pode reservar somente uma poltrona ou mais de uma poltrona(para a família dele, por exemplo). Se for somente uma poltrona, você poderia colocar um radiobuttons, pois assim o cliente só poderia escolher uma opção. Já se o cliente poder reservar mais de uma poltrona, teria que ser um checkbox para permitir que ele selecione um ou mais de um.

Você também teria que verificar se uma determinada poltrona já foi reservada para um outro cliente para não gerar conflito, ou seja, um cliente selecionar uma poltrona que já foi reservada para um determinada evento.

Valeu!

Rander Freitas

Rander Freitas
Responder

Mais Posts

07/12/2017

Ismael Sousa

De forma bem grosseira talvez isso te ajude:
tabelas do banco(postgresql):
CREATE TABLE public.poltronas (
	id int4 NOT NULL DEFAULT nextval('poltrona_id_seq'::regclass),
	sala_id int8 NOT NULL,
	"local" varchar NOT NULL,
	CONSTRAINT poltrona_pk PRIMARY KEY (id)
);
CREATE TABLE public.reservas (
	id int4 NOT NULL DEFAULT nextval('reservas_id_seq'::regclass),
	poltrona_id int8 NOT NULL,
	sessao int8 NOT NULL,
	cliente_id int8 NULL,
	CONSTRAINT reservas_poltrona_id_fkey FOREIGN KEY (poltrona_id) REFERENCES public.poltronas(id)
);

arquivo index.php
<?php
spl_autoload_extensions('.php');
spl_autoload_register();

$service = new PoltronaService();
?>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style type="text/css">
        table {
            border-spacing: 10px
        }

        table td {
            border: 1px solid black;
            text-align: center;
            padding: 5px;
        }

        table td.reservado {
            border-color: red;
            background: lightcoral;
        }

        table td.livre {
            border-color: green;
            background: lightgreen;
        }
    </style>
</head>
<body>

<fieldset>
    <legend>Reservar poltrona para a Sessão 1</legend>
    <form action="reservar.php" method="post">
        <table>
            <input type="hidden" name="sessao_id" value="1">
            <input type="hidden" name="cliente_id" value="10">
            <?php foreach ($service->listarPoltronaParaReserva() as $row) { ?>
                <tr>
                    <?php foreach ($row as $col) { ?>
                        <td class="<?php echo $col->reservado ? 'reservado' : 'livre' ?>">
                            <input type="checkbox" name="poltronas[]" value="<?php echo $col->getId() ?>"<?php echo $col->reservado ? ' checked disabled' : '' ?>>
                            <?php echo $col->getLocal() ?>
                        </td>
                    <?php } ?>
                </tr>
            <?php } ?>
        </table>
        <button type="submit">Reservar</button>
    </form>
</fieldset>

</body>
</html>


arquivo Poltrona.php
class Polrona
{
    private $id;
    private $sala_id;
    private $local;

   public function getId()
    {
        return $this->id;
    }

    public function setId($id)
    {
        $this->id = $id;
    }

    public function getSalaId()
    {
        return $this->sala_id;
    }

    public function setSalaId($sala_id) {$this->sala_id = $sala_id;}

    public function getLocal()
    {
        return $this->local;
    }

    public function setLocal($local)
    {
        $this->local = $local;
    }
}

arquivo PoltronaService.php
class PoltronaService
{
    private $connection;

    public function __construct()
    {
        $this->connection = new PDO("pgsql:dbname=postgres;host=localhost", 'postgres', 'me5etuh.WE');
    }

    public function listarPoltronaParaReserva()
    {
        $result = $this->connection->query("SELECT p.*, r.id AS reservado FROM poltronas AS p LEFT JOIN reservas AS r ON p.id = r.poltrona_id ORDER BY p.id");
        $dataset = $result->fetchAll(PDO::FETCH_OBJ);
        if ($dataset) {
            $listaPoltrona = [];
            foreach ($dataset as $tmp) {
                $poltroan = new Polrona();
                $poltroan->setId($tmp->id);
                $poltroan->setSalaId($tmp->sala_id);
                $poltroan->setLocal($tmp->local);
                $poltroan->reservado = $tmp->reservado;

                $row = preg_replace('/\\d+$/', '', $tmp->local);
                $listaPoltrona[$row][] = $poltroan;
            }
            return $listaPoltrona;
        }
        return false;
    }

    public function reservarPoltrona($poltronas, $sessao_id, $cliente_id)
    {
        $sql = "INSERT INTO public.reservas (poltrona_id, sessao, cliente_id) VALUES (:poltrona_id, :sessao_id, :cliente_id)";
        try {

            $this->connection->beginTransaction();
            foreach ($poltronas as $poltrona) {
                $stmt = $this->connection->prepare($sql);
                $stmt->execute([':poltrona_id' => $poltrona, ':sessao_id' => $sessao_id, ':cliente_id' => $cliente_id]);
            }
            $this->connection->commit();
        } catch (Exception $ex) {
            $this->connection->rollBack();
            return false;
        }
        return true;
    }
}

arquivo reserva.php
spl_autoload_extensions('.php');
spl_autoload_register();

$servise = new PoltronaService();

$poltronas = $_POST['poltronas'];
$sessao_id = $_POST['sessao_id'];
$cliente_id = $_POST['cliente_id'];

if ($servise->reservarPoltrona($poltronas, $sessao_id, $cliente_id)) {
    header('Location:index.php');
    exit();
} else {
    header('Location:index.php?erro=true');
    exit();
}
Responder

24/11/2018

Johnny Ferreira

De forma bem grosseira talvez isso te ajude:
tabelas do banco(postgresql):
[code=sql]
CREATE TABLE public.poltronas (
id int4 NOT NULL DEFAULT nextval('poltrona_id_seq'::regclass),
sala_id int8 NOT NULL,
"local" varchar NOT NULL,
CONSTRAINT poltrona_pk PRIMARY KEY (id)
);
CREATE TABLE public.reservas (
id int4 NOT NULL DEFAULT nextval('reservas_id_seq'::regclass),
poltrona_id int8 NOT NULL,
sessao int8 NOT NULL,
cliente_id int8 NULL,
CONSTRAINT reservas_poltrona_id_fkey FOREIGN KEY (poltrona_id) REFERENCES public.poltronas(id)
);

poderia mostrar como fica essa parte com Mysql ?
Responder

03/01/2019

Ismael Sousa

CREATE TABLE poltronas (
    id int auto_increment not null,
    sala_id int not null,
    local varchar(255) not null,
    primary key(id)
);
CREATE TABLE reservas (
    id int auto_incremento not null
    poltrona_id int not null,
    sessao int not null,
    cliente_id integer null,
    foreign key (poltrona_id) references poltronas(id)
);
Responder

03/01/2019

Fernando Gaspar

Show de bola!
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar