Jump to content
Fórum Script Brasil
  • 0

Mostrar Aniversariantes Do Mês Usando Mysql


Beraldo
 Share

Question

Script postado por: Fabyo

Mostrar Aniversariantes do Mês usando MySQL

<?php

//exemplo mostra aniversariante do mês

include "conecta.php";

$query = "SELECT nome, aniversario FROM festa WHERE MONTH(aniversario) = MOD(MONTH(CURDATE()), 12)";
$re = mysql_query($query);
$exe = mysql_query($query, $cn);

while($l = mysql_fetch_array($exe)) {
$nome = $l['nome'];
$aniversario = $l['aniversario'];

echo "Aniversariante do mês $nome<br>";

}
?>

Link to comment
Share on other sites

8 answers to this question

Recommended Posts

  • 0
Script postado por: Fabyo

Mostrar Aniversariantes do Mês usando MySQL

<?php

//exemplo mostra aniversariante do mês

include "conecta.php";

$query = "SELECT nome, aniversario FROM festa WHERE MONTH(aniversario) = MOD(MONTH(CURDATE()), 12)";
$re = mysql_query($query);
$exe = mysql_query($query, $cn);

while($l = mysql_fetch_array($exe)) {
$nome = $l['nome'];
$aniversario = $l['aniversario'];

echo "Aniversariante do mês $nome<br>";

}
?>

Olá amigo...

Sou novo por aqui e estou com um probleminha e preciso de ajuda. Tenho essa tabela abaixo em um Banco de Dados.

CREATE TABLE `cadpro` (

`id` INTEGER NOT NULL AUTO_INCREMENT,

`nome` VARCHAR( 255 ) NOT NULL ,

`email` VARCHAR( 60 ) NOT NULL ,

`rua` VARCHAR( 255 ) NOT NULL ,

`bairro` VARCHAR( 255 ) NOT NULL ,

`cidade` VARCHAR( 255 ) NOT NULL ,

`estado` VARCHAR( 5 ) NOT NULL ,

`cep` VARCHAR( 30 ) NOT NULL ,

`telfixo` VARCHAR( 15 ) NOT NULL ,

`telmovel` VARCHAR( 15 ) NOT NULL ,

`dia` TINYTEXT NOT NULL,

`mês` TINYTEXT NOT NULL,

PRIMARY KEY (`Id`)

) TYPE=MyISAM;

Pergunto: [como é possível desenvolver algum script que selecione somente os aniversariantes do dia e envie mensagem de parabéns pra todos?]

Se puder ajudar ficarei muito grato.

Obrigado

WErber

Link to comment
Share on other sites

  • 0

Antes de tudo, aconselho você a usar um campo do tipo DATE, que armazena a data no formato YYYY-MM-DD, em vez de dois campos de texto: um para dia e outro, para mês.

Tendo um campo do tipo DATE, pode-se usar as funções de data do MySQL. No seu caso isso seria bem simples:

Select * From tabela Where DAY(nascimento) = DAY(CURDATE()) AND MONTH(nascimento) = MONTH(CURDATE());

"nascimento" é um campo do tipo DATE.

Mais detalhes:

http://dev.mysql.com/doc/refman/5.1/en/dat...-functions.html

http://www.php.net/manual/pt_BR/ref.datetime.php

Abraços,

Beraldo

Link to comment
Share on other sites

  • 0

beleza moçada, sei que o tópico não recebe mensagem a mais de um ano, porém, como eu cheguei aqui no Fórum hoje, e comecei a tentar aprender PHP a menos de um mês, e uma das melhores coisas que aconteceu fui ter descoberto esse Fórum, pena não ter descoberto antes...

bem minha dúvida é a seguinte, tentando aprender PHP sozinho, achei que a melhor forma de aprender era criando um site, e tive a idéia de criar esse site para cadastrar os membros da família, e como não poderia deixar de ser teria que ter uma página para exibir os aniversariantes do dia, aí que meu problema surge, eu quero que os dados que apareçam na página de aniversariantes do dia, sejam exatamente os mesmos dados que são exibidos na página que contém todos os membros da família.

bom vou postar o código abaixo, aí talvez fique mais fácil de alguém entender e se for possível me ajudar:

<?php

$conexao = mysql_connect("localhost","root","");
$banco = mysql_select_db("familia");

$sql = mysql_query("SELECT * FROM cadastro Where DAY(data_nascimento) = DAY(CURDATE()) AND MONTH(data_nascimento) = MONTH(CURDATE())");

while($linha = mysql_fetch_array($sql)) {
$nome = $linha['nome'];
$datanascimento = implode("/", array_reverse(explode("-", $linha['data_nascimento'])));;
$sexo = $linha['sexo'] == "M" ? "Masculino" : "Feminino";
$parentesco = $linha['parentesco'];
$estadocivil = $linha['estadocivil'];
$naturalidade = $linha['naturalidade'];
$cidade = $linha['cidade'];
$estado = $linha['estado'];
$foto = $linha['foto'];

echo "<img src=\"" . $foto . "\" width=300 height=200 border=0><br>";
echo "<strong>Nome Completo: </strong>" ."$nome<br>";
echo "<strong>Data de Nascimento: </strong>" ."$datanascimento<br>";

/*
function calcula_idade( $data_nasc ){
$data_nasc = explode("/", $data_nasc);
$data = date("d/m/Y");
$data = explode("/", $data);
$anos = $data[2] - $data_nasc[2];
if ( $data_nasc[1] >= $data[1] ){
if ( $data_nasc[0] <= $data[0] ){
return $anos; break;
}else{
return $anos-1;
break;
} 
}else{
return $anos;
} 
} 
$anos = calcula_idade("$datanascimento");

echo "<strong>Idade: </strong>" . "$anos anos<br>";
*/

echo "<strong>Sexo: </strong>" ."$sexo<br>";
echo "<strong>Grau de Parentesco: </strong>" ."$parentesco<br>";
echo "<strong>Estado Civil: </strong>" ."$estadocivil<br>";
echo "<strong>Naturalidade: </strong>" ."$naturalidade<br>";
echo "<strong>Cidade: </strong>" ."$cidade<br>";
echo "<strong>Estado: </strong>" ."$estado<br>";
echo "<br><br>";

}
?>
porque eu coloquei como /**/ na função calcula_idade e na linha que exibe a idade... pois bem é exatamente aí que está o meu problema, nos dias que tem apenas um aniversariante a página é exibida sem problema algum, porém quando tem mais de um aniversariante naquele dia, aí retorna esse erro: Fatal error: Cannot redeclare calcula_idade() (previously declared in exatamente na linha 23, que é onde é feita a função para calcular a idade (qualquer semelhança dessa função com a que está postada aqui no Fórum, não é mera coincidência, rsrs). como é de se notar eu retirei essas duas linhas do código do script, porque com essas duas linhas ele não funcionava, e a única maneira que encontrei dele funcionar foi retirando as linhas...
$re = mysql_query($query);
$exe = mysql_query($query, $cn);

então, apesar de estar sendo autodidata em PHP, e ter começado a me interessar por essa Linguagem de Programação a menos de um mês, o que eu pude perceber é que o problema está por causa da função estar dentro do while... me corrijam se eu estiver errado...

beleza pessoal... será que alguém pode me dar uma luz... e uma grande ajuda

desde já fico grato!!!

problema resolvido... recebi uma dica em outro Fórum para tirar a função de dentro do while, só chamar a função dentro do while, e funcionou 100%

Edited by Pedro Sézar
Link to comment
Share on other sites

  • 0

Muito bom o código, mas não consigo ordená-lo pelo dia de aniversário. Quando ordeno pela data de aniversário, os dias não são ordenados, logicamente. Tentei a opção "...order by day(campo)..." mas não deu certo.

beleza moçada, sei que o tópico não recebe mensagem a mais de um ano, porém, como eu cheguei aqui no Fórum hoje, e comecei a tentar aprender PHP a menos de um mês, e uma das melhores coisas que aconteceu fui ter descoberto esse Fórum, pena não ter descoberto antes...

bem minha dúvida é a seguinte, tentando aprender PHP sozinho, achei que a melhor forma de aprender era criando um site, e tive a idéia de criar esse site para cadastrar os membros da família, e como não poderia deixar de ser teria que ter uma página para exibir os aniversariantes do dia, aí que meu problema surge, eu quero que os dados que apareçam na página de aniversariantes do dia, sejam exatamente os mesmos dados que são exibidos na página que contém todos os membros da família.

bom vou postar o código abaixo, aí talvez fique mais fácil de alguém entender e se for possível me ajudar:

<?php

$conexao = mysql_connect("localhost","root","");
$banco = mysql_select_db("familia");

$sql = mysql_query("SELECT * FROM cadastro Where DAY(data_nascimento) = DAY(CURDATE()) AND MONTH(data_nascimento) = MONTH(CURDATE())");

while($linha = mysql_fetch_array($sql)) {
$nome = $linha['nome'];
$datanascimento = implode("/", array_reverse(explode("-", $linha['data_nascimento'])));;
$sexo = $linha['sexo'] == "M" ? "Masculino" : "Feminino";
$parentesco = $linha['parentesco'];
$estadocivil = $linha['estadocivil'];
$naturalidade = $linha['naturalidade'];
$cidade = $linha['cidade'];
$estado = $linha['estado'];
$foto = $linha['foto'];

echo "<img src=\"" . $foto . "\" width=300 height=200 border=0><br>";
echo "<strong>Nome Completo: </strong>" ."$nome<br>";
echo "<strong>Data de Nascimento: </strong>" ."$datanascimento<br>";

/*
function calcula_idade( $data_nasc ){
$data_nasc = explode("/", $data_nasc);
$data = date("d/m/Y");
$data = explode("/", $data);
$anos = $data[2] - $data_nasc[2];
if ( $data_nasc[1] >= $data[1] ){
if ( $data_nasc[0] <= $data[0] ){
return $anos; break;
}else{
return $anos-1;
break;
} 
}else{
return $anos;
} 
} 
$anos = calcula_idade("$datanascimento");

echo "<strong>Idade: </strong>" . "$anos anos<br>";
*/

echo "<strong>Sexo: </strong>" ."$sexo<br>";
echo "<strong>Grau de Parentesco: </strong>" ."$parentesco<br>";
echo "<strong>Estado Civil: </strong>" ."$estadocivil<br>";
echo "<strong>Naturalidade: </strong>" ."$naturalidade<br>";
echo "<strong>Cidade: </strong>" ."$cidade<br>";
echo "<strong>Estado: </strong>" ."$estado<br>";
echo "<br><br>";

}
?>
porque eu coloquei como /**/ na função calcula_idade e na linha que exibe a idade... pois bem é exatamente aí que está o meu problema, nos dias que tem apenas um aniversariante a página é exibida sem problema algum, porém quando tem mais de um aniversariante naquele dia, aí retorna esse erro: Fatal error: Cannot redeclare calcula_idade() (previously declared in exatamente na linha 23, que é onde é feita a função para calcular a idade (qualquer semelhança dessa função com a que está postada aqui no Fórum, não é mera coincidência, rsrs). como é de se notar eu retirei essas duas linhas do código do script, porque com essas duas linhas ele não funcionava, e a única maneira que encontrei dele funcionar foi retirando as linhas...
$re = mysql_query($query);
$exe = mysql_query($query, $cn);

então, apesar de estar sendo autodidata em PHP, e ter começado a me interessar por essa Linguagem de Programação a menos de um mês, o que eu pude perceber é que o problema está por causa da função estar dentro do while... me corrijam se eu estiver errado...

beleza pessoal... será que alguém pode me dar uma luz... e uma grande ajuda

desde já fico grato!!!

problema resolvido... recebi uma dica em outro Fórum para tirar a função de dentro do while, só chamar a função dentro do while, e funcionou 100%

Muito bom o código. Funcionou 100%, mas não consigo ordená-lo pelo dia de aniversário. Quando ordeno pela data de aniversário, os dias não são ordenados, logicamente. Tentei a opção "...order by day(campo)..." mas não deu certo.

Desde já Agradeço a ajuda.

Link to comment
Share on other sites

  • 0

Bom dia caros amigos!

Estou com dificuldades em um script que estou desenvolvendo.

Trata-se de uma lista de aniversariantes do mês. Já consegui selecionar os aniversariantes do mês, mas não consigo ordená-los pelo dia de aniversário, pois gostaria de exibí-los pelo dia:

01 - Fulano

02 - beltrano

03 - Ciclano....

Utilizei o seguinte código:("Select * From TABELA Where status ='Sim' and MONTH(CAMPO_data_nasc) = MONTH(CURDATE()) order by day(CAMPO_DATA_NASC)" );

Caso alguém possa me ajudar, desde já agradeço a compreensão.

Edielson

Link to comment
Share on other sites

  • 0

Edielson

esta muito incompleta tua funcao de calcular idade

usa essa

/**
 *
 * @param <type> $date = data do aniversario da 
 * pessoa tem que vir no formato Y-m-d
 * 
 * @return <type> 
 */
function calcularIdade($date){
    $dataAtual = explode("-", date("Y-m-d"));
    $anoAtual = $dataAtual[0];
    $mesAtual = $dataAtual[1];
    $diaAtual = $dataAtual[2];

    $data = explode("-" , $date);
    $ano = $data[0];
    $mes = $data[1];
    $dia = $data[2];

    if($anoAtual == $ano){
        if($mesAtual == $mes){
            if($diaAtual == $dia)
                $idade = "Esta pessoa nasceu hoje.";
            if($diaAtual > $dia)
                $idade = "Esta pessoa possuí ".$diaAtual - $dia." dias de vida.";
            else if($diaAtual < $dia)
                $idade = "Esta pessoa ainda não nasceu.";
        } else if($mesAtual > $mes) {
            if($diaAtual == $dia)                
                    $idade = ($mesAtual - $mes) + 1 . " meses de vida.";
            else if($diaAtual < $dia)
                if($mesAtual - $mes == 1)
                    $idade = $mesAtual - $mes . " mês de vida.";
                else
                    $idade = $mesAtual - $mes . " mêses de vida.";
            else if($diaAtual > $dia)
                    $idade = ($mesAtual - $mes) + 1 . " mêses de vida.";
        } else
            $idade = "Esta pessoa ainda não nasceu.";
    } else if($anoAtual > $ano){
        if($mesAtual > $mes)
            $idade = ($anoAtual - $ano) + 1;
        else if($mesAtual == $mes)
                if($diaAtual > $dia || $diaAtual == $dia)
                    $idade = ($anoAtual - $ano) + 1 . " anos";
                else
                    if($anoAtual - $ano == 1)
                        $idade = ($anoAtual - $ano) . " ano";
                    else
                        $idade = ($anoAtual - $ano) . " anos";
        else
            if($anoAtual - $ano == 1)
                $idade = $anoAtual - $ano . " ano";
            else
                $idade = $anoAtual - $ano . " anos";
    } else
        $idade = "Esta pessoa ainda não nasceu.";

return $idade;
}

Link to comment
Share on other sites

  • 0

Muito bom esse select testado e aprovado, se puder dar essa força como faço pra alterar pra pegar os aniversariantes do dia

Muito bom esse select testado e aprovado, se puder dar essa força como faço pra alterar pra pegar os aniversariantes do dia

Desculpe não tinha visto o post anterior com atenção, já foi mostrado, grato..

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share



  • Forum Statistics

    • Total Topics
      151k
    • Total Posts
      649k
×
×
  • Create New...