Du har bara bundit fyra argument, av kontrollsträngen "sssd", men du har många parametrar. När du binder variabler med mysqli behöver du ett tecken för varje parameter, till exempel:
mysqli_stmt_bind_param($stmt, "sssdsssssssssdd", $firstname, $surname, $address,
$gender, $city, $province, $postalcode, $phone, $secondphone, $email,
$organization, $inriding, $ethnicity, $senior, $student);
(Jag antar att senior och student är heltal och behöver "d"-koden.)
Du behöver inte behandla någon av dina variabler med mysqli_real_escape_string() -- det är poängen med att använda parametrar. Om du också flyktar kommer du att få omvänd snedstreck i dina data i databasen.
Och du behöver aldrig använda htmlspecialchars() i alla fall - du skulle använda det när du matar ut till HTML, inte när du infogar i databasen. Du kommer att få bokstavliga sekvenser som &
i dina data i databasen.
Om ditt nästa fel:
Detta orsakas av följande:
$result = mysqli_query($mysqli,$stmt);
Den funktionen förväntar sig att det andra argumentet är en sträng, en ny SQL-fråga. Men du har redan förberett den frågan, så du behöver följande:
$result = mysqli_stmt_execute($stmt);