Ir para conteúdo

POWERED BY:

Arquivado

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

Douglas Fabiano

Consulta Entre Datas

Recommended Posts

Obrigado pela dica, vou fazer isso sim com ID, porem ainda tenho que resolver o que eu tenho... para eu poder incrementar...

 

Será que dá pra solucionar com meu código mesmo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom será que o problema não esta na data? porque com eu informar a data consigo fazer por veiculo numa boa... mas quando eu informo o período não retorna nada....

No meu formula´rio será que tenho que mudar alguma coisa: na parte que tem que informar o período?

 

 <input type="text" name="data_inicial" id="data_1" class="iNome" onFocus="this.style.backgroundColor='#AFE5FF';" onBlur="this.style.backgroundColor='';" />
  - Formato da Data: 99/99/9999 </p>
  <p>Data Final:
    <input type="text" name="data_final" id="data_2" class="iNome" onFocus="this.style.backgroundColor='#AFE5FF';" onBlur="this.style.backgroundColor='';" />
  - Formato da Data: 99/99/9999 </p>
  <p>
    <input type="submit" name="Submit" value="Gerar Relatório" />
  </p>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dá sim para você resolver com o código que você tem. Cuidado quando o usuário trocar a descrição da viatura (vtr_descricao).

 

Primeiro, não precisa desse código:

          else
          $opcoes.='';

E altere esse código:

  if ($_POST['data_inicial']<>'')
      $opcoes.= ($opcoes==''?'':' AND').' data_manutencao>="'.$_POST['data_inicial'].'"';
   if ($_POST['data_final']<>'')
      $opcoes.= ($opcoes==''?'':' AND').' data_manutencao<="'.$_POST['data_final'].'"';

Por este:

  if ($_POST['data_inicial']<>'')
      $opcoes.= ($opcoes==''?'':' AND').' data_manutencao>="'.date('Y-m-d',strtotime($_POST['data_inicial'])).'"';
   if ($_POST['data_final']<>'')
      $opcoes.= ($opcoes==''?'':' AND').' data_manutencao<="'.date('Y-m-d',strtotime($_POST['data_final'])).'"';

Veja se agora funcionará?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Talvez assim a data funcione:

<?php
$opcoes = '';   
if ($_POST['viatura']<>'')      
$opcoes.= ' vtr like "%'.$_POST['viatura'].'%"';          
else          
$opcoes.='';   
if ($_POST['data_final']<>'' || $_POST['data_inicial']<>'')      
$opcoes.= ($opcoes==''?'':' AND').' data_manutencao BETWEEN"'.$_POST['data_inicial'].' AND '.$_POST['data_final'].'"';          
$query = mysql_query("SELECT * FROM tbl_principal".($opcoes==''?'':' WHERE'.$opcoes)." ORDER BY vtr") or die(mysql_error());   
while($array = mysql_fetch_array($query))   
{   
//mostra na tela o nome do carro e tipo de manutenção      
echo '  <tr>',chr(10);   
echo '    <td>'.$array['vtr'].'</td><td>'.date('d/m/Y',strtotime($array['data_manutencao'])).'</td><td>'.$array['tipo_manutencao'].'</td><td>'.$array['vr_unitario_servico'].'</td><td>'.$array['vr_total_pecas'].'</td><td>'.$array['vr_total_manutencao'].'</td>',chr(10);   
echo '  </tr>',chr(10);   }   
?>
De uma pesquisada na documentação do MySql sobre operadores de comparação. Talvez te de alguma noção.

 

Abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caro A.H.P., desse jeito não funcionará para todos os casos, pois no if como está utilizando o || (OU) se a data_final estiver em branco o select não retornará nada. Para usar o between a data_final não pode ser branco.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ops, falta de atenção minha... ^_^

 

<?php$opcoes = '';   if ($_POST['viatura']<>'')      $opcoes.= ' vtr like "%'.$_POST['viatura'].'%"';          else          $opcoes.='';   if ($_POST['data_final']<>'' && $_POST['data_inicial']<>'')      $opcoes.= ($opcoes==''?'':' AND').' data_manutencao BETWEEN"'.$_POST['data_inicial'].' AND '.$_POST['data_final'].'"';          $query = mysql_query("SELECT * FROM tbl_principal".($opcoes==''?'':' WHERE'.$opcoes)." ORDER BY vtr") or die(mysql_error());   while($array = mysql_fetch_array($query))   {   //mostra na tela o nome do carro e tipo de manutenção      echo '  <tr>',chr(10);   echo '    <td>'.$array['vtr'].'</td><td>'.date('d/m/Y',strtotime($array['data_manutencao'])).'</td><td>'.$array['tipo_manutencao'].'</td><td>'.$array['vr_unitario_servico'].'</td><td>'.$array['vr_total_pecas'].'</td><td>'.$array['vr_total_manutencao'].'</td>',chr(10);   echo '  </tr>',chr(10);   }   ?>

E a proposito, caso a data_final esteja vazia é só colocar uma consição para inserir coringa (%) na busca...

 

Abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ainda não retornou ... vejam como ficou o código

 

consulta_data.php

 

<?
 $opcoes = '';
   if ($_POST['viatura']<>'')
      $opcoes.= ' vtr like "%'.$_POST['viatura'].'%"';
   if ($_POST['data_inicial']<>'')
      $opcoes.= ($opcoes==''?'':' AND').' data_manutencao>="'.date('Y-m-d',strtotime($_POST['data_inicial'])).'"';
   if ($_POST['data_final']<>'')
      $opcoes.= ($opcoes==''?'':' AND').' data_manutencao<="'.date('Y-m-d',strtotime($_POST['data_final'])).'"';
	  $query = mysql_query("SELECT * FROM tbl_principal".($opcoes==''?'':' WHERE'.$opcoes)." ORDER BY vtr") or die(mysql_error());
   while($array = mysql_fetch_array($query))
   {
   //mostra na tela o nome do carro e tipo de manutenção
      echo '  <tr>',chr(10);
   echo '    <td>'.$array['vtr'].'</td><td>'.date('d/m/Y',strtotime($array['data_manutencao'])).'</td><td>'.$array['tipo_manutencao'].'</td><td>'.$array['vr_unitario_servico'].'</td><td>'.$array['vr_total_pecas'].'</td><td>'.$array['vr_total_manutencao'].'</td>',chr(10);
   echo '  </tr>',chr(10);
   }
   ?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

<?php include_once('conexao_1_sysvtr.php');
$sql = mysql_query('SELECT * FROM `tbl_viaturas`');
if(!mysql_num_rows($sql)) die('Impossível continuar, não há registros!');
?>

<form action="consulta_data.php" method="post" id="frm">
   <fieldset>
       <legend>Consulta de manutenção</legend>
       <label>Viatura:
           <select name="viatura" class="iNome">
               <option value="0">Todas as viaturas</option>
<?php while(false !== ($row = mysql_fetch_assoc($sql))) echo "\t\t\t\t<option value=\"{$row['codigo']}\">{$row['vtr']}</option>\n"; ?>
           </select>
       </label>
       <fieldset>
           <legend>Período</legend>
           <label>Entre: <input type="text" name="data_inicio" id="data_1" class="iNome" /></label>
           <label>e: <input type="text" name="data_final" id="data_2" class="iNome" /></label>
       </fieldset>
   </fieldset>
   <button type="submit">Gerar relatório</button>
</form>

 

<?php
include_once('conexao_1_sysvtr.php');
$prt_viatura = ($_POST['viatura'] == 0)? '': ' AND `codigo` = '.$_POST['viatura'];
$data_ini = (preg_match('/\d{2}.\d{2}.\d{4}/'))? preg_replace('/(\d{2}).(\d{2}).(\d{4})/','$3$2$1',$_POST['data_inicio']): false;
$data_fim = (preg_match('/\d{2}.\d{2}.\d{4}/'))? preg_replace('/(\d{2}).(\d{2}).(\d{4})/','$3$2$1',$_POST['data_final']): date(Ymd);
if(!$data_ini) {
   $sql = mysql_query('SELECT `data_manutencao` FROM `tbl_viaturas` ORDER BY `data_manutencao` LIMIT 0,1');
   $data_ini = mysql_result($sql,0,0);
}

$sql = mysql_query('SELECT `vtr`,`data_manutencao`,`tipo_manutencao`,`vr_total_manutencao`,`vr_total_pecas`,SUM(`vr_total_manutencao` + `vr_total_pecas`) AS `vr_total_servico` FROM `tbl_viaturas` WHERE (`data_manutencao` BETWEEN '.$data_ini.' AND '.$data_fim.') '.$prt_viatura) or die(myqsl_error());
?>
<table width="900" border="1">
   <thead>
       <tr>
           <th>Viatura</th>
           <th>Data de manutenção</th>
           <th>Tipo de manutenção</th>
           <th>Valor do serviço</th>
           <th>Valor das peças</th>
           <th>Valor total</th>
       </tr>
   </thead>
   <tbody>
<?php while(false !== ($row = mysql_fetch_assoc($sql))) {
   echo "\t\t<tr>\n";
   foreach($row as $value) echo "\t\t\t<td>{$value}</td>\n";
   echo "\t\t</tr>\n";
} ?>
   </tbody>
</table>

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.