Je hebt slechts vier argumenten gebonden, door de control string "sssd", maar je hebt veel parameters. Bij het binden van variabelen met mysqli heb je één teken nodig voor elke parameter, bijvoorbeeld:
mysqli_stmt_bind_param($stmt, "sssdsssssssssdd", $firstname, $surname, $address,
$gender, $city, $province, $postalcode, $phone, $secondphone, $email,
$organization, $inriding, $ethnicity, $senior, $student);
(Ik neem aan dat senior en student gehele getallen zijn en de code "d" nodig hebben.)
U hoeft geen van uw variabelen te behandelen met mysqli_real_escape_string() -- dat is het punt van het gebruik van parameters. Als u ook aan escapen doet, krijgt u letterlijke backslash-tekens in uw gegevens in de database.
En u hoeft in ieder geval nooit htmlspecialchars() te gebruiken - u zou dat gebruiken bij het uitvoeren naar HTML, niet bij het invoegen in de database. Je krijgt letterlijke reeksen zoals &
in uw gegevens in de database.
Over uw volgende fout:
Dit wordt veroorzaakt door het volgende:
$result = mysqli_query($mysqli,$stmt);
Die functie verwacht dat het tweede argument een string is, een nieuwe SQL-query. Maar je hebt die vraag al voorbereid, dus je hebt het volgende nodig:
$result = mysqli_stmt_execute($stmt);