RachadoPT 140 Posted July 2, 2016 Boas, estou com dois problema na minha pap e gostava que me ajudassem, se puderem e conseguirem. É o seguinte, estou a tentar fazer a reserva de um quarto de hotel, e como é obvio, não basta um simples insert dos dados do formulario na base de dados, tem que haver confirmações de se o quarto já está reservado na data que a pessoa tenta reservar, etc... O atual código que eu tenho é o seguinte: <?php include('session.php'); $_SESSION['action'] = 'inserir'; if(isset($_POST['submit'])) { include_once '../assets/inc/psl-config.php'; $connection = new mysqli($db_host, $db_user, $db_pass, $db_database); if (mysqli_connect_errno()) { echo "Failed to connect to MySQL: " . mysqli_connect_error(); } else { $db = mysqli_select_db($connection, "pap"); $cliente = mysqli_real_escape_string($connection, $_POST['cliente']); $quarto = mysqli_real_escape_string($connection, $_POST['quarto']); $data_i = date('Y-m-d', strtotime($_POST['data_inicio'])); $data_i = mysqli_real_escape_string($connection, $data_i); $data_f = date('Y-m-d', strtotime($_POST['data_fim'])); $data_f = mysqli_real_escape_string($connection, $data_f); $refeicoes = mysqli_real_escape_string($connection, $_POST['refeicoes']); $sql = "select * from reservas"; $result = mysqli_query($connection, $sql); while($row = mysqli_fetch_array($result, MYSQLI_ASSOC)){ if($quarto == $row['quarto']){ if(($data_i >= $row['data_inicio']) && ($data_i) <= $row['data_fim']) { $pode_reservar = 1; } else { $pode_reservar = 0; } } else { $pode_reservar = 0; } if($pode_reservar == 0){ if(mysqli_query($connection, "INSERT INTO reservas(cliente, quarto, data_inicio, data_fim, refeicoes) VALUES('$cliente','$quarto','$data_i','$data_f', '$refeicoes')")) { $sql = "SELECT * FROM quartos WHERE quarto='$quarto'"; $query = mysqli_query($connection, $sql); while($row1 = mysqli_fetch_array($query, MYSQLI_ASSOC)){ $reservas = $row1['reservas'] + 1; $sql = "UPDATE quartos SET reservas='$reservas' WHERE quarto='$quarto'"; if($result = mysqli_query($connection, $sql)){ ?> <script>alert('Inserido com sucesso!');</script> <?php } else { ?> <script>alert('Falha ao inserir...');</script> <?php } } } elseif($pode_reservar == 1){ ?> <script>alert('Esse quarto já está reservado para esses dias.');</script> <?php } } } } } ?> O problema está nesta parte: while($row = mysqli_fetch_array($result, MYSQLI_ASSOC)){ if($quarto == $row['quarto']){ if(($data_i >= $row['data_inicio']) && ($data_i) <= $row['data_fim']) { $pode_reservar = 1; } else { $pode_reservar = 0; } } else { $pode_reservar = 0; } Ou seja, na confirmação do quarto para saber se pode ser reservado nessa data ou não, e os problemas são os seguintes: Primeiro, no while dá-me o seguinte aviso: Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in "diretorio" on line 25 Eu sei o que significa este aviso mas o problema é que mesmo dando este aviso, o código que se encontra dentro do while é todo executado na mesma, insere a reserva na tabela das reservas e aumenta uma reserva na tabela dos quartos. Segundo, a confirmação da reserva dos quartos não está funcional, ou seja, consigo ter duas reservas do mesmo quarto para os mesmos dias ou para um dia em que o quarto ja esteja reservado para outro cliente... Não estou a ver outra maneira de fazer essa funcionalidade tirando como eu tenho e como eu tenho não funciona >> Agradeço desde já a todos a vossa ajuda, ou tentativa de ajudar. Cumprimentos, RachadoPT EDIT: O primeiro problema está resolvido... incrivel como em 4 horas de procura e com ajuda de dois professores não fui capaz de perceber que o problema estava somente em ter o inserir dentro do while da verificação... bastou-me separar os dois e já removeu o Warning... Mas o problema da confirmação das datas da reserva continua com problema, se puderem ajudar com isso por favor... :3 Share this post Link to post Share on other sites
Cσяvσ⋆ 1,804 Posted July 2, 2016 Para o 1º problema dá echo ao $result e vê o que lá está dentro, esse erro geralmente dá quando temos um valor errado nessa variável. 1 RachadoPT reacted to this Share this post Link to post Share on other sites
xXBoyDarkXx 328 Posted July 5, 2016 muito simples, fazes um select á tabela com essa data e vês se o array estar empty é porque está disponivél $sql = "SELECT * FROM quartos WHERE data_inicio='$data_i'"; $query = mysqli_query($connection, $sql);$row1 = mysqli_fetch_array($query, MYSQLI_ASSOC); if(empty($row1)){ // pode reservar } Share this post Link to post Share on other sites