Fóruns sobre PHP, JavaScript, HTML, MySQLi, jQuery, Banco de Dados, CSS


Moderador: web

 
Mais de 25 postagens
Mais de 25 postagens
Tópico Autor
Mensagens: 27
Sexo: Masculino
Localização: SC/Caçador/Brasil
Contato:

Problemas para inserir idade no banco de dados

17-08-2009 13:17

Olá, estou utilizando este comando para inserir os dados no banco:

Cadastrar_db.php

<? $nome             = $_POST[nome]; $sobrenome        = $_POST["sobrenome"]; $sexo             = $_POST["sexo"]; $data_nasc        = "$_POST[ano]-$_POST[mes]-$_POST[dia]"; $cidade_nasc      = $_POST["cidade_nasc"]; $estado_nasc      = $_POST["estado_nasc"]; $data_falec       = "$_POST[ano2]-$_POST[mes2]-$_POST[dia2]"; $cidade_falec     = $_POST["cidade_falec"]; $estado_falec     = $_POST["estado_falec"]; $nota             = $_POST["nota"]; $idade = floor((strtotime($data_falec) - strtotime($data_nasc))/(60*60*24*365.2425)); $sql = mysql_query("INSERT INTO obitos VALUES ('','$nome','$sobrenome','$sexo','$data_nasc','$cidade_nasc', '$estado_nasc','$data_falec','$cidade_falec','$estado_falec','$nota','$idade')"); ?> <h3>Cadastro de Óbito efetuado com sucesso!</h3> <br> <meta http-equiv="refresh" content="2;URL=?pg=../estrutura/obituario/listar.php">

mas ao inserir uma pessoa que nasceu em 14/08/1900 e faleceu em 15/08/2009 registra no banco 39 anos?

onde esta o erro?

Jah me disseram para utilizar isso:

$dn = "1900-08-14";  $dm = "2009-08-15";    $dtm = new Datetime( $dm );  $anos = $dtm->diff( new Datetime( $dn ) )->y;    var_dump( $anos ); //int(109)  

mas não estou sabendo como utilizar isso para inserir a idade correta.
Grato pela atenção.
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17666
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Problemas para inserir idade no banco de dados

17-08-2009 13:25

Essa seção é para postar scripts pronto, não para tirar dúvidas.

MOVIDO: de Laboratório de scripts para MySQL

Porque não faz o cálculo direto

echo $data_falec-$data_nasc; 

0
A melhor hospedagem para o seu site HostGator!
 
Mais de 25 postagens
Mais de 25 postagens
Tópico Autor
Mensagens: 27
Sexo: Masculino
Localização: SC/Caçador/Brasil
Contato:

Problemas para inserir idade no banco de dados

17-08-2009 13:58

deveria ficar assim então?

echo "$dados[data_falec]-$dados[data_nasc])";  

0
 
Mais de 25 postagens
Mais de 25 postagens
Tópico Autor
Mensagens: 27
Sexo: Masculino
Localização: SC/Caçador/Brasil
Contato:

Problemas para inserir idade no banco de dados

17-08-2009 14:28

a página que exibe os resultados é esta:

obitos.php

<? $pg=$_GET[pg]; $page=$_GET[page]; $dia = ""; $mes = /*$_GET[mes];*/ date("m"); $ano = ""; $busca = "SELECT * FROM obitos WHERE data_falec LIKE '" . date(Y) . "-" . date(m). "%' "; // termina a função para buscar a categoria $total_reg = "$qts_ultimos"; if(!$page){ $page = "1"; } $inicio = $page-1; $inicio = $inicio*$total_reg; $limite = mysql_query("$busca LIMIT $inicio,$total_reg"); $todos = mysql_query("$busca"); $tr = mysql_num_rows($todos); $tp = ceil($tr / $total_reg); if(mysql_num_rows($todos)>0){  //  if (($todos%2)==0) { $bgcolor="#FFFFFF"; } else { $bgcolor="#C0C0C0"; }  ?> <table width="600" align="center" cellpadding="0" cellspacing="0">   <tr>     <td align="center"><strong>Foram        encontrados <? echo "<b><font color=$coronmouse>$tr</font></b>";?> registros!<br />       <br />       Exibindo registros de <font color="<? echo $coronmouse?>"><? echo $inicio+1?></font> a <font color="<? echo $coronmouse?>">         <? if($tp == $page){ echo $tr; } else { echo $inicio+$total_reg;}?>       </font></strong></td>   </tr>   <tr>     <td height="5" colspan="2"></td>   </tr>   <tr>     <td height="1" colspan="2" background="images/layout/barrinha_divisao_horizontal.gif"></td>   </tr>   <tr>     <td height="5" colspan="2"></td>   </tr> </table> <table width="600" border="0" align="center" cellpadding="0" cellspacing="0">   <tr align="center">     <td colspan="2" bgcolor="#99ccff"><b>Nome</b></td>     <td bgcolor="#99ccff"><img src="images/estrela.gif" width="20" height="18" /></td>     <td colspan="2" bgcolor="#C0C0C0"><table width="100%" border="0" cellspacing="0" cellpadding="0">       <tr>         <td width="45%" bgcolor="#99ccff"><div align="center"><strong><img src="images/cruz.gif" width="20" height="18" /></strong></div></td>         <td width="28%" bgcolor="#99ccff"><div align="center"><strong>Local</strong></div></td>         <td width="27%" bgcolor="#99ccff"><div align="center"><strong>Idade</strong></div></td>       </tr>     </table></td>   </tr>   <tr>     <td height="5" colspan="5"></td>   </tr>   <? while ($dados=mysql_fetch_array($limite)) {?>   <tr align="center">     <td width="89" align="left"><div align="left"><b>       <?=$dados[nome]?>     </b> </div></td>     <td width="89" align="left"><div align="right"><b>       <?       if($dados[sexo] == 'M') {  echo "<img src=/sistema/images/marte.png>";  } else {  echo "<img src=/sistema/images/venus.png>";  } ?>     </b></div></td>     <td width="158" align="center"><table width="100%" border="0" cellspacing="0" cellpadding="0">       <tr>         <td width="12%">&nbsp;</td>         <td width="88%"><div align="center"><strong>           <? $data=explode("-", $dados[data_nasc]); echo "$data[2]/$data[1]/$data[0]";?>         </strong></div></td>       </tr>     </table></td>     <td width="316" align="center"><table width="98%" height="23" border="0" cellpadding="0" cellspacing="0">       <tr>         <td width="51%"><div align="center">           <table width="100%" border="0" cellspacing="0" cellpadding="0">             <tr>               <td width="14%">&nbsp;</td>               <td width="86%"><div align="center"><strong>               <? $data=explode("-", $dados[data_falec]); echo "$data[2]/$data[1]/$data[0]";?>               </strong></div></td>             </tr>           </table>         </div></td>         <td width="49%"><div align="center"><b><? echo "$dados[cidade_falec]";?></b></div></td>       </tr>     </table>     <a href=""></a></td>     <td width="74" align="center"><b>       <?=$dados[idade] ?>     </b><strong>Anos</strong></td>   </tr>   <tr>     <td height="5" colspan="7" background="images/layout/barrinha_divisao_horizontal.gif"></td>   </tr>   <tr>     <td height="1" colspan="7" background="../images/layout/barrinha_divisao_horizontal.gif"></td>   </tr>   <tr>     <td height="5" colspan="7"></td>   </tr>   <? }?>   <tr>     <td colspan="7"><table border="0" align="center" cellpadding="0" cellspacing="0">       <tr>         <td width="100" align="right" valign="top"><? if($page > 1){ $anterior = $page -1; $url = "?pg=$pg&page=$anterior"; echo "<a href='$url'>&laquo; Anterior</a>&nbsp;|"; } else { echo "<font color='$corcelula2'>&laquo; Anterior</font>&nbsp;|"; } ?>        </td>         <td align="center"><?  for($x=1; $x<=$tp; $x++){ $url = "?pg=$pg&page=$x";   if ($x==$page) {   echo "<font color='$coronmouse'><b>$x</b></font>|";   } else {   echo "<a href='$url'>$x</a>|";   } }  ?>        </td>         <td width="100" align="left" valign="top"><? if($tp > $page){ $proxima = $page +1; $url = "?pg=$pg&page=$proxima"; echo "&nbsp;<a href='$url'>Pr&oacute;xima &raquo;</a>"; } else { echo "&nbsp;<font color='$corcelula2'>Pr&oacute;xima &raquo;</font>"; } ?>        </td>       </tr>     </table></td>   </tr> </table> <br /> <br /> <? } else {?> <br /> <table width="100%" cellpadding="0" cellspacing="0">   <tr>     <td align="center" valign="bottom"><br />         <br />         <br />         <br />         <font color="#006600"><strong>Neste m&ecirc;s n&atilde;o houve nenhum falecimento!</strong></font><br />       <br />       <br />     </td>   </tr> </table> <? } ?> <br>

0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17666
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Problemas para inserir idade no banco de dados

17-08-2009 15:58

Eu usei a linha que indiquei, e foi retornado 109 anos, ou seja, a diferença entre as datas.
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 25 postagens
Mais de 25 postagens
Tópico Autor
Mensagens: 27
Sexo: Masculino
Localização: SC/Caçador/Brasil
Contato:

Problemas para inserir idade no banco de dados

17-08-2009 16:05

Olá, o colega João Batista Neto me passou as seguintes informações:

se estivesse utilizando PHP 5.3 seria assim:

$nome             = $_POST[nome];  $sobrenome        = $_POST["sobrenome"];  $sexo             = $_POST["sexo"];  $data_nasc        = "$_POST[ano]-$_POST[mes]-$_POST[dia]";  $cidade_nasc      = $_POST["cidade_nasc"];  $estado_nasc      = $_POST["estado_nasc"];  $data_falec       = "$_POST[ano2]-$_POST[mes2]-$_POST[dia2]";  $cidade_falec     = $_POST["cidade_falec"];  $estado_falec     = $_POST["estado_falec"];  $nota             = $_POST["nota"];  //A linha abaixo removemos  //$idade = floor((strtotime($data_falec) - strtotime($data_nasc))/(60*60*24*365.2425));  //E trocamos pelas duas abaixo:  $dtm = new Datetime( $data_nasc );  $idade = $dtm->diff( new Datetime( $data_falec ) )->y;

Porém como não estou utilizando ele precisaria uma função para calcular isso desta forma:

/**    * Calcula a diferença em anos entre duas datas    * @param string $start A data inicial no formato yyyy-mm-dd    * @param string $end A data final no formato yyyy-mm-dd    * @return integer O número de anos    */   function date_diff( $start , $end ){       $mtc = array();       $dts = 0;       $dte = 0;       $ret = 0;          if ( preg_match( "/(\d{4})(?:\\/|-){1}(\\d{2})(?:\\/|-){1}(\\d{2})/" , $start , $mtc ) ){           $dts = gregoriantojd( $mtc[ 2 ] , $mtc[ 3 ] , $mtc[ 1 ] );       }          if ( preg_match( "/(\d{4})(?:\\/|-){1}(\\d{2})(?:\\/|-){1}(\\d{2})/" , $end , $mtc ) ){           $dte = gregoriantojd( $mtc[ 2 ] , $mtc[ 3 ] , $mtc[ 1 ] );       }          return( floor( ( $dte - $dts ) / 365 ) );   }    $nome             = $_POST[nome];   $sobrenome        = $_POST["sobrenome"];   $sexo             = $_POST["sexo"];   $data_nasc        = "$_POST[ano]-$_POST[mes]-$_POST[dia]";   $cidade_nasc      = $_POST["cidade_nasc"];   $estado_nasc      = $_POST["estado_nasc"];   $data_falec       = "$_POST[ano2]-$_POST[mes2]-$_POST[dia2]";   $cidade_falec     = $_POST["cidade_falec"];   $estado_falec     = $_POST["estado_falec"];   $nota             = $_POST["nota"];   //A linha abaixo removemos   //$idade = floor((strtotime($data_falec) - strtotime($data_nasc))/(60*60*24*365.2425));   //E trocamos pela linha abaixo:   $idade = date_diff( $data_nasc , $data_falec  ); 

Pois segundo ele:
O problema é que as funções normais do PHP trabalham com data a partir de 1 de janeiro de 1970, para conseguir fazer cálculos com datas anteriores a 1970 você precisa primeiro converter para o calendário Julian que começa em 1 de janeiro 4714 Antes de Cristo e vai até 9999 Depois de Cristo.

Utilizando a segunda opção consegui solucionar meu problema.
Agradeço a atenção dispensada
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17666
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Problemas para inserir idade no banco de dados

17-08-2009 16:47

Blz :;)
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 25 postagens
Mais de 25 postagens
Tópico Autor
Mensagens: 27
Sexo: Masculino
Localização: SC/Caçador/Brasil
Contato:

Problemas para inserir idade no banco de dados

19-08-2009 14:04

Só para constar, a função acima não leva em conta os anos bissextos, para que isso não ocorra deve-se alterar a linha:

return( floor( ( $dte - $dts ) / 365 ) ); 

por:

return( floor( ( $dte - $dts ) / 365.25 ) ); 

se isso auxiliar alguém esta uma solução que funciona.
0

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado