Olá,
Sou novo aqui no fórum. Estou com uma dúvida e fiz inúmeros testes e ainda não funcionou corretamente.
Estou trabalhando em um sistema de controle de eventos com PHP e MySQL. Tenho no banco de dados duas tabelas, a tabela evento e a tabela ambiente.
Na tabela evento fica cadastrado a data do evento, o horário de início e fim do evento e o id do ambiente onde será o evento.
No sistema tenho um formulário para cadastro de evento. Neste formulário, o usuário deverá informar a data do evento, o horário de início e fim e selecionar o ambiente.
Antes de mostrar o combobox com os ambientes disponíveis, faço uma busca no MySQL com a data informada, o horário de início e fim do evento. Caso algum ambiente já esteja ocupado na mesma data e horário, este ambiente não deve ser exibido no combobox.
Quando tenho somente um ambiente ocupado funciona, o problema está quando tenho mais de um. Já tentei usar do while, for, session para gravar o id do ambiente ocupado, mas nada funcionou.
Segue abaixo o código:
<?php
$data = "31/08/2015";
$horario_inicio = "09:00";
$horario_fim = "11:00";
$sql = mysql_query("SELECT * FROM evento WHERE data='$data' AND (('$horario_inicio' <= horario_inicio AND '$horario_fim' > horario_inicio) OR ('$horario_inicio' < horario_fim AND '$horario_fim' > horario_fim) OR ('$horario_inicio' >= horario_inicio AND '$horario_fim' <= horario_fim) OR ('$horario_inicio' <= horario_inicio AND '$horario_fim' >= horario_fim))");
$cont = mysql_num_rows($sql);
if($cont > 0){
$contador = 0;
while($arr = mysql_fetch_array($sql)){
$contador = $contador + 1;
//gravar idambiente em uma session
$_SESSION['id'.$contador] = $arr['idambiente'];
for($i = 1; $i <= $contador; $i++){
$select = mysql_query("SELECT * FROM ambiente WHERE idambiente <> '".$_SESSION['id'.$i]."' AND idambiente <> '".$_SESSION['id'.$contador]."'");
$arr_select = mysql_fetch_array($select);
echo $arr_select['ambiente'];
}
}
}
?>
Por exemplo, tenho dois eventos no dia 31/08/2015.
O evento 1 começa às 08:30 e acaba às 10:30 - ocorre no ambiente 1. O evento 2 começa às 09:00 e acaba às 11:00 - ocorre no ambiente 2. O correto seria o código retornar todos os ambientes cadastrado exceto o ambiente 1 e 2. O problema é que o código acima retorna o ambiente 2 e o ambiente 1 nesta ordem.
Alguma dica ? O que posso fazer para que o código funcione corretamente ?