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
      Tudo bem pessoal?
       
      No código abaixo, estou fazendo uma consulta nas tabelas, banners e banners_referencia
      Meu objetivo é trazer resultados com valores iguais ao nome da cidade declarada na $cidade ou resultados com a referencia Total.
      O problema é que está trazendo todos os resultados. Tenho 10 linhas, 1 com o nome da cidade e duas com o valor Total, então o resultado teria que ser de apenas 3 linhas, mas mostra tudo.
       
      $banner = "SELECT A.*, B.* FROM banners A, banners_referencia B WHERE B.cod_referencia = A.cod_referencia AND A.cidade = '$cidade' OR B.referencia = 'Total' ORDER BY RAND()";
      $banner = mysqli_query($conexao, $banner) or die ("Banner não encontrado");
      while($busca= mysqli_fetch_array($banner)){
          print $busca['cidade'].'<br>';
      };
       
      Alguém consegue me ajudar?
    • Por Rafael_Ferreira
      Não consigo carregar a imagem do captcha do meu formulário. Foi testado com o xampp e easyphp. Também não carregou a imagem de outros captcha. 
       
       
    • Por luiz monteiro
      Olá, tudo bem?
       
      Estou melhorando meu conhecimento em php e mysql e, me deparei com o seguinte. A tabela da base de dados tem um campo do tipo varchar(8) o qual armazena números. Eu não posso alterar o tipo desse campo. O que preciso é fazer um select para retornar o números que contenham zeros a direita ou a esquerda.
      O que tentei até agora
       
      Ex1
      $busca = $conexao->prepare("select campo form tabela where (campo = :campo) ");
      $busca->bindParam('campo', $_REQUEST['campo_form']);
       
      Se a direita da string $_REQUEST['campo_form'] termina ou inicia com zero ou zeros, a busca retorna vazio.
      Inseri dados numéricos, da seguinte maneira para testar: 01234567;  12345670: 12345678: 12340000... entre outros nessa coluna. Todos os valores que não terminam ou não iniciam com zero ou zeros, o select funciona.
       
       
      Ex2
      $busca = $conexao->prepare("select campo form tabela where (campo = 0340000) ");
      Esse número está cadastrado, mas não retorna.
       
      Ex3
      $busca = $conexao->prepare("select campo form tabela where (campo = '02340001' ) ");
      Esse número está cadastrado, mas não retorna.
       
       
      Ex4
      $busca = $conexao->prepare("select campo form tabela where (campo like 2340000) ");
      Esse número está cadastrado, mas não retorna.
       
      Ex5
      $busca = $conexao->prepare("select campo form tabela where (campo like '12340000') ");
      Esse número está cadastrado, mas não retorna.
       
      Ex6
      $busca = $conexao->prepare("select campo form tabela where (campo like '"12340000"' ) ");
      Esse número está cadastrado, mas não retorna.
       
       
      Ex7
      $busca = $conexao->prepare("select campo form tabela where (campo like :campo) ");
      $busca->bindParam('campo', $_REQUEST['campo_form'])
      Não retorna dados.
       
      O  $_REQUEST['campo_form'] é envio via AJAX de um formulário. 
      Usei o gettype para verificar o post, e ele retorna string.
      Fiz uma busca com número 12345678 para verificar o que o select retorna, e também retrona como string.
       
      Esse tipo de varchar foi usado porque os números que serão gravados nesse campo,  terão zeros a direita ou na esquerda. Os tipos number do mysql não gravam zeros, então estou usando esse. O problema é a busca.
      Agradeço desde já.
       
       
    • Por daemon
      Boa tarde,
       
      Eu tenho uma rotina que faz uma leitura do arquivo .xml de vários sites.

      Eu consigo pegar o tópico e a descrição, e mostrar a imagem que esta na pagina do link.
      Para isso utilizo esta função:
      function getPreviewImage($url) { // Obter o conteúdo da página $html = file_get_contents($url); // Criar um novo objeto DOMDocument $doc = new DOMDocument(); @$doc->loadHTML($html); // Procurar pela tag meta og:image $tags = $doc->getElementsByTagName('meta'); foreach ($tags as $tag) { if ($tag->getAttribute('property') == 'og:image') { return $tag->getAttribute('content'); } } // Se não encontrar og:image, procurar pela primeira imagem na página $tags = $doc->getElementsByTagName('img'); if ($tags->length > 0) { return $tags->item(0)->getAttribute('src'); } // Se não encontrar nenhuma imagem, retornar null return null; } // Uso: $url = "https://example.com/article"; $imageUrl = getPreviewImage($url); if ($imageUrl) { echo "<img src='$imageUrl' alt='Preview'>"; } else { echo "Nenhuma imagem encontrada"; }  
      Mas estou com um problema, esta funcão funciona quando coloco em uma pagina de teste.php. Preciso mostrar em uma página inicial diversas fotos de todos os links. (No caso acima só funciona 1).
×

Informação importante

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