Ir para conteúdo

POWERED BY:

Arquivado

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

mekker

Contagem de dias PHP + MYSQL

Recommended Posts

Estava desenvolvendo um sistema em que eu cadastrasse uma quantidade de tempo e ele fosse regredindo. Aí encontrei esse porém não funcionou quando eu coloco a listagem da data no banco de dados. Ex: Faltam 27 dias.



<?php
$hoje = date('Y-m-d');
$vencimento = ('SELECT * FROM usuario WHERE data');
$a = explode("-","$vencimento");
$b = explode("-","$hoje");
$antiga= mktime(0, 0, 0, $b[1], $b[2], $b[0]);
$atual= mktime(0, 0, 0, $a[1], $a[2], $a[0]);
$diferenca= $atual-$antiga;
$dias = floor($diferenca/84600);
if($dias=='15') {
echo "<font color=\"blue\">faltam 15 dias</font>";
} elseif($dias=='10') {
echo "<font color=\"blue\">faltam 10 dias</font>";
} elseif($dias=='5') {
echo "<font color=\"blue\">faltam 5 dias</font>";
} else {
echo "faltam $dias";
}
?>

Alguém ajuda? Será que dá pra fazer por esse mesmo?


Compartilhar este post


Link para o post
Compartilhar em outros sites

Você pode buscar no banco, claro. Mas precisa executar a consulta. Seu script só cria a string da SQL.

Veja: http://www.ultimatephp.com.br/como-usar-pdo-com-banco-de-dados-mysql/

 

E outra: se a intenção é pegar somente registros com intervalo igual a 15 dias, pode fazer isso com as Funções de Data e Hora do próprio SGBD, na própria consulta

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que você não entendeu. Então se eu cadastro uma data "24/09/2016" ou cadastro um número "50" eu quero que ele diminua com o passar dos dias. Cadastrar eu já cadastrei a questão é só como vou obter esse resultado de "Faltam 06 dias para". Então se eu jogar:

 

 

<? "$variavel = 'SELECT *, TIMESTAMPDIFF(DAY, NOW(), LinhaComAdata) AS dias_restantes FROM MinhaTabela'; ?>

 

Como daria procedimento? E é isso mesmo?

 

Você pode buscar no banco, claro. Mas precisa executar a consulta. Seu script só cria a string da SQL.

Veja: http://www.ultimatephp.com.br/como-usar-pdo-com-banco-de-dados-mysql/

 

E outra: se a intenção é pegar somente registros com intervalo igual a 15 dias, pode fazer isso com as Funções de Data e Hora do próprio SGBD, na própria consulta

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você quer que o 50 vire 49, 48, 47 etc? Pra quê? É melhor salvar as datas de início e fim, que são fixas, que ficar rodando UPDATE todo dia em diversos registros

 

Assim basta selecionar as duas datas e usar DateTime, ou, ainda melhor, calcular a diferença na própria consulta SQL

Compartilhar este post


Link para o post
Compartilhar em outros sites

Verdade caro Beraldo, mas como eu calculo a diferença na consulta sql, aquele tuto que postou anteriormente não saiu certo! Você poderia postar mais ou menos como fica só pra eu testar aqui tbm e quem tiver acompanhando o tópico ficar ligado?

 

Você quer que o 50 vire 49, 48, 47 etc? Pra quê? É melhor salvar as datas de início e fim, que são fixas, que ficar rodando UPDATE todo dia em diversos registros

 

Assim basta selecionar as duas datas e usar DateTime, ou, ainda melhor, calcular a diferença na própria consulta SQL

Compartilhar este post


Link para o post
Compartilhar em outros sites


SELECT DATEDIFF(coluna_com_a_data, curdate())

as 'quantosdiasfaltam' from tabela;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Por favor, verifiquem!!

 

<?php
 
$query = "SELECT DATEDIFF(data, curdate())
as 'dias restantes' from usuario";
 
if(is_array($estoque = returnArray($query))){
foreach ($estoque as $k => $v){
if($estoque[$k]['dias restantes']>0){
$estoque[$k]['msg'] ='Faltam' .$estoque[$k]['dias restantes'].'dias';
}elseif($estoque[$k]['dias restantes']<0){
$estoque[$k]['msg']='Venceu a'.-$estoque[$k]['dias restantes'].' dias';
}else{
$estoque[$k]['msg'] = 'Vence hoje chefe!';
}
}
geraLista($estoque); 
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites
Ele exibe a escrita "SELECT DATEDIFF(data, curdate())

AS dias restantes FROM usuario" rsrsrss.

Por favor me ajudem a identificar o erro ou me mostrem algum que apareça "Faltam 9 dias" com data cadastrada no banco de dados mysql.



<?php

$query = 'SELECT DATEDIFF(data, curdate())
AS dias restantes FROM usuario';

if(is_array($estoque = ($query))){
foreach ($estoque as $k => $v){
if($estoque[$k]['dias restantes']>0){
$estoque[$k]['msg'] ='Faltam' .$estoque[$k]['dias restantes'].'dias';
}elseif($estoque[$k]['dias restantes']<0){
$estoque[$k]['msg']='Venceu a'.-$estoque[$k]['dias restantes'].' dias';
}else{
$estoque[$k]['msg'] = 'Vence hoje chefe!';
}
}
}
echo($estoque);

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isto não faz sentido algum:

 

 

if(is_array($estoque = ($query))){

Veja exemplos de is_array() aqui

 

 

Já aqui você apenas cria uma string SQL, sem executá-la:

 

$query = 'SELECT DATEDIFF(data, curdate())

 

 

Primeiro entenda como executar consultas em bancos de dados. Leia sobre Sistemas de Cadastro, que tudo ficará mais claro.

Veja:

http://forum.imasters.com.br/topic/192408-sistema-de-cadastro-em-phpmysql/

http://www.ultimatephp.com.br/como-usar-pdo-com-banco-de-dados-mysql/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então Beraldo, eu li e fiz mais ou menos isso aqui, só que dá erro na conexão e não consigo identificar, tem como me ajudar por favor?

 

 

<?      
$sql = "SELECT *, DATEDIFF(BancoDeDadosComAData, CURDATE()) dias_para_vencimento FROM TabelaUsada
    WHERE status2 <> 'Fechado'
    AND dias_para_vencimento >= 0
    ORDER BY dias_para_vencimento";
$resultado = mysql_query($sql) or die ("Erro na consulta");
while ($linha = mysql_fetch_assoc($resultado)) {
    $dias = $linha['dias_para_vencimento'];
    echo $dias . '<br>';
} ?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Use a função mysql_error(), como mostrado neste tópico

 

 

$resultado = mysql_query($sql) or die ("Erro na consulta: " . mysql_error() );

 

 

PS: funções mysql_* estão obsoletas desde o PHP 5.5 e serão removidas do PHP em breve. Prefira usar MySQLi ou PDO. Veja mais aqui: http://www.ultimatephp.com.br/php-por-que-nao-utilizar-funcoes-mysql

Compartilhar este post


Link para o post
Compartilhar em outros sites

Funcionou ok!! Porém está exibindo a lista com todas as datas ao invés de aparecer somente a do usuário especifico que fez o logon. Você pode me ajudar nesse detalhe?

<? 
$sql = "SELECT *, DATEDIFF(data, CURDATE()) AS 'dias_para_vencimento' FROM usuario
    WHERE data <> 'login'";
$resultado = mysql_query("$sql") or die( mysql_error() );
 
while ($linha = mysql_fetch_assoc($resultado)) {
    $dias1 = $linha['dias_para_vencimento'] ;
echo "faltam $dias1 dias";
} ?>

 

Use a função mysql_error(), como mostrado neste tópico

$resultado = mysql_query($sql) or die ("Erro na consulta: " . mysql_error() );

PS: funções mysql_* estão obsoletas desde o PHP 5.5 e serão removidas do PHP em breve. Prefira usar MySQLi ou PDO. Veja mais aqui: http://www.ultimatephp.com.br/php-por-que-nao-utilizar-funcoes-mysql

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por ILR master
      Fala galera, tudo certo?
       
      Seguinte: No servidor A estou tentando fazer uma consulta com o servidor B, mas está dando erro.
      Estou usando o mesmo código de conexão do servidor B que funciona perfeitamente, mas no servidor A, dá erro.
      Segue código:
       
      $host = 'servidor B';
      $user = 'user';
      $pass = '********';
      $db   = 'banco';
       
      // conexão e seleção do banco de dados
      $conexao = mysqlI_connect($host, $user, $pass, $db);
      mysqlI_set_charset($conexao,"utf8");
      //print "Conexão rodando e OK!"; 
      //mysqlI_close($conexao);
       
      Alguém pode me ajudar?
    • Por violin101
      Caros amigos, saudações.
       
      Por favor, poderiam me ajudar.

      Estou com a seguinte dúvida:
      --> como faço para para implementar o input código do produto, para quando o usuário digitar o ID o sistema espera de 1s a 2s, sem ter que pressionar a tecla ENTER.

      exemplo:
      código   ----   descrição
           1       -----   produto_A
       
      Grato,
       
      Cesar
    • Por violin101
      Caros amigos, saudações.
       
      Humildemente peço desculpa por postar uma dúvida que tenho.

      Preciso salvar no MySql, os seguinte Registro:

      1 - Principal
      ====> minha dúvida começa aqui
      ==========> como faço para o Sistema Contar Automaticamente o que estiver despois do 1.____?
      1.01 - Matriz
      1.01.0001 - Estoque
      1.01.0002 - Oficina
      etc

      2 - Secundário
      2.01 - Loja_1
      2.01.0001 - Caixa
      2.01.0002 - Recepção
      etc
       
      Resumindo seria como se fosse um Cadastro de PLANO de CONTAS CONTÁBEIL.

      Grato,


      Cesar









       
    • Por violin101
      Caros amigos, saudações.

      Por favor, me perdoa em recorrer a orientação dos amigos.

      Preciso fazer um Relatório onde o usuário pode Gerar uma Lista com prazo para vencimento de: 15 / 20/ 30 dias da data atual.

      Tem como montar uma SQL para o sistema fazer uma busca no MySql por período ou dias próximo ao vencimento ?

      Tentei fazer assim, mas o SQL me traz tudo:
      $query = "SELECT faturamento.*, DATE_ADD(faturamento.dataVencimento, INTERVAL 30 DAY), fornecedor.* FROM faturamento INNER JOIN fornecedor ON fornecedor.idfornecedor = faturamento.id_fornecedor WHERE faturamento.statusFatur = 1 ORDER BY faturamento.idFaturamento $ordenar ";  
      Grato,
       
      Cesar
       
       
       
       
    • Por violin101
      Caros amigos, saudações
       
      Por favor, me perdoa em recorrer a orientação dos amigos, tenho uma dúvida.
       
      Gostaria de uma rotina onde o Sistema possa acusar para o usuário antes dos 30 dias, grifar na Tabela o aviso de vencimento próximo, por exemplo:
       
      Data Atual: 15/11/2024
                                           Vencimento
      Fornecedor.....................Data.....................Valor
      Fornecedor_1...........01/12/2024..........R$ 120,00 <== grifar a linha de Laranja
      Fornecedor_1...........01/01/2025..........R$ 130,00
      Fornecedor_2...........15/12/2024..........R$ 200,00 <== grifar a linha de Amarelo
      Fornecedor_2...........15/01/2025..........R$ 230,00
      Fornecedor_3...........20/12/2024..........R$ 150,00
       
      Alguém tem alguma dica ou leitura sobre este assunto ?

      Grato,
       
      Cesar
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.