Ciao,
non capisco... nel tuo codice inserisci ripetutamente il tag CAPTION attraverso il ciclo while e non capisci perchè questo venga visualizzato più volte?

Secondo lo standard, il tag CAPTION può esser presente al massimo una sola volta per tabella ed inserito subito dopo il tag <table>.

L'unica soluzione che hai per rendere il tuo codice conforme è di togliere il CAPTION dal ciclo e metterlo dove dovrebbe stare: dopo il TABLE.