Jump to content
professor.rafael

Busca Utilizando Data

Recommended Posts

professor.rafael

Caros mestre do PHP, tenho um fomulário de pesquisa que entra com a data no formato dd/mm/ano, conforme script abaixo:

<?php
//Vai verificar se a nossa sessão esta ativa
require_once("verificar.php");
//Vai fazer a conexão com o nosso banco de dados imaginária
require_once("conectar.php");
//Função que vai exibir a data completa, dia e ano corrente
include 'exibir_dia.fcn';
?>
<html>
<head>
</head>
<body bgcolor="#FFFFFF" text="#000000">
<center><img src="/ipil/imagens/logo_ipil.jpg" width="1000" height="180"></center>
<b><?php
//vai exibir o nome do usuário que está logado e a data corrente
echo "O Usuário " .$_SESSION['sessao_nome']." está logado no sistema neste momento!!!! Hoje é ".$data;
?></b>
<table width="60%" border="0" cellspacing="0" cellpadding="0" align="center">
<tr>
<td height="60"><div align="center"><font face="Arial" size="4"><b>Pesquisar Vendas por Data - IPIL</b></font></div></td>
</tr>
</table>
<form method="POST" action="vendas_por_data.php">
<p><div align="left"><font face="Arial" size="2">
<b>Digite uma Data:<br/>
<td height="25" align="center"><b><font face="Arial" size="2"><input type="text" name="ven_data" size="10"></font></td><br/>
<input type="submit" value="Pesquisar"></font></div><br/>
</form><br/>
<div align="center"><font face="Arial" size="2">
<b><a href='menu_pesquisar_vendas.php'><b>Voltar Para o Menu Pesquisar Vendas</a><br/>
<b><a href='form_alterar_vendas.php'><b>Voltar Para Alteração de Vendas</a><br/>
<b><a href='form_excluir_vendas.php'><b>Voltar Para Exclusão de Vendas</a><br/>
<b><a href='menu_ger_vendas.php'><b>Voltar para o menu de Opções Gerenciamento de Vendas</a><br/>
<b><a href='menu_opcoes_geral.php'><b>Voltar para o menu de Opções Geral</a><br/>
<b><a href='sair.php'><b>Sair do Sistema IPIL</a></font></div>
</body>
</html>

E tenho abaixo o script que vai receber esta data e fazer a busca no MySql, conforme abaixo:

<?php
//Vai verificar se a nossa sessão esta ativa
require_once("verificar.php");
//Vai fazer a conexão com o nosso banco de dados imaginária
require_once("conectar.php");
//Função que vai exibir a data completa, dia e ano corrente
include 'exibir_dia.fcn';
?>
<html>
<body bgcolor="#FFFFFF" text="#000000">
<center><img src="/ipil/imagens/logo_ipil.jpg" width="1000" height="180"></center>
<b><?php
//vai exibir o nome do usuário que está logado e a data corrente
echo "O Usuário " .$_SESSION['sessao_nome']." está logado no sistema neste momento!!!! Hoje é ".$data;
?></b><br/>
<table width="60%" border="0" cellspacing="0" cellpadding="0" align="center">
<tr>
<td height="60"><div align="center"><font face="Arial" size="4"><b>Pesquisar Vendas por Estado - IPIL</b></font></div></td>
</tr>
</table><br/>
<?php
//Recebe os dados digitados no formulário de pesquisa de vendas por data via método POST
$ven_data = $_POST["ven_data"];

$sql_vendas = "SELECT vendas.ven_id, vendas.date_format(ven_data, ‘%d/%m/%Y’) AS DATA, clientes.cli_id, clientes.cli_nome, vendas.cli_id, produtos.pro_id, produtos.pro_nome, vendas.pro_id FROM clientes, produtos, vendas WHERE clientes.cli_id = vendas.cli_id AND produtos.pro_id = vendas.pro_id AND vendas.ven_data = '$ven_data'";
$sql_vendas = mysql_query($sql_vendas) or die ("Não foi possível realizar a consulta!!!!<br/> <b><a href='menu_pesquisar_vendas.php'><b>Voltar Para o Menu Pesquisar Vendas</a><br>");
?>
<?php
if(mysql_num_rows($sql_vendas) > 0)
{
?>
<table width="100%" border="0" cellspacing="1" cellpadding="0" align="center">
<tr bgcolor="#6699CC">
<td colspan="15"><div align="center"><font face="Arial" size="2"><b><font color="#FFFFFF">Vendas por Data - <?php echo $ven_data;?></font></b></font></div></td>
<tr bgcolor="#38B0DE"><td width="5%"><div align="center"><b><font face="Arial" size="2">Código da venda</font></b></div></td>
<td width="5%"><div align="center"><b><font face="Arial" size="2">Data da Venda</font></b></div></td>
<td width="5%"><div align="center"><b><font face="Arial" size="2">Código do Cliente</font></b></div></td>
<td width="5%"><div align="center"><b><font face="Arial" size="2">Nome do Cliente</font></b></div></td>
<td width="10%"><div align="center"><b><font face="Arial" size="2">Código do Produto</font></b></div>
<td width="5%"><div align="center"><b><font face="Arial" size="2">Nome do Produto</font></b></div></td>
</tr>
<?php
while($array_venda = mysql_fetch_array($sql_vendas))
{
?>
<tr bgcolor="#EBC79E">
<td width="10%" height="25"><b><font face="Arial" size="2"><?php echo $array_venda['ven_id'];?></font></td>
<td width="10%" height="25"><b><font face="Arial" size="2"><?php echo $array_venda['ven_data'];?></font></td>
<td width="20%" height="25"><b><font face="Arial" size="2"><?php echo $array_venda['cli_id'];?></font></td>
<td width="20%" height="25"><b><font face="Arial" size="2"><?php echo $array_venda['cli_nome'];?></font></td>
<td width="20%" height="25"><b><font face="Arial" size="2"><?php echo $array_venda['pro_id'];?></font></td>
<td width="20%" height="25"><b><font face="Arial" size="2"><?php echo $array_venda['pro_nome'];?></font></td>
</tr>
<?php
}
?>
</table>
<?php
}/* Fecha a execução do comando mysql_num_rows > 0 */
else
{
echo "<br/><br/><div align=center><font face=Arial size=2><b>Desculpe, mais não foram encontradas vendas para a Data $ven_data !!!!<br/><br/></font></div></b>";
}
?>
<br/><div align="center"><font face="Arial" size="2">
<b><a href='menu_pesquisar_vendas.php'><b>Voltar Para o Menu Pesquisar Vendas</a><br/>
<b><a href='form_alterar_vendas.php'><b>Voltar Para Alteração de Vendas</a><br/>
<b><a href='form_excluir_vendas.php'><b>Voltar Para Exclusão de Vendas</a><br/>
<b><a href='menu_ger_vendas.php'><b>Voltar para o menu de Opções Gerenciamento de Vendas</a><br/>
<b><a href='menu_opcoes_geral.php'><b>Voltar para o menu de Opções Geral</a><br/>
<b><a href='sair.php'><b>Sair do Sistema IPIL</a></font></div>
</body>
</html>

Ele não está retornando a pesquisa. Os grandes mestres do PHP podem me ajudar com esta dúvida? Fico humildemente no aguardo de seu contato.  :bored:

Share this post


Link to post
Share on other sites
KTachyon

A tua query funcionaria se a data que recebes fosse formatada para o MySQL, ou seja: yyyy-mm-dd.

Ou seja, das duas uma, ou formatas essa data no PHP, ou separas e procuras os campos ano, mês e dia individualmente na query:

YEAR(ven_data) = '$ano' AND MONTH(ven_data) = '$mes' AND DAY(ven_data) = '$dia'


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
mAiN_iNfEcTiOn

Olá professor.rafael

Como analiso sequencialmente o código, vou também dar conselhos sequenciais...

Primeiro, onde tens:

include 'exibir_dia.fcn';

Das duas uma, ou tens o Apache a interpretar os .fcn como ficheiros php ou então corres o risco de eu fazer algo como:

http://www.oTeuServidor.DoM/exibir_dia.fcn

e ele mostra-me o código dentro (em text/plain) ou pior, deixa-me fazer download :) :) Aconselho-te a mudares a extensão para .php :)

Segundo, com que formato esse ficheiro retorna a data? YYYY-MM-DD ? DD-MM-YYYY ? MM-DD-YYYY ? (...) ?

Também aguardo resposta

Share this post


Link to post
Share on other sites
professor.rafael

Quando digito a data no formato dd/mm/yyyy a consulta não retorna nada, da erro. Quando digito a data no formato YYYY-MM-DD, que é o formato do MySql funciona perfeitamente. Obrigado pelas dicas.

Share this post


Link to post
Share on other sites
KTachyon

Sim, mas podes pegar no input, fazer o split fazer a pesquisa da forma que indiquei.


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
professor.rafael

Desculpe minha ignorância, mas em que parte do código eu aplico o comando YEAR(ven_data) = '$ano' AND MONTH(ven_data) = '$mes' AND DAY(ven_data) = '$dia' ? Você poderia me indicar o caminho. Grato pela ateçao. :down:

Share this post


Link to post
Share on other sites
mAiN_iNfEcTiOn

Olá professor.rafael,

As soluções para o teu problema passam por uma escolha...

1 - Ou tu colocas lá um daqueles objectos do tipo date picker e metes a caixa de texto readonly e so pode seleccionar através do objecto...

2 - Ou decides (e avisas o utilizador) que só pode inserir a data num determinado formato....

A forma mais simples é, sem dúvida, a 2ª...

Segue o exemplo:

<!-- Este é o ficheiro form.html -->
<form method="post" action="process.php">
<label for="data">Insira a data (formato: dd/mm/aaaa):</label>
<input type="text" id="data" name="data" value="" /><br/>
<input type="submit" value="Enviar" name="send" />
</form>

<?php
# Este é o ficheiro process.php

# Verifica se foi enviado por POST alguma coisa
if( $_POST )
{
    # Verifica se não foi enviada a data
    if( !$_POST['data'] )
    {
        header('location: form.html');
        exit();
    }

    # Como foi enviada a data, vamos verificar se é uma data válida...
    # Ora a data vem no formato dd/mm/aaaa....
    # ... vamos então separar por /'s
    $data_separada = explode("/",$_POST['data']);

    # Para que seja uma data válida, teremos que ter um array de 3 parcelas...
    # ... onde essas parcelas (do 0 ao 2) contém o dia, mês e ano respectivamente,
    # ... e que os dias existam consoante o mês (e o ano)...
    # ... por exemplo, não existe dia 31 em Novembro... ou 29 de Fevereiro em 2011 ... mas em 2012 já há 
    # ... para verficar a validade da data, usaremos a função checkdate()
    if( (count($data_separada)!=3) || !checkdate($data_separada[1],$data_separada[0],$data_separada[2]) )
        die("Data Inválida");

    # Bem, se chegou aqui, a data é válida....
    # .... agora é fazer o processo que já se estava a fazer...
    # Bem, eu neste caso vou inverter o array, de modo a poder juntar tudo com -'s e fazer a query:
    $data = implode("-",array_reverse($data_separada));

    # E agora, vou fazer a query que se estava a fazer, devidamente alterada:
    $sql_vendas = "
SELECT
    vendas.ven_id,
    DATE_FORMAT(vendas.ven_data, '%d/%m/%Y') AS DATA,
    clientes.cli_id,
    clientes.cli_nome,
    vendas.cli_id,
    produtos.pro_id,
    produtos.pro_nome,
    vendas.pro_id

FROM
    clientes,
    produtos,
    vendas

WHERE
    clientes.cli_id = vendas.cli_id AND
    produtos.pro_id = vendas.pro_id AND
    vendas.ven_data = '$data'
";

}

?>

Share this post


Link to post
Share on other sites
professor.rafael

Muito obrigado, funcionou pariclamente, agora o erro passa para a visualização do resultado do select, ele retorna no lugar da data, o seguinte erro: Notice: Undefined index: ven_data in C:\Inetpub\wwwroot\ipil\vendas_por_data.php on line 66 que se refere ao trecho de código abaixo:

<?php
        while($array_venda = mysql_fetch_array($sql_vendas))
        {
?>      
        <tr bgcolor="#EBC79E">
            <td width="10%" height="25"><b><font face="Arial" size="2"><?php echo $array_venda['ven_id'];?></font></td>
            <td width="10%" height="25"><b><font face="Arial" size="2"><?php echo $array_venda['ven_data'];?></font></td>
            <td width="20%" height="25"><b><font face="Arial" size="2"><?php echo $array_venda['cli_id'];?></font></td>
            <td width="20%" height="25"><b><font face="Arial" size="2"><?php echo $array_venda['cli_nome'];?></font></td>
            <td width="20%" height="25"><b><font face="Arial" size="2"><?php echo $array_venda['pro_id'];?></font></td>
            <td width="20%" height="25"><b><font face="Arial" size="2"><?php echo $array_venda['pro_nome'];?></font></td>
        </tr>
<?php
        }
?>
        </table>
<?php
     }/* Fecha a execução do comando mysql_num_rows > 0 */
     else
     {
         echo "<br/><br/><div align=center><font face=Arial size=2><b>Desculpe, mais não foram encontradas vendas para a Data $ven_data !!!!<br/><br/></font></div></b>";
     }
?>

Se tens alguma ideia eu agradeço desde já. Muito obrigado mesmo pela paciência e dedicação. Vou tentando aqui também achar uma solução.  :fartnew2:

Share this post


Link to post
Share on other sites
professor.rafael

Caros amigos, mais uma vez muito obrigado. Consegui resolver o problema conforme abaixo:

<td width="10%" height="25"><b><font face="Arial" size="2"><?php echo $array_venda['DATA'];?></font></td>

Mais uma vez meu eterno agradecimento a todos do forum.  :P:cheesygrin:

Share this post


Link to post
Share on other sites
brunoais

Caros amigos, mais uma vez muito obrigado. Consegui resolver o problema conforme abaixo:

<td width="10%" height="25"><b><font face="Arial" size="2"><?php echo $array_venda['DATA'];?></font></td>

Mais uma vez meu eterno agradecimento a todos do forum.  :P:cheesygrin:

<font>?  😲. Estás em que era, pá? O HTML 3 já é demasiado antigo e contem demasiadas coisas que já se concluiu que são má ideia. Atualiza-te! Usa o HTML 4.01 strict ou o HTML5.


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites
mAiN_iNfEcTiOn

Olá professor.rafael... Ainda bem que chegaste rapidamente à solução :)

Quanto ao agradecimento, somos uns prós outros :P:D Até à próxima

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.