Para reducir un poco el codigo puedes hacer uso de FOR de PHP en cada <option> de tu formulario, pues no se como se podría hacer para el mes pero lo puse para el día y el año.
Para calcular la edad usas javascript. Hay una funcion que se llama cuando hay un cambio en las listas desplegables.
Para saber la fecha actual puedes obtener la fecha del servidor con PHP o puedes obtener la fecha del usuario pero no es recomendable porque puede estar mal.
Esta es mi solución:
calculo.php
Código
<html> <head> <script type="text/javascript" language="javascript"> function cambiar(){ var year = document.getElementById('year').value; var year_serv = <?php echo date('Y')?>; var edad = year_serv-year-1; if(document.getElementById('mes').value==<?php echo date('m')?>){ if(document.getElementById('dia').value<=<?php echo date('d')?>){ edad += 1; } }else if(document.getElementById('mes').value<=<?php echo date('m')?>){ edad += 1; } document.getElementById('edad').value = edad; } </script> </head> <body> <?php echo "Fecha del servidor: ".date('d/m/Y'); ?> Día: <select id="dia" onChange="cambiar()"> <?php for($i=1; $i<32; $i++){ echo "<option value='".$i."'>".$i."</option>\n"; } ?> </select> <br/> Mes: <select id="mes" onChange="cambiar()"> </select> <br/> Año: <select id="year" onChange="cambiar()"> <?php for($i=1950; $i<2012; $i++){ echo "<option value='".$i."'>".$i."</option>\n"; } ?> </select> <br/> <br/> Tu edad es: <input type="text" id="edad" /> </body> </html>
El algoritmo (javascript) no lo pensé mucho .. puede estar mal así que pruébalo.
Un saludo.