$fname $lname $gender $age $email $course
のような変数 isset($_POST['register'])
のif条件の後にif条件が設定されます 。これで、検証が機能する場合でも、データはデータベースに入力されます。条件を入れたから
if($fname&&$lname&&$gender&&$age&&$email&&$course)
これらの変数すべてに値が1つでもある場合、コントロールはそのブロックに入ります。何が起こっているのかというと、間違った値を入力すると、それらは検証され、メッセージが表示されますが、最初にブロックが終了すると、$ _ POST変数は無効であるかどうかに関係なく、まだいくつかの値を持っているため、2番目にブロックが入力されますクエリが実行されます。
あなたができることは、エラーメッセージをエコーしているところならどこでも、そのそれぞれの変数を空白にすることです。このようなもの:
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 = "";
}