|
Consulta a campos NULL
|
| dgopereira |
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
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
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 |
Enviado em 30/01/2010 14:38
|

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:
GeSHi: Javascript/*---------------------------- Validacao de Horarios (JS) ------------------------------ Chamada: <form id="form" method="POST" action="inserir.php" onSubmit="javascript:return valida('form');"> ----------------------------*/ function valida(ForM){ var horaie = document.forms[ForM].elements['horaiEntrada']; var horafe = document.forms[ForM].elements['horafEntrada']; var horais = document.forms[ForM].elements['horaiSaida']; var horafs = document.forms[ForM].elements['horafSaida']; if(horaie.value == "" || horaie.value.length < 5){ alert( "Informe um horário válido!" ); document.focus(); return false; } if(horafe.value == "" || horafe.value.length < 5){ alert( "Informe um horário válido!" ); document.focus(); return false; } if(horais.value == "" || horais.value.length < 5){ alert( "Informe um horário válido!" ); document.focus(); return false; } if(horafs.value == "" || horafs.value.length < 5){ alert( "Informe um horário válido!" ); document.focus(); return false; } else { return true; } }
Gerado em 0.023 segundos usando GeSHi 1.0.7.20
GeSHi: PHP/*--------------------------------- Validacao de Horarios (PHP) ----------------------------------- Chamada: valida_horario("00:00") ---------------------------------*/ function valida_horario($HorariO){ if ($HorariO){ if ((strlen($HorariO) < 5) || (strlen($HorariO) > 5)){ unset($HorariO); return false; } if (substr($HorariO, 3) == ":"){ unset($HorariO); return false; } if (($HorariO[0]< 0) or ($HorariO[0]> 23)){ unset($HorariO); return false; } if (($HorariO[1]< 0) or ($HorariO[1]> 59)){ unset($HorariO); return false; } } return true; }
Gerado em 0.030 segundos usando GeSHi 1.0.7.20
Espero ter ajudado!!!
 |
| |
|
|
| dgopereira |
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:
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 |
Enviado em 31/01/2010 18:48
|

Administrador
Mensagens: 482
Registrado: 05.09.08
|
Eu não usaria campos nulos (NULL), poderia trazer trabalho no futuro, mas tudo bem!
 |
| |
|