Twoje zmienne, takie jak $fname $lname $gender $age $email $course
są umieszczane w if warunek po if warunek dla isset($_POST['register'])
. Teraz, nawet jeśli Twoja walidacja zadziała, dane nadal będą wprowadzane do bazy danych. ponieważ postawiłeś warunek
if($fname&&$lname&&$gender&&$age&&$email&&$course)
Teraz kontrola wejdzie do tego bloku, gdy we wszystkich tych zmiennych będzie chociaż jedna wartość. To, co musi się dziać, to to, że wstawiasz złe wartości, te są sprawdzane, pojawi się komunikat, ale gdy pierwszy blok się zakończy, ponieważ zmienne $_POST nadal mają JAKĄŚ wartość, niezależnie od tego, czy są niepoprawne, a drugi, jeśli zostanie wprowadzony blok i zapytanie zostanie uruchomione.
To, co możesz zrobić, to za każdym razem, gdy pojawia się komunikat o błędzie, wymazać odpowiednią zmienną. coś takiego:
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 = "";
}