vos variables comme $fname $lname $gender $age $email $course
sont placés dans la condition if après la condition if pour isset($_POST['register'])
. Maintenant, même si votre validation fonctionne, les données seront toujours entrées dans la base de données. car vous avez mis la condition
if($fname&&$lname&&$gender&&$age&&$email&&$course)
Maintenant, le contrôle entrera dans ce bloc lorsque vous aurez ne serait-ce qu'une seule valeur dans toutes ces variables. Ce qui doit se passer, c'est que vous avez mis des valeurs erronées, celles-ci sont validées, un message sera affiché, mais la première fois que le bloc se termine, car les variables $ _POST ont toujours UNE valeur, qu'elles soient invalides, deuxièmement si le bloc sera entré et la requête sera déclenchée.
Ce que vous pouvez faire est, où que vous renvoyiez le message d'erreur, effacez cette variable respective. quelque chose comme ça :
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 = "";
}