L'errore sta qui
Codice PHP:
 // Stessa cosa per i giorni
 
elseif (date('d') <$giorno)
 
$eta--; 
Si devono confrontare 29/1/1982 e 26/12/2009
Codice PHP:
<?php
function calcola_eta($datanascita)
{
// Ricavo giorno, mese e anno
list($giorno$mese$anno) = explode("/"$datanascita);

// Calcolo anni
$eta date('Y') - $anno//vale 27

if (date('m') <$mese//condizione falsa, passo all'else if
   
$eta--;
// Stessa cosa per i giorni
else if (date('d') <$giorno//condizione vera, ma la condizione è sbagliata, non deve essere comunque eseguita
  
$eta--; //ora $eta vale 26

return $eta;
}
echo 
"".calcola_eta("29/01/1982")."";

?>
cambia la condizione dell'else if con questo:
Codice PHP:
else if (date('d') <$giorno && date('m') == $mese
Per fortuna sei nato il 29 e oggi non è il 29, 30 o 31. Se fossi nato il primo del mese non ti saresti mai accorto di questo bug provando con la tua data di nascita.