Ir para conteúdo

POWERED BY:

Arquivado

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

Geraldino Barbosa

Comparar 02 datas

Recommended Posts

Prezados, boa tarde!

Ainda sou um aprendiz em php e estou fazendo um pequeno sistema de agendamento.

Porém estou me deparando com um problema que não consigo finalizar o código.

 

No Mysql, tem uma tabela relatório com a coluna dt_agendamento

na coluna dt_agendamento eu gravo a data do agendamento no formato d/m/Y.

Ocorre que preciso que seja verificado se em um determinado dia atingiu a quantidade máxima de agendamentos.

Por exemplo:

 

a quantidade máxima de agendamento por dia é de 10.

 

Então eu tenho agendado para a data de hoje 10 agendamentos, para a data de amanhã 10 agendamentos.

Gostaria que fosse feito a contagem por dia.

Exemplo verifica se na data de hoje já está com 10 agendamentos se sim, emite mensagem para o usuário informando que não é possível agendar. se não tiver os 10 ele continua agendando até atingir os 10 agendamentos.

 

O problema: Eu consegui fazer o código ler quantos registros tem iguais, o problema é que se tem 02 dias com 10 agendamentos mesmo que eu libere um dia ele fala que já atingiu a quantidade máxima.

 

Preciso que ele faça isso somente para a data atual exemplo:

 

Hoje tenho 10 agendamentos.

amanhã tenho 2 agendamentos

depois de amanhã tenho 5

e depois tenho 10

se eu liberar os 10 agendamentos de hoje ele continua não deixando fazer o agendamento dos outros dias.

Veja uma parte do código:

 

<h1>Agendamento</h1>


<? $nome = $_SESSION['nomeLogin']; ?>


<p><b>Olá, <?php echo $_SESSION['nomeNome']; ?>!</b> - Seja bem vindo!</p>
<div class="alert alert-info alert-dismissible" role="alert">
  <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button>
    <p>Após este horário, só para o dia seguinte, conforme as regras estabelecidas para os agendamentos.</p>
</div>
<?php
$hora02 = date("H:i:s", mktime(gmdate("H")-3, gmdate("i"), gmdate("s")));
print "Horário de Brasília.: ".$hora02."!";
?>
<hr>
<strong>Equipamentos</strong>
<br><br>
//aqui ele vai na tabela e conta quantos registros iguais, se for = 10 ele não deixa passar
<?php
$consultadtagendamento = mysql_query("SELECT dt_agendamento, COUNT(*) AS total FROM relatorio GROUP BY dt_agendamento HAVING
count(*) = 10 ;");
$dt = mysql_fetch_array($consultadtagendamento);
$quant =  $dt['total'];
//echo $quant;
if ($quant > 4){


?>
<div class="alert-danger">
  <p><b>ATENÇÃO!!!</b> Não é possível realizar o agendamento para a data de hoje. </p>
  <br>
  </br>
</div>


<?php
}else{
?>


<?php 
$consultaAgendadoUsuario = mysql_query("SELECT COUNT(id) AS total FROM equipamentos WHERE liberar='Agendado' AND usuario='$nome'");
$age = mysql_fetch_array($consultaAgendadoUsuario);
$variavel =  $age['total'];


if ($variavel < 4){


$consultaAgendado = mysql_query("SELECT COUNT(id) AS total FROM equipamentos WHERE liberar='Agendado'");
$ag = mysql_fetch_array($consultaAgendado);
$agendado =  $ag['total'];


$consultaTotal = mysql_query("SELECT COUNT(id) AS total FROM equipamentos");
$co = mysql_fetch_array($consultaTotal);
$conTotal =  $co['total'];


$contaTotal = $conTotal - $agendado;




if (abs($contaTotal) == 0) {
?>
<div class="alert alert-info">
  <p>Todos os equipamentos já estão agendados! Não é possível realizar seu agendamento hoje.</p>
</div>


<?php
}else{
?>
<form method="POST" action="cadastro.php">
  <input type="hidden" name="nome" value="<?=$nome;?>">
  <div class="comp_center">
  <table class="table">
  <tr>
    <td>
      <label>Nome:</label>
      <input id="nome_prof" name="nome_prof" type="text" class="input-xlarge" value="<?=$_SESSION['nomeNome'];?>">
    </td>
    <td>
      <label>Data Agendamento:</label>
      <input id="dt_agendamento" name="dt_agendamento" type="text" class="input-xlarge" required>
<script>
jQuery(function($){
$("#dt_agendamento").mask("99/99/9999");
});
</script>
    </td>
    <td>
      <label>Equipamentos:</label>
      <select id="equipamento" name="equipamento" class="input-xlarge">
        <option value="">Escolha um equipamento</option>
        <?
        $consulta = mysql_query("SELECT * FROM equipamentos WHERE liberar='Liberado'");
        while($rs = mysql_fetch_array($consulta))
        {
        ?>
        <option value="<?=$rs['id']?>"><?=$rs['tipo']?> / <?=$rs['descricao'];?> / <?=$rs['patrimonio'];?></option>
        <?
        }
        ?>
      </select>
    </td>
  </tr>

ele está fazendo tudo certinho só preciso que pegue a data de hoje e verifique na tabela se na data de hoje tem 10 agendamentos.

Alguém poderia me ajudar? já tentei de todo jeito e não consegui fazer.

Muito obrigado a todos que puderem me ajudar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

amigo.. não li todo esse seu código, mas se entedi bem; tente essa lógica:

vamos ver quantos agendamentos existem hoje:

sql1="select count(dia_agendamento) 'agendamentos_hoje' from
tabela_agendamentos where dia_agendamento=curdate()";

if ('agendamentos_hoje' >= 10{
echo "não é possivel efetuar um agendamento para hoje");
}

else
{
sql2="insert into tabela_agendamentos(colunas), values())";
echo "agendamento efetuado com sucesso";
}

obs:
1:

eu gravo a data do agendamento no formato d/m/Y

ai não rola mesmo.. recomendo q use os formatos corretos de data do Mysql.
2: funções mysql* estão obsoletas; pesquise sobre PDO.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Prezado Fernando C

Agradeço muito por sua ajuda, consegui implementar a dica fornecida por você e funcionou muito bem do jeito que estou precisando. só tenho um outro problema, neste código ele verifica a quantidade para a data de hoje. Só que preciso que seja verificado a data de hoje e de amanhã. mas não estou conseguindo fazer ele verificar a data seguinte também.

 

Veja como fiz o código:

 

<strong></strong>
<br><br>
<?php
//$sql = mysql_query("SELECT COUNT(dt_agendamento) 'agendamentos_hoje' FROM relatorio WHERE dt_agendamento = curdate()");
$consultadtagendamento = mysql_query("SELECT COUNT(dt_agendamento) 'agendamentos_hoje' FROM relatorio WHERE dt_agendamento = curdate();");
$dt = mysql_fetch_array($consultadtagendamento);
$quant = $dt['agendamentos_hoje'];
if ($quant >= 4){
?>
<div class="alert-danger">
<p><b>ATENÇÃO!!!</b> Não é possível realizar o agendamento.</p>
<br>
</br>
</div>
<?php
}else{
?>
<?php
$consultaAgendadoUsuario = mysql_query("SELECT COUNT(id) AS total FROM equipamentos WHERE liberar='Agendado' AND usuario='$nome'");
$age = mysql_fetch_array($consultaAgendadoUsuario);
$variavel = $age['total'];
if ($variavel <= 1){
$consultaAgendado = mysql_query("SELECT COUNT(id) AS total FROM equipamentos WHERE liberar='Agendado'");
$ag = mysql_fetch_array($consultaAgendado);
$agendado = $ag['total'];
$consultaTotal = mysql_query("SELECT COUNT(id) AS total FROM equipamentos");
$co = mysql_fetch_array($consultaTotal);
$conTotal = $co['total'];
$contaTotal = $conTotal - $agendado;
if (abs($contaTotal) == 0) {
?>
<div class="alert alert-info">
<p>Todos os equipamentos já estão agendados! </p>
</div>
<?php
}else{
?>
<form method="POST" action="cd.php">
<input type="hidden" name="nome" value="<?=$nome;?>">
<div class="comp_center">
<table class="table">
<tr>
<td>
<label>Nome:</label>
<input id="nome_prof" name="nome_prof" type="text" class="input-xlarge" value="<?=$_SESSION['nomeNome'];?>">
</td>
e assim por diante.

Compartilhar este post


Link para o post
Compartilhar em outros sites

A soma de angendamentos de hoje e amanhã não pode ultrapassar 10? Ou agendamentos de hoje nao podem passar 10 e de amanhã também nao?

 

Se for a primeira, é só contemplar a data de hoje+1 dia na consulta, talvez usando between (hoje e amanhã).

Se for a segunda, é só fazer duas consultas. Uma para hoje e outra para amanhã.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso, mesmo! A soma dos agendamentos de hoje não podem passar de 10 e os de amanhã também não.

Consegui fazer ele contar o agendamento de amanhã também, mas por exemplo.

Se na data de hoje atinge os 10 ele emite a mensagem: "Não é possível agendar para hoje" Ok! Até aí certinho. Já na data de amanhã se tiver os 10 ele também emite a mensagem" "não é possível agendar para amanhã".

O problema disso agora:

 

Se hoje tem menos de 10 e amanhã tem 10 ele trava no de amanhã e não deixa agendar para hoje. Só falta resolver isso.

 

O que ele tem que fazer:

ele conta quantos tem na data de hoje, se tem menos de 10 ele agenda se tem 10 ele não agenda emitindo a mensagem: "Não é possível agendar para hoje". Isso está certo.

Agora quando ele vai contar o dia seguinte, se tiver 10 agendamentos para amanhã e 5 para hoje ele não deixa agendar os de hoje. Só falta isso para resolver, se alguém puder me ajudar agradeço muito.

Veja como está o código agora:

 

<strong>Agendamento</strong>
<br><br>
<?php
$consultadtagendamento = mysql_query("SELECT COUNT(dt_agendamento) 'agendamentos_hoje' FROM relatorio WHERE dt_agendamento = curdate();");
$dt = mysql_fetch_array($consultadtagendamento);
$quant = $dt['agendamentos_hoje'];
//echo $quant;
if ($quant >= 4){
?>
<div class="alert-danger">
<p><b>ATENÇÃO!!!</b> Não é possível realizar o agendamento para a data de hoje. Todos os equipamentos já estão agendados.</p>
<p>Por favor retorne a partir das 18:00hs para realizar seu agendamento para o dia seguinte.</p>
<br>
</br>
</div>
<?php
}else{
?>
<?php
$consultadtagendamento2 = mysql_query("SELECT COUNT(dt_agendamento) 'agendamentos_amanha' FROM relatorio WHERE dt_agendamento = DATE_ADD(curdate(), INTERVAL 1 DAY);");
$dt1 = mysql_fetch_array($consultadtagendamento2);
$quant1 = $dt1['agendamentos_amanha'];
if ($quant1 >= 4){
?>
<div class="alert-danger">
<p><b>ATENÇÃO!!!</b> Não é possível realizar o agendamento para a data de amanhã. Todos os equipamentos já estão agendados.</p>
<p>Por favor retorne amanhã a partir das 18:00hs para realizar seu agendamento para o dia seguinte.</p>
<br>
</br>
</div>
<?php
}else{
?>
<?php
$consultaAgendadoUsuario = mysql_query("SELECT COUNT(id) AS total FROM equipamentos WHERE liberar='Agendado' AND usuario='$nome'");
$age = mysql_fetch_array($consultaAgendadoUsuario);
$variavel = $age['total'];
if ($variavel <= 1){
$consultaAgendado = mysql_query("SELECT COUNT(id) AS total FROM equipamentos WHERE liberar='Agendado'");
$ag = mysql_fetch_array($consultaAgendado);
$agendado = $ag['total'];
$consultaTotal = mysql_query("SELECT COUNT(id) AS total FROM equipamentos");
$co = mysql_fetch_array($consultaTotal);
$conTotal = $co['total'];
$contaTotal = $conTotal - $agendado;
if (abs($contaTotal) == 0) {
?>
<div class="alert alert-info">
<p>Todos os equipamentos já estão agendados! Não é possível realizar seu agendamento hoje.</p>
</div>
<?php
}else{
?>
<form method="POST" action="cadastro.php">
<input type="hidden" name="nome" value="<?=$nome;?>">
<div class="comp_center">
<table class="table">
<tr>
<td>
<label>Nome:</label>
<input id="nome_prof" name="nome_prof" type="text" class="input-xlarge" value="<?=$_SESSION['nomeNome'];?>">
</td>
<td>
<label>Data Agendamento:</label>
<input id="dt_agendamento1" name="dt_agendamento1" type="text" class="input-xlarge" required>
<input id="dt_agendamento" name="dt_agendamento" type="hidden" class="input-xlarge" required>
</td>
<td>
<label>Equipamentos:</label>
e por ai segue o formulário

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, posta seu código na tag de código. Assim fica muito ruim de ler, sério.

 

É só fazer uma verificação básica if/else.

<?php

	// * Verifica quantos agendamentos tem hoje
	$sqlConsultasDia = "SELECT COUNT(dt_agendamento) 'agendamentos_hoje' FROM relatorio WHERE dt_agendamento = curdate();";
	$resultadoConsultasDia = mysql_fetch_array($sqlConsultasDia);

	if(!empty($resultadoConsultasDia)){
		$countDia =  $resultadoConsultasDia['agendamentos_hoje'];
	}
	else{
		$countDia = 0;	
	}
	
	// * Verifica quantos agendamentos tem amanhã
	$sqlConsultasDiaSeguinte = "SELECT COUNT(dt_agendamento) 'agendamentos_amanha' FROM relatorio WHERE dt_agendamento = DATE_ADD(curdate(), INTERVAL 1 DAY);";
	$resultadoConsultasDiaSeguinte = mysql_fetch_array($sqlConsultasDiaSeguinte);
	
	if(!empty($resultadoConsultasDiaSeguinte)){
		$countDiaSeguinte =  $resultadoConsultasDiaSeguinte['agendamentos_amanha'];
	}
	else{
		$countDiaSeguinte = 0;	
	}
	
	// * Faz as ações de acordo com o $countDia 
	if($countDia >= 10){
		// * Não é possível agendar hoje
	}
	else{
		// * Liberado agendamento hoje	
	}
	
	// * Faz as ações de acordo com o $countDiaSeguinte
	if($countDiaSeguinte >= 10){
		// * Não é possível agendar amanhã
	}
	else{
		// * Liberado agendamento amanhã	
	}

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema está justamente nos IFs

// * Faz as ações de acordo com o $countDia 
	if($countDia >= 10){
		// * Não é possível agendar hoje
	}
	else{
		// * Liberado agendamento hoje	
	}
	
	// * Faz as ações de acordo com o $countDiaSeguinte
	if($countDiaSeguinte >= 10){
		// * Não é possível agendar amanhã
	}
	else{
		// * Liberado agendamento amanhã	
	}

Os IFS até estão certos, o problema é que se na data de hoje se deu 10

o if trava o formulário.

Ok Correto.

o Else para a próxima verificação que é saber se no dia de amanhã tem menos ou mais de 10

se tiver menos de 10 ele libera o formulario, se tiver menos de 10 ele libera o formulário.

O Problema é que se no dia de hoje tiver menos de 10 e no dia de amanhã tiver 0s 10 ele trava o formulário também.

O que eu não estou conseguindo fazer é que se hoje deu menos de 05 e amanhã deu os 10 que ele libere o formulário para cadastrar para hoje que 5 vagas ainda.

Isso é que não estou conseguindo fazer.

Vou postar o código na integra:

<strong>Agendamento de Equipamentos</strong>
<br><br>

<?php
$consultadtagendamento = mysql_query("SELECT COUNT(dt_agendamento) 'agendamentos_hoje' FROM relatorio WHERE dt_agendamento = curdate();");
$dt = mysql_fetch_array($consultadtagendamento);
$quant =  $dt['agendamentos_hoje'];
$consultadtagendamento2 = mysql_query("SELECT COUNT(dt_agendamento) 'agendamentos_amanha' FROM relatorio WHERE dt_agendamento = DATE_ADD(curdate(), INTERVAL 1 DAY);");
$dt1 = mysql_fetch_array($consultadtagendamento2);
$quant1 =  $dt1['agendamentos_amanha'];

if (($quant >= 4) || ($quant1 >= 5)){

	?>
<div class="alert-danger">
  <p><b>ATENÇÃO!!!</b> Não é possível realizar o agendamento para a data de hoje. Todos os equipamentos já estão agendados.</p>
  <p>Por favor retorne a partir das 18:00hs para realizar seu agendamento para o dia seguinte.</p>
  <br>
  </br>
</div>

<?php
	
}else{
	
?>

<?php	
$consultaAgendadoUsuario = mysql_query("SELECT COUNT(id) AS total FROM equipamentos WHERE liberar='Agendado' AND usuario='$nome'");
$age = mysql_fetch_array($consultaAgendadoUsuario);
$variavel =  $age['total'];

if ($variavel <= 1){

$consultaAgendado = mysql_query("SELECT COUNT(id) AS total FROM equipamentos WHERE liberar='Agendado'");
$ag = mysql_fetch_array($consultaAgendado);
$agendado =  $ag['total'];

$consultaTotal = mysql_query("SELECT COUNT(id) AS total FROM equipamentos");
$co = mysql_fetch_array($consultaTotal);
$conTotal =  $co['total'];

$contaTotal = $conTotal - $agendado;


if (abs($contaTotal) == 0) {
?>
<div class="alert alert-info">
  <p>Todos os equipamentos já estão agendados! Não é possível realizar seu agendamento hoje.</p>
</div>

<?php
}else{
?>
<form method="POST" action="cd.php">
  <input type="hidden" name="nome" value="<?=$nome;?>">
  <div class="comp_center">
  <table class="table">
  <tr>
    <td>
      <label>Nome:</label>
      <input id="nome_prof" name="nome_prof" type="text" class="input-xlarge" value="<?=$_SESSION['nomeNome'];?>">
    </td>
    <td>
      <label>Data Agendamento:</label>
      <input id="dt_agendamento1" name="dt_agendamento1" type="text" class="input-xlarge" required>
      <input id="dt_agendamento" name="dt_agendamento" type="hidden" class="input-xlarge" required>
    </td>
    <td>
      <label>Equipamentos:</label>
      <select id="equipamento" name="equipamento" class="input-xlarge">
        <option value="">Escolha um equipamento</option>
        <?
        $consulta = mysql_query("SELECT * FROM equipamentos WHERE liberar='Liberado'");
        while($rs = mysql_fetch_array($consulta))
        {
        ?>
        <option value="<?=$rs['id']?>"><?=$rs['tipo']?> / <?=$rs['descricao'];?> / <?=$rs['patrimonio'];?></option>
        <?
        }
        ?>
      </select>
    </td>
  </tr>
  
  <tr>
  <td>
    <label>Horário 1:</label>
      <select id="horario" name="horario" class="input-xlarge">
        <option value="">Escolha um horário</option>
        <option value="1º Horário">1º Horário</option>
        <option value="2º Horário">2º Horário</option>
    </select>
  </td>
  <td>
    <label>Curso / Periodo 1:</label>
      <select id="curso_periodo" name="curso_periodo" class="input-xlarge">
        <option value="">Escolha um Curso</option>
        <option value="Admin">Administração</option>
        
        </select>
  </td>
  <td>
    <label>Bloco / Sala 1:</label>
      <select id="bloco_sala" name="bloco_sala" class="input-xlarge">
        <option value="">Escolha uma Sala</option>
        <option value="Sala 04">Sala 04 </option>
        
      </select>
  </td>
  </tr>
  <tr>
  <td>
    <label>Horário 2:</label>
      <select id="horario1" name="horario1" class="input-xlarge">
        <option value="">Escolha um horário</option>
        <option value="1º Horário">1º Horário </option>
        <option value="2º Horário">2º Horário</option>
     </select>
  </td>
  <td>
    <label>Curso / Periodo 2:</label>
      <select id="curso_periodo1" name="curso_periodo1" class="input-xlarge">
        <option value="">Escolha um Curso / Periodo</option>
        <option value="C. Contábeis ">C. Contábeis</option>
        
      </select>
  </td>
  <td>
    <label>Bloco / Sala 2:</label>
      <select id="bloco_sala1" name="bloco_sala1" class="input-xlarge">
        <option value="">Escolha uma Sala</option>
        <option value="Sala 08 ">Sala 8</option>
        
      </select>
  </td>
  </tr>
  </table>
  </div>
        <hr>
  <table style="width:100%;">
  <tr>
    <td>
      <label>Observações:</label>                 
      <textarea id="obs" name="obs" style="width: 91%;"></textarea>
    </td>
  </tr>
  </table>
  
  <div class="comp_center">
    <input type="submit" value="Agendar" id="cadastrar" name="cadastrar"class="btn btn-primary">
  </div>
  </form>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se em qualquer uma das duas situações tiver uma vaga, ele pode agendar?

 

Se tiver hoje, e não tiver amanhã

Se tiver amanhã e não tiver hoje

Se tiver amanhã e hoje...

 

É só fazer um if só.

if($countDia <= 10){
    // * Agendamento liberado pro dia
}
elseif($countDiaSeguinte <= 10){
    // * Agendamento liberado para o dia seguinte
}
else{
    // * Não liberado
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema está na arquitetura do seu projeto, isso está gerando uma confusão para você e para as pessoas que estão tentando lhe ajudar. vamos partir do princípio, qual a melhor maneira de fazer essa implementação? você precisa abstrair ao máximo o teu problema. No caso, você precisa de um sistema que faça agendamentos, e verifique se o dia escolhido do agendamento possui X agendamentos, certo? então esqueça esse negócio de tantos agendamentos para hoje, amanhã ou depois de amanhã. simplifique a complexidade do problema. basicamente seria assim:

 

 $data = // data escolhida pelo usuario $verifica = // faça a query passando como parametro a data escolhida pelo usuario if ($verifica):   // faz o agendamento else:   // mostra mensagem para o usuario dizendo que o agendamento não pode ser realizado   endif;
 

 

se for seguir essa linha de raciocínio não vejo porque dar errado.

Espero ter ajudado.

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.