PHP-Fusion Brasil
phpfusion

Navegação

Sites de Suporte

Usuários Online

· Visitantes Online: 13

· Membros Online: 0

· Membros Registrados: 911
· Mais Novo Membro: candiotti

Enquete

poll title

Qual versão do PHP-Fusion você usa em seu site?







A nova versão 7.01
A nova versão 7.01
100% [4 Votos]

A versão anterior 7.00.07
A versão anterior 7.00.07
0% [0 Votos]

A versão descontinuada 6.01.19
A versão descontinuada 6.01.19
0% [0 Votos]

Votos: 4
Iniciada: 06/09/2010 21:42

Arquivo de Enquetes

Você deve entrar para votar.

Ver Tópico

PHP-Fusion Brasil :: Outros Assuntos :: Discussão Geral
 Imprimir Tópico
Consulta a campos NULL
dgopereira
#1 Imprimir Mensagem
Enviado em 30/01/2010 00:19
Membro

Mensagens: 21
Registrado: 28.01.10

Consegui resolver um problema e agora apareceu outro...


Tenho um form que faz uma consulta no banco, a consulta é por data hora entrada e hora saida.

Ex: Data: 01/01/2010 a 29/01/2010 - Hora Entrada: 00:00 a 15:00 - Hora Saída: 09:00 as 18:00

Para os campos com valor a consulta abaixo está perfeita!! mas se algum campo, da coluna horaSaida estiver com o valor NULL ele nao mostra, por mais que eu deixe em branco o input (Hora Saída: 09:00 as ).

Como resolvo isso? Terei que fazer outra? separada?

Formulario
Baixar código-fonte  Código

Data:           <input type="text" name="datai" id="datai")"/>
a                 <input type="text" name="dataf" id="dataf") "/>
     
Entrada Hora: <input type="text" name="horaiEntrada" id="$horaiEntrada")"/>
a                   <input type="text" name="horafEntrada" id="$horafEntrada")"/>
           
Saída Hora:   <input type="text" name="horaiSaida" id="$horaiSaida")"/>
a                  <input type="text" name="horafSaida" id="$horafSaida")"/>





Pagina que processa a consulta

Baixar código-fonte  Código

//Função para enviar a data para o BD
function ConverteData($Data){
if (strstr($Data, "/"))//verifica se tem a barra /
{
$d = explode ("/", $Data);//tira a barra
$rstData = "$d[2]-$d[1]-$d[0]";//separa as datas $d[2] = ano $d[1] = mes etc...
return $rstData;
} elseif(strstr($Data, "-")){
$d = explode ("-", $Data);
$rstData = "$d[2]/$d[1]/$d[0]";
return $rstData;
}else{
return "Data invalida";
}
}

$dataini = ConverteData($_POST["datai"]);
$datafim = ConverteData($_POST["dataf"]);


//Consulta

$dataini = ConverteData($_POST["datai"]);
$datafim = ConverteData($_POST["dataf"]);

$horaiEntrada = $_POST["horaiEntrada"];
$horafEntrada = $_POST["horafEntrada"];

$horaiSaida = $_POST["horaiSaida"];
$horafSaida = $_POST["horafSaida"];


$result = mysql_query(" SELECT * FROM registro WHERE

Data >= '$dataini' AND Data <= '$datafim' AND

horaentrada >= '$horaiEntrada ' AND horaentrada <= '$horafEntrada' AND

horasaida >= '$horaiSaida' AND horasaida <= '$horafSaida'") or die (mysql_error());



 
gsguma
#2 Imprimir Mensagem
Enviado em 30/01/2010 14:38
Avatar

Administrador

Mensagens: 482
Registrado: 05.09.08

Sugestões:

1ª - A mais fácil: Crie 2 campos "select" pré-definidos para cada horário (HH e MM) e junte ao fazer a consulta. Deixe selecionado um horário padrão, assim nunca estará vazio.

Exemplo:
Hora Entrada: [hh]:[mm]
---------------- [00] [00]
---------------- [...] [...]
---------------- [24] [59]

2ª - Valide os horários em JS e em PHP para garantir a segurança:

Exemplo:
Baixar código-fonte  GeSHi: Javascript
  1. /*----------------------------
  2.  Validacao de Horarios (JS)
  3. ------------------------------
  4.  Chamada:
  5.  <form id="form" method="POST" action="inserir.php" onSubmit="javascript:return valida('form');">
  6. ----------------------------*/
  7. function valida(ForM){
  8. var horaie = document.forms[ForM].elements['horaiEntrada'];
  9. var horafe = document.forms[ForM].elements['horafEntrada'];
  10. var horais = document.forms[ForM].elements['horaiSaida'];
  11. var horafs = document.forms[ForM].elements['horafSaida'];
  12.  
  13. if(horaie.value == "" || horaie.value.length < 5){
  14. alert( "Informe um horário válido!" );
  15. document.focus();
  16. return false;
  17. }
  18. if(horafe.value == "" || horafe.value.length < 5){
  19. alert( "Informe um horário válido!" );
  20. document.focus();
  21. return false;
  22. }
  23. if(horais.value == "" || horais.value.length < 5){
  24. alert( "Informe um horário válido!" );
  25. document.focus();
  26. return false;
  27. }
  28. if(horafs.value == "" || horafs.value.length < 5){
  29. alert( "Informe um horário válido!" );
  30. document.focus();
  31. return false;
  32. } else {
  33. return true;
  34. }
  35. }
Gerado em 0.023 segundos usando GeSHi 1.0.7.20


Baixar código-fonte  GeSHi: PHP
  1. /*---------------------------------
  2.  Validacao de Horarios (PHP)
  3. -----------------------------------
  4.  Chamada: valida_horario("00:00")
  5. ---------------------------------*/
  6.  
  7. function valida_horario($HorariO){
  8. if ($HorariO){
  9. if ((strlen($HorariO) < 5) || (strlen($HorariO) > 5)){ unset($HorariO); return false; }
  10.  
  11. if (substr($HorariO,3) == ":"){ unset($HorariO); return false; }
  12.  
  13. $HorariO = explode(":", $HorariO);
  14.  
  15. if (($HorariO[0]<0) or ($HorariO[0]>23)){ unset($HorariO); return false; }
  16. if (($HorariO[1]<0) or ($HorariO[1]>59)){ unset($HorariO); return false; }
  17. }
  18. unset($HorariO);
  19. return true;
  20. }
Gerado em 0.030 segundos usando GeSHi 1.0.7.20


Espero ter ajudado!!!
www.gsguma.com.br/extras/foruns/php_fusion/assinatura.gif
 
www.gsguma.com.br
dgopereira
#3 Imprimir Mensagem
Enviado em 30/01/2010 14:52
Membro

Mensagens: 21
Registrado: 28.01.10

Obrigado pela ajuda gsguma!!!! realmente é uma solução válida.

RESOLVIDO!!

Consegui resolver de outra maneira, complementando a consulta com a condição: OR (horasaida IS NULL), ou seja, data x a y, hora x a y ou NULL.

Ficaria assim o final:

Baixar código-fonte  Código


   $result = mysql_query("SELECT * FROM registro WHERE
 
   Data >= '$dataini' AND Data <= '$datafim' AND

   horaentrada >= '$horaiEntrada ' AND horaentrada <= '$horafEntrada' AND

   horasaida >= '$horaiSaida' AND horasaida <= '$horafSaida' OR (horasaida IS NULL)

   ORDER BY id ASC LIMIT $offset,$entries_per_page")   OR DIE (mysql_error());





Ele me trará todos os registro com a hora especificada e que tbm esteja com o valor NULL

abs!!!!
 
gsguma
#4 Imprimir Mensagem
Enviado em 31/01/2010 18:48
Avatar

Administrador

Mensagens: 482
Registrado: 05.09.08

Eu não usaria campos nulos (NULL), poderia trazer trabalho no futuro, mas tudo bem!
www.gsguma.com.br/extras/foruns/php_fusion/assinatura.gif
 
www.gsguma.com.br
Ir ao Fórum:

Selos

XHTML válido!
CSS válido!

Aniversários

Lista completa aqui

Staff

staff

07 Setembro 2010 19:11

off  halisson
07/09/2010 19:02
    off  gsguma
07/09/2010 16:31
    off  technojeff
07/09/2010 15:42
    off  Splash
07/09/2010 15:35
    

Publicidade