Ir para conteúdo

POWERED BY:

Arquivado

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

Ederjsantos

Buscar com duas variáveis

Recommended Posts

Bom dia pessoal,

 

Seguinte galera to com um select e preciso buscas os dados com duas variáveis ,

preciso buscar a matricula e a data.

Explicando melhor, eu digito a matricula e a data que quero fazer a busca e ele me retorna

os dados no meu echo.

como faço isso?

Esse é o meu select...

$sql = "SELECT CREDENCIAIS.CRED_NUMERO'CRACHA', PESSOAS.PES_NOME'NOME', ESTRUTURA.EST_DESCRICAO'ESTRUTURA', GRUPOS.GRP_DESCRICAO'GRUPOS', AREAS.ARE_DESCRICAO'AREA DE ORIGEM', EQUIPAMENTOS.EQPI_DESCRICAO'EQUIPAMENTO', convert (char(20), LOG_CREDENCIAL.MOV_DATAHORA ,103)+convert (char(20), LOG_CREDENCIAL.MOV_DATAHORA ,8) 'DATAHORA' , LOG_CREDENCIAL.MOV_ENTRADASAIDA FROM AREAS, CREDENCIAIS, EQUIPAMENTOS, ESTRUTURA, GRUPOS, LOG_CREDENCIAL, PESSOAS WHERE CREDENCIAIS.CRED_NUMERO = LOG_CREDENCIAL.CRED_NUMERO AND EQUIPAMENTOS.EQPI_NUMERO = LOG_CREDENCIAL.EQPI_NUMERO AND ESTRUTURA.EST_NUMERO = PESSOAS.EST_NUMERO AND GRUPOS.GRP_NUMERO = LOG_CREDENCIAL.GRP_NUMERO AND LOG_CREDENCIAL.PES_NUMERO = PESSOAS.PES_NUMERO AND ESTRUTURA.EST_NUMERO IN (3) AND AREAS.ARE_NUMERO IN (2) AND LOG_CREDENCIAL.MOV_ENTRADASAIDA IN (1,2) AND MOV_DATAHORA BETWEEN CONVERT(DATETIME,'01/07/2009',103) AND CONVERT(DATETIME,'31/12/2050',103)  AND CREDENCIAIS.CRED_NUMERO = $PES_NUMERO order by MOV_DATAHORA DESC";

Mais uma vez obrigado desde já.

Compartilhar este post


Link para o post
Compartilhar em outros sites

LZLOKO

ja estou usando mssql_fetch_array, eu queria saber como faço pra colocar as duas variaveis porque nao sei a sintaxe,

porque a busca ja está funcionando queria agora colocar pra buscar por data tambem.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pra buscar pela data você envia o campo data e captura em uma variavel superglobal ($_POST ou $_REQUEST).

Quando capturada, você implementa na sua query.

 

//EX:
$usuario=$_POST['usuario'];
$sql="select id_usuario where usuario_cad='$usuario'";

if($_POST['data']){
$data=$_POST['data'];
$sql.=' and data_cad='$data';
}
//aí você executa a query

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não é isso Matias, quero saber como fazer isso em php, pra buscar a data e a matricula.

E Mário Miranda ja recuperei esses dados via POST porem quando faço a busca nao vem dado algum

fica em branco a minha tela e nem da erro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então...veja o seguinte:

echo $sql;

Copia a query e cola no console do seu banco de dados e executa pelo console. Se o console não retornar erro de sintaxe...é porque a query está certa porém não satisfaz pesquisa.

Aí você pode mudar a query usando por between.

ex:


$sql="select id_usuario from tb_usuario where nome_usuario='$nome'";
$data_inicial=$_POST['data1'];
$data_final=$_POST['data2'];
if($data_inicial && $data_final){
$sql.=' and data between '$data_inicial' and '$data_final';
}
Esta instrução te possibilita um simples filtro por período.

Fique atento: no exemplo eu capturo dois campos de data para executar a query usando o between.

Verifica também se o campo respectivo à data no seu banco de dados está com ou sem timestamp.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Blza Mario vou olhar aqui

e da um echo na variável pra ver se ta passando,

acho que o problema é esse o campo data nao está passando

com os caracteres...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então..

Precisa ver se o nome do campo no HTML é o mesmo o qual você está capturando no $_POST.

<input type="text" name="data_inicial" />"
<?php
$data=$_POST['data_inicial'];
?>
Se não..não captura.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você deu um echo na query para ve-la na tela?

 

Existe a possibilidade de você executar essa query no console do banco de dados?

Pois lá saberemos se esta query está mesmo executando com sucesso ou não. Pergunto pois de repente seu PHP.ini está com os alertas e erros desabilitados e pode não estar mostrando a vocÊ o erro da query.

Sem contar que, na minha opinião, acho mais pratico montar a query no console do banco de dados para depois aplica-la no programa.

 

Veja se a query executa sem erros no seu banco de dados. Se executar mas estiver retornando "0 linhas" é porque os dados que você está enviando não estão satisfazendo a sua pesquisa.

 

A pergunta que o Carlos Eduardo te fez também é muito pertinente. Preste atenção nos detalhes que ele colocou na pergunta.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Matias Rezende eu estou disitando 21/12/2009 e no banco está 2009-12-21 11:48:00:00

porem eu faço o convert no select <code>SELECT convert(char(10), MOV_DATAHORA ,103)MOV_DATAHORA FROM LOG_CREDENCIAL</code>

sempre faço este tipo de busca e funciona mas este aqui empacou de verdade

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom pessoal encontrei esses erros:

Warning: mssql_query() [function.mssql-query]: message: Incorrect syntax near the keyword 'END'. (severity 15) in /usr/local/apache/htdocs/intranet/acesso_catraca.php on line 131

 

Warning: mssql_query() [function.mssql-query]: General SQL Server error: Check messages from the SQL Server (severity 15) in /usr/local/apache/htdocs/intranet/acesso_catraca.php on line 131

 

Warning: mssql_query() [function.mssql-query]: Query failed in /usr/local/apache/htdocs/intranet/acesso_catraca.php on line 131

 

Warning: mssql_num_rows(): supplied argument is not a valid MS SQL-result resource in /usr/local/apache/htdocs/intranet/acesso_catraca.php on line 133

Matrícula não Encontrada.

Warning: mssql_fetch_array(): supplied argument is not a valid MS SQL-result resource in /usr/local/apache/htdocs/intranet/acesso_catraca.php on line 151

<

e onde sao esses erros são aqui:


$sql = "SELECT CREDENCIAIS.CRED_NUMERO'CRACHA', PESSOAS.PES_NOME'NOME', ESTRUTURA.EST_DESCRICAO'ESTRUTURA', GRUPOS.GRP_DESCRICAO'GRUPOS', AREAS.ARE_DESCR    ICAO'AREA DE ORIGEM', EQUIPAMENTOS.EQPI_DESCRICAO'EQUIPAMENTO', convert (char(20), LOG_CREDENCIAL.MOV_DATAHORA ,103)+convert (char(20), LOG_CREDENCIAL.MO    V_DATAHORA ,8) 'DATAHORA' , LOG_CREDENCIAL.MOV_ENTRADASAIDA FROM AREAS, CREDENCIAIS, EQUIPAMENTOS, ESTRUTURA, GRUPOS, LOG_CREDENCIAL, PESSOAS WHERE CREDE    NCIAIS.CRED_NUMERO = LOG_CREDENCIAL.CRED_NUMERO AND EQUIPAMENTOS.EQPI_NUMERO = LOG_CREDENCIAL.EQPI_NUMERO AND ESTRUTURA.EST_NUMERO = PESSOAS.EST_NUMERO A    ND GRUPOS.GRP_NUMERO = LOG_CREDENCIAL.GRP_NUMERO AND LOG_CREDENCIAL.PES_NUMERO = PESSOAS.PES_NUMERO AND ESTRUTURA.EST_NUMERO IN (3) AND AREAS.ARE_NUMERO     IN (2) AND LOG_CREDENCIAL.MOV_ENTRADASAIDA IN (1,2) AND MOV_DATAHORA BETWEEN CONVERT(DATETIME,'01/07/2009',103) AND CONVERT(DATETIME,'31/12/2050',103)  A    ND CREDENCIAIS.CRED_NUMERO = $PES_NUMERO end LOG_CREDENCIAL.MOV_DATAHORA = $datap order by MOV_DATAHORA DESC";
129 //echo $sql; exit;
130 
131 $q = mssql_query($sql);
132 
133 if( mssql_num_rows($q)==0)
134 {
135 echo "Matrícula não Encontrada.";
136 }
137 
138 
139 echo "<table width='700px' cellspacing='0' align='center'>";
140 
141 echo "<tr>
142 <th class='details_ask'>Nome</th>
143 <th class='details_ask'>Local</th>
144 <th class='details_ask'>Catraca que passou</th>
145 <th class='details_ask'>Data</th>
146 <th class='details_ask'>Acao</th>
147 </tr>";
148 
149 //$q = mssql_query($sql);
150 
151 while($Relatorio = mssql_fetch_array($q))



Compartilhar este post


Link para o post
Compartilhar em outros sites

O banco está com timestamp.

Tenta usar o between assim:

$data=$_POST['data']." 01:59:59:59";
$data1= $_POST['data']." 23:59:59:59";

$sql.=" and data_inicial between '$data' and $data1";

Não é "END" ...é "AND".

Tá no final da query.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Arrumei isso ai Mario erro de digitação rs... maus

 

Coloquei como voce disse mas nao rolou tambem será que voce poderia me ajudar

me mostrando ai no meu codigo onde coloco?

 

valeu

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema não está no PHP, que está enviado corretamente os dados. O problema está na montagem do SELECT. Em função disto, vou mover para o fórum de SQL Server.

 

Tópico Movido

PHP http://forum.imasters.com.br/public/style_emoticons/default/seta.gif SQL Server

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ao inves de usar o convert na query, você pode concatenar os valores de hora:minuto:segundo no envio da variavel de data.

Quando você usa o between, você está pesquisando valores de "X" à "Y".

Portanto, vocÊ recebe a variavel de data, vamos dizer que você envie "2009-12-01".

Então sua variavel de data seria:

$data="2009-12-01"
Você quer resultados desta data. Então você coloca:

$data=$data." 00:59:59";
E define outra variavel com a mesma data, mas com o range de hora avançado até as 23:59:59.

$data1=$data." 23:59:59
";

 

Aí na sua query, você usa o between.

Ex:

$sql.=" select * from tb_cliente where nome='$nome' and data between '$data' and '$data1'";
;

Claro que no forum de SQL Server, os especialistas dirão qual a melhor forma de conversão. Mas caso você não queira converter, vai aí a dica.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ederjsantos, tentei acompanhar o topico desde do inicio, mas faz um bommmmm tempo que nao mexo com PHP.

 

O campo data no database esta como? DD/MM/YYYY HH:MM:SS

 

Abçs

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.