Gelado 0 Denunciar post Postado Maio 6, 2010 Fala galera! Eu tenho uma agenda aqui, que você na hora do cadastro você tem esses campos: <tr><td>Hora:</td><td> <select name="hora" class="tab-cadastro"> <option>08:00</option> <option>08:30</option> <option>09:00</option> <option>09:30</option> <option>10:00</option> <option>10:30</option> <option>11:00</option> <option>11:30</option> <option>12:00</option> <option>12:30</option> <option>13:00</option> <option>13:30</option> <option>14:00</option> <option>14:30</option> <option>15:00</option> <option>15:30</option> <option>16:00</option> <option>16:30</option> <option>17:00</option> <option>17:30</option> <option>18:00</option> <option>18:30</option> <option>19:00</option> </select> ás <select name="ashora" class="tab-cadastro"> <option>08:00</option> <option>08:00</option> <option>08:30</option> <option>09:00</option> <option>09:30</option> <option>10:00</option> <option>10:30</option> <option>11:00</option> <option>11:30</option> <option>12:00</option> <option>12:30</option> <option>13:00</option> <option>13:30</option> <option>14:00</option> <option>14:30</option> <option>15:00</option> <option>15:30</option> <option>16:00</option> <option>16:30</option> <option>17:00</option> <option>17:30</option> <option>18:00</option> <option>18:30</option> <option>19:00</option> </select></td> </tr> Só que antes de gravar eu quero verificar as horas cadastradas. Ex, eu quero agenda das 8:00 às 10:00, mas se tiver outra coisa agendada das 9:00 às 10:00 le não deixa. Como eu faço isso? Espero que tenha explicado bem. Obrigado Compartilhar este post Link para o post Compartilhar em outros sites
Denis_Uyeda 0 Denunciar post Postado Maio 6, 2010 Bom, pelo o que eu entendi você armazena essas informações em um banco de dados certo? Então pra verificar você irá precisar de uma conexão com o mesmo (sabe fazer conexão com BD?), daí na página que recebe a requisição você terá que fazer um Select, entendeu? :) Compartilhar este post Link para o post Compartilhar em outros sites
Evandro Oliveira 331 Denunciar post Postado Maio 6, 2010 complementando, os campos podem ser criados no formato TIME ou DATETIME e a consulta pode seguir este padrão SELECT count(`id`) FROM `agenda` WHERE `horainicio` ( BETWEEN {$hora_inicial} AND {$hora_final} ) AND `horafim` ( BETWEEN {$hora_inicial} AND {$hora_final} ); Compartilhar este post Link para o post Compartilhar em outros sites
Gelado 0 Denunciar post Postado Maio 6, 2010 Bom, pelo o que eu entendi você armazena essas informações em um banco de dados certo? Então pra verificar você irá precisar de uma conexão com o mesmo (sabe fazer conexão com BD?), daí na página que recebe a requisição você terá que fazer um Select, entendeu? :) Eu ja fiz a conexao, e até verifico se estão cadastrando na mesma hora. Mas, e as horas entre 8:00 e 10:00? Como não deixar cadastrar? Olha o codigo que eu tenho. $sql_sala_check = mysql_query("SELECT * FROM calendario WHERE dtevento='$dtevento' and hora='$hora' and ashora='$ashora' and local='$local' and status='Ativo'"); $eReg = mysql_fetch_array($sql_sala_check); $sql_sala_check = $eReg[0]; if ($sql_sala_check> 0){ $msg = "<font color='#CC0000' size='2'><strong>Esta sala já está ocupada neste dia e horário</strong></font>"; unset($dtevento);} Compartilhar este post Link para o post Compartilhar em outros sites
Denis_Uyeda 0 Denunciar post Postado Maio 6, 2010 Então, se os seus campos forem do tipo hora no banco, você pode usar o método passado pelo Evandro, o BETWEEN pega entre um valor e outro. No caso ficaria assim //Concatena com os segundos $hora .= ':00'; $ashora .= ':00'; $sql_sala_check = mysql_query("SELECT * FROM calendario` WHERE dtevento='$dtevento' AND hora ( BETWEEN '$hora' AND '$ashora' ) AND ashora ( BETWEEN '$hora' AND '$ashora') AND local='$local' and status='Ativo'"); //Utilize msyql_num_rows para pegar o número de linhas retornadas $registros = mysql_num_rows($sql_sala_check); if ($registros > 1){ echo "Horário ocupado"; } else{ //--------- } Compartilhar este post Link para o post Compartilhar em outros sites
Gelado 0 Denunciar post Postado Maio 7, 2010 Não funcionou, ele está falando que a sala está indiponível em todos os horários, fiz alguma coisa errada? Na tabela a "hora" e "ashora" estão como (TIME) e olhe o código: $dtevento = $_POST['dia']."-".$mes."-".$_POST['ano']; $hora = $_POST['hora']; $hora .= ':00'; $ashora = $_POST['ashora']; $ashora .= ':00'; $local = $_POST['local']; $sql_sala_check = mysql_query("SELECT * FROM calendario` WHERE dtevento='$dtevento' AND hora ( BETWEEN '$hora' AND '$ashora' ) AND ashora ( BETWEEN '$hora' AND '$ashora') AND local='$local' and status='Ativo'"); $eReg = mysql_fetch_array($sql_sala_check); $sql_sala_check = $eReg[0]; if ($sql_sala_check > 0){ $msg = "<font color='#CC0000' size='2'><strong>Esta sala já está ocupada neste dia e horário</strong></font>"; unset($dtevento);} Compartilhar este post Link para o post Compartilhar em outros sites
Evandro Oliveira 331 Denunciar post Postado Maio 7, 2010 utilize a consulta que te sugeri Compartilhar este post Link para o post Compartilhar em outros sites
Gelado 0 Denunciar post Postado Maio 7, 2010 Eu fiz, mas o problema é o mesmo. $dtevento = $_POST['dia']."-".$mes."-".$_POST['ano']; $hora = $_POST['hora']; $hora .= ':00'; $ashora = $_POST['ashora']; $ashora .= ':00'; $local = $_POST['local']; $sql_sala_check = mysql_query("SELECT * FROM calendario` WHERE dtevento='$dtevento' AND hora ( BETWEEN '$hora' AND '$ashora' ) AND ashora ( BETWEEN '$hora' AND '$ashora') AND local='$local' and status='Ativo'"); //Utilize msyql_num_rows para pegar o número de linhas retornadas $registros = mysql_num_rows($sql_sala_check); if ($registros > 1){ $msg = "<font color='#CC0000' size='2'><strong>Esta sala já está ocupada neste dia e horário</strong></font>";} else {$verificaOK = "verificaOK";} } Compartilhar este post Link para o post Compartilhar em outros sites
Gelado 0 Denunciar post Postado Maio 7, 2010 Segue a tabela: Compartilhar este post Link para o post Compartilhar em outros sites
Evandro Oliveira 331 Denunciar post Postado Maio 7, 2010 eu tinha pedido que fizesse um SELECT COUNT(`id`) Primeiro, não use *, perderá performance. Segundo, uma modificação na query que te passei: SELECT count(`id`) FROM `agenda` WHERE `horainicio` ( BETWEEN {$hora_inicial} AND {$hora_final} ) AND `horafim` ( BETWEEN {$hora_inicial} AND {$hora_final} ) GROUP BY `id`; um echo mysql_result($recordset, 0); deverá exibir o número de registros encontrados... faça a comparação assim: if(mysql_result($recordset, 0)) { //ações de negação } Compartilhar este post Link para o post Compartilhar em outros sites
Gelado 0 Denunciar post Postado Maio 7, 2010 agora o erro é esse: Warning: mysql_result(): supplied argument is not a valid MySQL result resource in /home/agendar/public_html/fase-teste/agendar_sala.php on line 43 a linha 42 é essa: echo mysql_result($sql_sala_check, 0); Não consegui encontrar onde estou errando... $sql_sala_check = mysql_query("SELECT count(id) FROM calendario WHERE dtevento='$dtevento' AND hora ( BETWEEN {$hora} AND {$ashora} ) AND ashora ( BETWEEN {$hora} AND {$ashora} ) AND local='$local' and status='Ativo' GROUP BY id"); echo mysql_result($sql_sala_check, 0); if(mysql_result($sql_sala_check, 0)) { $msg = "<font color='#CC0000' size='2'><strong>Esta sala já está ocupada neste dia e horário</strong></font>";} else {$verificaOK = "verificaOK";} } Compartilhar este post Link para o post Compartilhar em outros sites
Evandro Oliveira 331 Denunciar post Postado Maio 7, 2010 antes $sql_sala_check = mysql_query("SELECT count(id) FROM calendario WHERE dtevento='$dtevento' AND hora ( BETWEEN {$hora} AND {$ashora} ) AND ashora ( BETWEEN {$hora} AND {$ashora} ) AND local='$local' and status='Ativo' GROUP BY id"); depois $sql_sala_check = mysql_query("SELECT count(id) FROM calendario WHERE dtevento='$dtevento' AND hora ( BETWEEN {$hora} AND {$ashora} ) AND ashora ( BETWEEN {$hora} AND {$ashora} ) AND local='$local' and status='Ativo' GROUP BY id") or die(mysql_error()); poste a mensagem. Compartilhar este post Link para o post Compartilhar em outros sites
Gelado 0 Denunciar post Postado Maio 7, 2010 "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'BETWEEN 08:00:00 AND 08:00:00 ) AND ashora ( BETWEEN 08:00:00 AND 08:00:00 ) AND' at line 1" Compartilhar este post Link para o post Compartilhar em outros sites
Denis_Uyeda 0 Denunciar post Postado Maio 7, 2010 Tente fazer desse jeito, colocando aspas na hora e colocando o campo dentro dos parênteses $sql_sala_check = mysql_query("SELECT count(id) FROM calendario WHERE dtevento='$dtevento' AND ((hora BETWEEN '$hora' AND '$ashora' ) OR (ashora BETWEEN '$hora' AND '$ashora' )) AND local='$local' and status='Ativo' GROUP BY id"); Desse modo ele verifica se a hora inicial e a hora final estão entre os valores digitados, e retorna aqueles que atendem à esse critério. Se encontrar um dos dois retorna verdadeiro Ex: Hora inicial 08:00 Hora final 10:00 O que tem na tabela 09:00 e 10:00 Data inicial entre 08:00 e 10:00 - Pega o 09:00 e retorna verdadeiro Entendeu? :/ Compartilhar este post Link para o post Compartilhar em outros sites
Gelado 0 Denunciar post Postado Maio 10, 2010 Tente fazer desse jeito, colocando aspas na hora e colocando o campo dentro dos parênteses $sql_sala_check = mysql_query("SELECT count(id) FROM calendario WHERE dtevento='$dtevento' AND ((hora BETWEEN '$hora' AND '$ashora' ) OR (ashora BETWEEN '$hora' AND '$ashora' )) AND local='$local' and status='Ativo' GROUP BY id"); Desse modo ele verifica se a hora inicial e a hora final estão entre os valores digitados, e retorna aqueles que atendem à esse critério. Se encontrar um dos dois retorna verdadeiro Ex: Hora inicial 08:00 Hora final 10:00 O que tem na tabela 09:00 e 10:00 Data inicial entre 08:00 e 10:00 - Pega o 09:00 e retorna verdadeiro Entendeu? :/ Certo, eu fiz do modo que você disse e funcionou. $dtevento = $_POST['dia']."-".$mes."-".$_POST['ano']; $hora = $_POST['hora']; $hora .= ':00'; $ashora = $_POST['ashora']; $ashora .= ':00'; $local = $_POST['local']; $sql_sala_check = mysql_query("SELECT count(id) FROM calendario WHERE dtevento='$dtevento' AND ((hora BETWEEN '$hora' AND '$ashora' ) OR (ashora BETWEEN '$hora' AND '$ashora' )) AND local='$local' and status='Ativo' GROUP BY id")or die(mysql_error()); if(mysql_result($sql_sala_check, 0)) { $msg = "<font color='#CC0000' size='2'><strong>Esta sala já está ocupada neste dia e horário</strong></font>";} else {$verificaOK = "verificaOK";} }Só tem um problema, quando ele verifica se a sala está vazia, retorna um erro: Unable to jump to row 0 on MySQL result index 7 Qual é o problema? Compartilhar este post Link para o post Compartilhar em outros sites
Evandro Oliveira 331 Denunciar post Postado Maio 10, 2010 Só tem um problema, quando ele verifica se a sala está vazia, retorna um erro: Unable to jump to row 0 on MySQL result index 7 Qual é o problema? troque if(mysql_result($sql_sala_check, 0)) por if(mysql_num_rows($sql_sala_check)) Compartilhar este post Link para o post Compartilhar em outros sites
Gelado 0 Denunciar post Postado Maio 10, 2010 Só tem um problema, quando ele verifica se a sala está vazia, retorna um erro: Unable to jump to row 0 on MySQL result index 7 Qual é o problema? troque if(mysql_result($sql_sala_check, 0)) por if(mysql_num_rows($sql_sala_check)) I, agora o erro é o segunte: Wrong parameter count for mysql_result() Compartilhar este post Link para o post Compartilhar em outros sites
Denis_Uyeda 0 Denunciar post Postado Maio 10, 2010 É nesse trecho aqui if(mysql_result($sql_sala_check, 0)) { $msg = "<font color='#CC0000' size='2'><strong>Esta sala já está ocupada neste dia e horário</strong></font>";} else {$verificaOK = "verificaOK";} } Coloque $numero_linhas = mysql_num_rows($sql_sala_check); if($numero_linhas > 0) { $msg = "<font color='#CC0000' size='2'><strong>Esta sala já está ocupada neste dia e horário</strong></font>";} else {$verificaOK = "verificaOK";} } Compartilhar este post Link para o post Compartilhar em outros sites
Gelado 0 Denunciar post Postado Maio 10, 2010 É nesse trecho aqui if(mysql_result($sql_sala_check, 0)) { $msg = "<font color='#CC0000' size='2'><strong>Esta sala já está ocupada neste dia e horário</strong></font>";} else {$verificaOK = "verificaOK";} } Coloque $numero_linhas = mysql_num_rows($sql_sala_check); if($numero_linhas > 0) { $msg = "<font color='#CC0000' size='2'><strong>Esta sala já está ocupada neste dia e horário</strong></font>";} else {$verificaOK = "verificaOK";} } PERFEITO CARA! Muito obrigado, e a todos que me ajudaram também. http://forum.imasters.com.br/public/style_emoticons/default/joia.gif Compartilhar este post Link para o post Compartilhar em outros sites
Denis_Uyeda 0 Denunciar post Postado Maio 10, 2010 De nada :) Compartilhar este post Link para o post Compartilhar em outros sites