Dúvidas sobre MySQL, PHPMyAdmin, SQL e assuntos relacionado a banco de dados.
Moderador: web
por Von_Reibnitz Offline » Seg Ago 17, 2009 2:17 pm
|
|
Olá, estou utilizando este comando para inserir os dados no banco: Cadastrar_db.php
- Código: Selecionar todos
<? $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:
- Código: Selecionar todos
$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.

Von_Reibnitz
MEMBRO
Mensagens: 27
Registrado em: Ter Jul 22, 2008 1:58 pm
Localização: SC/Caçador/Brasil
|
por web Offline » Seg Ago 17, 2009 2:25 pm
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
- Código: Selecionar todos
echo $data_falec-$data_nasc;

Gostou do que encontrou? Divulgue, indique, participe, agradeça pelas respostas.
Faço scripts personalizados ou reparos em scripts. Orçamento MSN codigosnaweb [@] hotmail [.] com
web
ADMIN
Mensagens: 11904
Registrado em: Sáb Jan 20, 2007 6:08 pm
Localização: RJ / RJ / Brasil
|
por Von_Reibnitz Offline » Seg Ago 17, 2009 2:58 pm
deveria ficar assim então?
- Código: Selecionar todos
echo "$dados[data_falec]-$dados[data_nasc])";

Von_Reibnitz
MEMBRO
Mensagens: 27
Registrado em: Ter Jul 22, 2008 1:58 pm
Localização: SC/Caçador/Brasil
|
por Von_Reibnitz Offline » Seg Ago 17, 2009 3:28 pm
a página que exibe os resultados é esta:
obitos.php
- Código: Selecionar todos
<? $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%"> </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%"> </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'>« Anterior</a> |"; } else { echo "<font color='$corcelula2'>« Anterior</font> |"; } ?> </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 " <a href='$url'>Próxima »</a>"; } else { echo " <font color='$corcelula2'>Próxima »</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ês não houve nenhum falecimento!</strong></font><br /> <br /> <br /> </td> </tr> </table> <? } ?> <br>

Von_Reibnitz
MEMBRO
Mensagens: 27
Registrado em: Ter Jul 22, 2008 1:58 pm
Localização: SC/Caçador/Brasil
|
por web Offline » Seg Ago 17, 2009 4:58 pm
Eu usei a linha que indiquei, e foi retornado 109 anos, ou seja, a diferença entre as datas.

Gostou do que encontrou? Divulgue, indique, participe, agradeça pelas respostas.
Faço scripts personalizados ou reparos em scripts. Orçamento MSN codigosnaweb [@] hotmail [.] com
web
ADMIN
Mensagens: 11904
Registrado em: Sáb Jan 20, 2007 6:08 pm
Localização: RJ / RJ / Brasil
|
por Von_Reibnitz Offline » Seg Ago 17, 2009 5:05 pm
Olá, o colega João Batista Neto me passou as seguintes informações:
se estivesse utilizando PHP 5.3 seria assim:
- Código: Selecionar todos
$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:
- Código: Selecionar todos
/** * 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

Von_Reibnitz
MEMBRO
Mensagens: 27
Registrado em: Ter Jul 22, 2008 1:58 pm
Localização: SC/Caçador/Brasil
|
por web Offline » Seg Ago 17, 2009 5:47 pm
Blz

Gostou do que encontrou? Divulgue, indique, participe, agradeça pelas respostas.
Faço scripts personalizados ou reparos em scripts. Orçamento MSN codigosnaweb [@] hotmail [.] com
web
ADMIN
Mensagens: 11904
Registrado em: Sáb Jan 20, 2007 6:08 pm
Localização: RJ / RJ / Brasil
|
por Von_Reibnitz Offline » Qua Ago 19, 2009 3:04 pm
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:
- Código: Selecionar todos
return( floor( ( $dte - $dts ) / 365 ) );
por:
- Código: Selecionar todos
return( floor( ( $dte - $dts ) / 365.25 ) );
se isso auxiliar alguém esta uma solução que funciona.

Von_Reibnitz
MEMBRO
Mensagens: 27
Registrado em: Ter Jul 22, 2008 1:58 pm
Localização: SC/Caçador/Brasil
|
Voltar para MySQL
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 4 visitantes
|
|
|