fordi functionen hedder tableExist.
udover sætte du lige nu messages til at være den første række i din mysql table, du skal nok ud at bruge en while løkke
$this->allMessages=array();
while($row=mysql_fetch_assoc($query)){
$this->allMessages[] =$row;
}
du har byttet om på dimensionerne når du indekserer i listMessages du har ['feltnavn'][$i] skal være [$i]['feltnavn']
eller endnu bedre lav foreach løkke
foreach($this->listMessages as $row){
$text = str_replace("GUESTBOOK_NAME",$row["names"], $this->template);
//...resten af koden...
}
man kan ved lidt misbrug så str_replace til at placere selve beskeden der hvor ens navn skulle stå, til at blive repeatet flere gange og sikker andre sjove ting. Da templaten ikke ændrer sig kunne du sikkert med fordele preprocess den ind til et array, som du så hver gang gennemløb og ud printede,eller som minimum sætte count 1 en nu da du bruge php5+.
Det ikke en god ide at blande functionaliter ind i metoder som man ikke kan udlede fra metodens navn, din tableExists autocreater faktisk en table.
ved ikke om du bare kan skrive getMessages() i php5+ og forvente at få metoden i klassen, men kunne godt være i tvivl