вашите променливи като $fname $lname $gender $age $email $course
се поставят в условие if след условие if за isset($_POST['register'])
. Сега, дори ако вашата валидация ще работи, данните пак ще бъдат въведени в базата данни. защото сте поставили условие
if($fname&&$lname&&$gender&&$age&&$email&&$course)
Сега контролът ще влезе в този блок, когато имате дори една стойност във всички тези променливи. Това, което трябва да се случи е, че сте поставили грешни стойности, те се потвърждават, съобщението ще се покаже, но когато първо блокът приключи, тъй като променливите $_POST все още имат НЯКАКВА стойност, независимо дали са невалидни, второ ако блокът ще бъде въведен и заявката ще бъде задействана.
Това, което можете да направите, е, където и да повтаряте съобщение за грешка, да изтриете съответната променлива. нещо подобно:
if (preg_match("/[a-zA-Z ]+$/", $_POST['fname'])) {
$fname = trim($_POST['fname']);
}
else
{
echo '<p>The First name is empty or has illegal characters! To edit please go the link Display Data Information</p>';
$fname = "";
}