Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá! Boa tarde! Primeiramente um Feliz Ano Novo para todos!
Amigos, eu tenho um sistema de despesas feito, em que usuario faz o calculo das despesas que ele mesmo cadastra. So que ai eu estava querendo fazer com que as depesas sejam cadastradas mes em mes! Para que depois ele consultasse o que ele gastou referente ao mes que ele cadastrou a despesa. Nao tenho ideia de como fazer isso entao recorri a voces. Estou no aguardo desde ja agradeço!
>
Bom não entendi muito bem, mas acredito que esteja utilizando banco de dados para salvar as informações cert?
mas é só fazer um filtro selecionando as despesas do Mes X...
Certo, ficou um pouco subentendido mesmo. Mas as informações que estão sendo gravadas sao apenas as Despesas e o Tipo dela (Ex: Transporte, Educação etc)
Que tipo de filtro? Nao entendi.
Boa tarde,
Criar uma tabela histórico_despesas (por exemplo) não ajudaria?
Teria como mostrar-nos a estrutura do seu banco?
Entendi isso!
Meu banco tem as seguintes tabelas: tbdespesas > Id, Nome e Tipo(Esses TIPOS foram determinados por mim mesmo, e nao pelo usuario) // tbusuario > Id, Nome e Senha (apenas para um unico usuario)
Respondeu sua pergunta, Angelo?
Matheus Augusto 07, o problema é que em seu banco de dados não tem uma tabela que guarde a data da despesa. Teria que haver uma coluna na tabela tbdespesas referente a data da despesa assim a pesquisa se daria por essa coluna.
o que você quer é conforme ele coloca as despesas vai cadastrando no banco de dados e quando ele querer ver ex: mês de janeiro os gastos ele faz uma consulta clicando num link do mês. É isso ?
Quando fui fazer o fechamento dos meus gastos e receitas do ano passado (antes de ontem rsrs) no Excel pensei justamente em fazer na plataforma PHP, pro meu próprio uso. Já bolei tudo na minha mente, mas ainda não consegui colocar em prática.
Posso ajudar com algumas ideias se quiser.
>
Matheus Augusto 07, o problema é que em seu banco de dados não tem uma tabela que guarde a data da despesa. Teria que haver uma coluna na tabela tbdespesas referente a data da despesa assim a pesquisa se daria por essa coluna.
Pode explicar? Realmente nao entendi assim o serviço do campo datadespesa. Obrigado
>
o que você quer é conforme ele coloca as despesas vai cadastrando no banco de dados e quando ele querer ver ex: mês de janeiro os gastos ele faz uma consulta clicando num link do mês. É isso ?
Correto! Isso mesmo
>
Quando fui fazer o fechamento dos meus gastos e receitas do ano passado (antes de ontem rsrs) no Excel pensei justamente em fazer na plataforma PHP, pro meu próprio uso. Já bolei tudo na minha mente, mas ainda não consegui colocar em prática.
Posso ajudar com algumas ideias se quiser.
Ideias sempre sao bem vindas cara!
Tipo, não tem como o programa saber qual foi a data da despesa se esta data não existir e para existir é preciso estar no banco tendo assim uma coluna data.
tabelas:
tbdespesas > Id, Nome, Tipo e DataDespesa
tbusuario > Id, Nome e Senha
A partir disso você pode fazer a busca da despesa baseada na coluna DataDespesa que guardará a data em que a despesa for criada em formato americano YYYY-MM-DD(ano-mes-dia)
Com o conhecimento que tenho, como faria:
<?php
$ano = date("Y"); // Pega o ano atual
$mes = date("m"); // Neste caso o mês que será buscado, aqui ele busca o mês atual.
$query = @mysql_query("SELECT nome, tipo, dataDespesas as data FROM tbdespesas WHERE data LIKE '{$ano}-{$mes}-%'");
?>
O "%" no SELECT significa que qualquer dia tá valendo.
Uma dúvida, tem a tabela usuário, terá o registro de qual usuário fez qual despesa? Se caso for sim, mais uma coluna será implementada além de DataDespesa, seria ID_Usuario, assim quando uma despesa for pesquisada, através do ID_Usuario, em um SELECT usando INNER JOIN, saberá qual foi o usuário que gerou aquela despesa.>
Tipo, não tem como o programa saber qual foi a data da despesa se esta data não existir e para existir é preciso estar no banco tendo assim uma coluna data.
tabelas:
tbdespesas > Id, Nome, Tipo e DataDespesa
tbusuario > Id, Nome e Senha
A partir disso você pode fazer a busca da despesa baseada na coluna DataDespesa que guardará a data em que a despesa for criada em formato americano YYYY-MM-DD(ano-mes-dia)
Com o conhecimento que tenho, como faria:
<?php
$ano = date("Y"); // Pega o ano atual
$mes = date("m"); // Neste caso o mês que será buscado, aqui ele busca o mês atual.
$query = @mysql_query("SELECT nome, tipo, dataDespesas as data FROM tbdespesas WHERE data LIKE '{$ano}-{$mes}-%'");
?>
O "%" no SELECT significa que qualquer dia tá valendo.
Uma dúvida, tem a tabela usuário, terá o registro de qual usuário fez qual despesa? Se caso for sim, mais uma coluna será implementada além de DataDespesa, seria ID_Usuario, assim quando uma despesa for pesquisada, através do ID_Usuario, em um SELECT usando INNER JOIN, saberá qual foi o usuário que gerou aquela despesa.
Entendi sim! Mas assim, para eu que vou usar um SELECT/OPTION para listar os meses certo?! Como o banco saberia que o mes que eu selecionei é um mes que está no banco cadastrado juntamente com a despesa, para que eu possa ta fazendo uma consulta?! Vou tentar essa ideia que voce me indicou e a noite eu respondo. Entendeu minha pergunta?
>
Bom dia,
Uma sugestão para a modelagem: Clique aqui
* Sugestões são bem-vindas.
Boa sugestão! Mas no meu caso, nao seria usado pois so existe apenas um usuario entende? Dai eu nao preciso saber, mas caso eu aprimore o sistema vou fazer isso ai tambem, mas temos que tentar fazer esta parte que to apresentando! Obrigado
Mas a questão é: se você não colocar uma referêrencia(chave estrangeira) do usuário nas despesas, como vai saber de quem é qual despesa depois?
*Pensei na modelagem assim, imaginando um futuro crescimento/melhoramento do sistema.
*Desculpe, agora que notei que é um controle pessoal, pensei que fosse algo para mais pessoas utilizarem.
>
Mas a questão é: se você não colocar uma referêrencia(chave estrangeira) do usuário nas despesas, como vai saber de quem é qual despesa depois?
*Pensei na modelagem assim, imaginando um futuro crescimento/melhoramento do sistema.
*Desculpe, agora que notei que é um controle pessoal, pensei que fosse algo para mais pessoas utilizarem.
Uhum! Sem problemas. A principio é uso pessoal, digamos que um aprimoramento dos meus conhecimentos entende? Dai entao, quando ficar normalizado, podemos pensar nisso sim, porque nao? Otima ideia sua!
>
Entendi sim! Mas assim, para eu que vou usar um SELECT/OPTION para listar os meses certo?! Como o banco saberia que o mes que eu selecionei é um mes que está no banco cadastrado juntamente com a despesa, para que eu possa ta fazendo uma consulta?! Vou tentar essa ideia que voce me indicou e a noite eu respondo. Entendeu minha pergunta?Boa sugestão! Mas no meu caso, nao seria usado pois so existe apenas um usuario entende? Dai eu nao preciso saber, mas caso eu aprimore o sistema vou fazer isso ai tambem, mas temos que tentar fazer esta parte que to apresentando! Obrigado
Bem, quando se faz a pesquisa ele retorna informações. Para saber se existe algo encontrado se utiliza mysql_num_rows
<?php
$ano = date("Y"); // Pega o ano atual
$mes = date("m"); // Neste caso o mês que será buscado, aqui ele busca o mês atual.
$query = @mysql_query("SELECT nome, tipo, dataDespesas as data FROM tbdespesas WHERE data LIKE '{$ano}-{$mes}-%'");
// A partir daqui ele irá validar se há mais de 0(zero) informações encontradas na pesquisa
if(mysql_num_rows($query) > 0){
echo "Encontrou informação";
}else{
echo "Não foi encontrado nada na pesquisa";
}
?>
PS: Ah sim, você fala sobre meses selecionados. Os exemplos que estou dando são muito simples, se quiser selecionar meses seguidos você passará informação de um jeito, se for meses não seguidos e sem padrão, tipo: Março, Maio, Agosto etc, é outro jeito, mas a idéia é a mesma, o que irá mudar é uma implementação de Loop(s), isso depende muito do resultado que deseja, pois a implementação de pegar meses do início do ano até o atual não precisa ser complexo como o de meses selecionados sem padrão entre um e outro.
>
Bem, quando se faz a pesquisa ele retorna informações. Para saber se existe algo encontrado se utiliza mysql_num_rows
<?php
$ano = date("Y"); // Pega o ano atual
$mes = date("m"); // Neste caso o mês que será buscado, aqui ele busca o mês atual.
$query = @mysql_query("SELECT nome, tipo, dataDespesas as data FROM tbdespesas WHERE data LIKE '{$ano}-{$mes}-%'");
// A partir daqui ele irá validar se há mais de 0(zero) informações encontradas na pesquisa
if(mysql_num_rows($query) > 0){
echo "Encontrou informação";
}else{
echo "Não foi encontrado nada na pesquisa";
}
?>
PS: Ah sim, você fala sobre meses selecionados. Os exemplos que estou dando são muito simples, se quiser selecionar meses seguidos você passará informação de um jeito, se for meses não seguidos e sem padrão, tipo: Março, Maio, Agosto etc, é outro jeito, mas a idéia é a mesma, o que irá mudar é uma implementação de Loop(s), isso depende muito do resultado que deseja, pois a implementação de pegar meses do início do ano até o atual não precisa ser complexo como o de meses selecionados sem padrão entre um e outro.
Eu tava pensando em adicionar cada mes entende? No campo que tu deu a ideia (Janeiro ate Dezembro) mas ai eu nao sei como, na hora de que eu for calcular, o sistema saberia qual mes que eu selecionei. Compreende? Fica subentendido pq to sem a estrutura do codigo aqui, mas acho que nem precisa!
>
Bom dia,
Uma sugestão para a modelagem: Clique aqui
* Sugestões são bem-vindas.
valor de vez de varchar colocar double
>
Bom dia,
Uma sugestão para a modelagem: Clique aqui
* Sugestões são bem-vindas.
não é mais facil criar o campo despesa na tabela usuario, assim cada um tem suas despesas
>
Eu tava pensando em adicionar cada mes entende? No campo que tu deu a ideia (Janeiro ate Dezembro) mas ai eu nao sei como, na hora de que eu for calcular, o sistema saberia qual mes que eu selecionei. Compreende? Fica subentendido pq to sem a estrutura do codigo aqui, mas acho que nem precisa!
Bem, sobre a passagem de valores, como estamos falando de algo em WEB a passagem deve vir do HTML via POST ou GET, independente de utilizar ou não AJAX. Caso os meses sejam selecionados sem padrão de ordem ou distancia entre eles a seleção de meses seria por CHECKBOX, caso seja selecionado um mês então um botão INPUT tá bom.
Tabela de Despesa bem simples
id integer
tipo integer
valor float
data date
Registros
1 | 1 | 10.00 | 2012-12-15
2 | 1 | 13.00 | 2013-01-02
3 | 1 | 26.00 | 2013-01-03
Digamos que esses registros existam na tabela, e você quer saber todas as despesas do MÊS 01 do ANO 2013
SELECT * FROM despesas WHERE data >= '2013-01-01' AND data <= '2013-01-31'
OU
SELECT * FROM despesas WHERE MONTH(data) = '01' AND YEAR(data) <= '2013' // alguns bancos podem não conter as funções MONTH e YEAR então verifique antes
OU ainda, se quiser somente o total
SELECT SUM(valor) FROM despesas WHERE data >= '2013-01-01' AND data <= '2013-01-31' // irá retornar a somatória de todos os registros
Fiz o seguinte:
<select name="mes" size="1">
<option>Selecione o Mes</option>
<option>Janeiro</option>
<option>Fevereiro</option>
<option>Março</option>
<option>Abril</option>
<option>Maio</option>
<option>Junho</option>
<option>Julho</option>
<option>Agosto</option>
<option>Setembro</option>
<option>Outubro</option>
<option>Novembro</option>
<option>Dezembro</option> </select>
</form>
Dai depois criei no meu menu o Consulta Mes, que vai pro arquivo consultames.php
<body>
<?php
include("conectbd.php");
$mes = $_POST['mes'];
$sql=mysql_query("SELECT * FROM tbdespesa WHERE tipo='".$mes."'") or die (mysql_error());
while ($linha=mysql_fetch_array($sql)){
echo "<tr><td>".$linha['meses']."</td>";
}
?>
Deu pra entender o que eu quero fazer agora? So que ai da erro pq ele nao ta pegando o POST. Tentei usar o action mas nao deu certo!
Esta é a pagina de cadastrodespesas.php
<div>Cadastro de Despesas</div>
<form action = "recebecaddespesa.php" method ="post">
<table width="60%" border="1" align="center">
<tr><td>
<p >Nome: </td><td><input type ="text" name = nome size="50" > <br></td></tr>
<tr><td><p > Tipo: </td><td><select name="tipo" size="1">
<option>Moradia</option>
<option>Transporte</option>
<option>Lazer/Informação</option>
<option>Alimentação</option>
<option>Educação</option>
<option>Outros</option>
</select>
<tr><td><p > Mês </td><td><select name="mes" size="1">
<option>Janeiro</option>
<option>Fevereiro</option>
<option>Março</option>
<option>Abril</option>
<option>Maio</option>
<option>Junho</option>
<option>Julho</option>
<option>Agosto</option>
<option>Setembro</option>
<option>Outubro</option>
<option>Novembro</option>
<option>Dezembro</option>
</select>
<tr><td colspan="2"><center>
<input type=submit value ="Cadastro" align="right" class="imp1">
</p></td></tr>
</form>
Dai este é o recebecaddespesa.php:
<?php
include ("conectbd.php");
$nome = $_POST['nome'];
$tipo = $_POST['tipo'];
$mes = $_POST['mes'];
$sql1=mysql_query("SELECT * FROM tbdespesa WHERE nome='".$nome."' AND tipo='".$tipo."'") or die (mysql_error());
if(mysql_num_rows($sql1) >= 1){
echo "<script LANGUAGE='Javascript' TYPE='text/javascript'> alert ('Despesa Ja existente!')</SCRIPT>";
echo "<script language='Javascript'>window.location.href='caddespesa.php';</SCRIPT>";
}else{
$sql="INSERT INTO tbdespesa (`nome`,`tipo`,`meses`) VALUES ('$nome','$tipo','$mes')";
$result=mysql_query($sql) or die (mysql_error());
if($result==1){
echo "<font face='Calibri'>Cadastrado com sucesso!</font>";
echo '<meta HTTP-EQUIV="Refresh" CONTENT="2; URL=caddespesa.php">';
include("caddespesa.php");
}
}
?>
Entenderam? No banco eu criei apenas o campo MESES!
Pelo o que eu mostrei ai, num dava pra desenrrolar mais fácil não?
Sobre criar o campo meses pode ser, mas e quando passar de ano? Vai zerar o banco ou misturar os valores?
Eu copiei seu HTML no meu editor para visualizar melhor e encontrei erros. Tag's que se abrem e não fecham. O identificador da TAG name referente ao nome não está entre parênteses, que pode ser esse o principal erro de não estar dando certo.
PS: Fazer as coisas usando Table é ultrapassado. Caso tenha intenção de aprender front-end tbm sugiro ver sobre tabless
Abaixo está o HTML mexido por mim. Fiz um teste aqui e está passando os valores por POST normalmente. Compara com o teu para ver o que mudei e testa se dá certo.
<form action = "recebecaddespesa.php" method ="post">
<table width="60%" border="1" align="center">
<tr>
<td>
<p>Nome: </p>
</td>
<td>
<input type ="text" name = "nome" size="50" > <br />
</td>
</tr>
<tr>
<td>
<p>Tipo: </p>
</td>
<td>
<select name="tipo" size="1">
<option>Moradia</option>
<option>Transporte</option>
<option>Lazer/Informação</option>
<option>Alimentação</option>
<option>Educação</option>
<option>Outros</option>
</select>
</td>
</tr>
<tr>
<td>
<p>Mês</p>
</td>
<td>
<select name="mes" size="1">
<option>Janeiro</option>
<option>Fevereiro</option>
<option>Março</option>
<option>Abril</option>
<option>Maio</option>
<option>Junho</option>
<option>Julho</option>
<option>Agosto</option>
<option>Setembro</option>
<option>Outubro</option>
<option>Novembro</option>
<option>Dezembro</option>
</select>
</td>
<tr>
<td colspan="2">
<p>
<input type=submit value ="Cadastro" align="right" class="imp1">
</p>
</td>
</tr>
</table>
</form>>
Sobre criar o campo meses pode ser, mas e quando passar de ano? Vai zerar o banco ou misturar os valores?
Eu copiei seu HTML no meu editor para visualizar melhor e encontrei erros. Tag's que se abrem e não fecham. O identificador da TAG name referente ao nome não está entre parênteses, que pode ser esse o principal erro de não estar dando certo.
PS: Fazer as coisas usando Table é ultrapassado. Caso tenha intenção de aprender front-end tbm sugiro ver sobre tabless
Abaixo está o HTML mexido por mim. Fiz um teste aqui e está passando os valores por POST normalmente. Compara com o teu para ver o que mudei e testa se dá certo.
<form action = "recebecaddespesa.php" method ="post">
<table width="60%" border="1" align="center">
<tr>
<td>
<p>Nome: </p>
</td>
<td>
<input type ="text" name = "nome" size="50" > <br />
</td>
</tr>
<tr>
<td>
<p>Tipo: </p>
</td>
<td>
<select name="tipo" size="1">
<option>Moradia</option>
<option>Transporte</option>
<option>Lazer/Informação</option>
<option>Alimentação</option>
<option>Educação</option>
<option>Outros</option>
</select>
</td>
</tr>
<tr>
<td>
<p>Mês</p>
</td>
<td>
<select name="mes" size="1">
<option>Janeiro</option>
<option>Fevereiro</option>
<option>Março</option>
<option>Abril</option>
<option>Maio</option>
<option>Junho</option>
<option>Julho</option>
<option>Agosto</option>
<option>Setembro</option>
<option>Outubro</option>
<option>Novembro</option>
<option>Dezembro</option>
</select>
</td>
<tr>
<td colspan="2">
<p>
<input type=submit value ="Cadastro" align="right" class="imp1">
</p>
</td>
</tr>
</table>
</form>
Uhum!Obrigado pela dica! Esse sistema ja antigo meu, so que tinhas coisas que nao tinha feito ainda e queria deixa-lo funcionando normal.
Outra coisa:o POST que eu me referi era este
<?php
include("conectbd.php");
[b]$mes = $_POST['mes'];[/b]
$sql=mysql_query("SELECT * FROM tbdespesa WHERE tipo='".$mes."'") or die (mysql_error());
while ($linha=mysql_fetch_array($sql)){
echo "<tr><td>".$linha['meses']."</td>";
}
?>
O codigo acima é o que faz a consulta, que estou querendo fazer.Dai ele pega o mes ali que ta em negrito daqui:
[...]
<p > Mês </td><td>[b]<select name="mes"[/b] size="1">
<option>Janeiro</option>
<option>Fevereiro</option>
<option>Março</option>
<option>Abril</option>
<option>Maio</option>
<option>Junho</option>
<option>Julho</option>
<option>Agosto</option>
<option>Setembro</option>
<option>Outubro</option>
<option>Novembro</option>
<option>Dezembro</option>
</select>
Deu pra comprender?
A respeito da criação do campo mes:
Eu pensei neste erro tambem, mas como accho que ja citei: este sistema é mais para estudo sabe? Dai essa parte de aperfeiçoamento acho que da pra fazer mais la na frente, primeiro eu queria que desse certo esta bendita consulta ^^
Bom dia!
Informo a voces que nao consegui o meu objetivo no sistema, continuarei tentando com as dicas que foi dado neste post! Obrigado a todos que contribuiram!
Boa tarde,
Eu montei em ajax naquele esquema da modelagem que eu te falei nos primeiros post e veja como ficou - Clique aqui
Os registros que criei para fins de testes estão da seguinte forma no banco:
/applications/core/interface/imageproxy/imageproxy.php?img=http://img600.imageshack.us/img600/4121/registrosbanco.png&key=f222e46a3fb8fe06bc53fe9b6c245f6ad8a42dd48328e3f717c03875bcef2faf" alt="registrosbanco.png" />
Apenas o usuário 1 esta retornando, como se existisse um login prévio para o acesso, pois não criei sessão e setei manualmente mesmo para testar.
Deixei no jeito para você implementar para mais de um usuário caso precise depois.
Precisa arrumar várias coisas, mas enfim já é um começo.
Segue arquivos + modelagem - Clique aqui
Espero que ajude.
Ah cara, obrigado! Vou tentar sim! Vlw
Bom não entendi muito bem, mas acredito que esteja utilizando banco de dados para salvar as informações cert?
mas é só fazer um filtro selecionando as despesas do Mes X...