Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Gelado

[Resolvido] Verificar se

Recommended Posts

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

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

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

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

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

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

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

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

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

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

"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

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

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

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

 

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

É 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

É 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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.