Hai solo legato quattro argomenti, dalla stringa di controllo "sssd", ma hai molti parametri. Quando si associano variabili con mysqli, è necessario un carattere per ogni parametro, ad esempio:
mysqli_stmt_bind_param($stmt, "sssdsssssssssdd", $firstname, $surname, $address,
$gender, $city, $province, $postalcode, $phone, $secondphone, $email,
$organization, $inriding, $ethnicity, $senior, $student);
(Suppongo che senior e student siano numeri interi e necessitino del codice "d".)
Non è necessario trattare nessuna delle tue variabili con mysqli_real_escape_string() -- questo è il punto di usare i parametri. Se esegui anche l'escape, otterrai caratteri di barra rovesciata letterali nei tuoi dati nel database.
E non hai mai bisogno di usare htmlspecialchars() in ogni caso:lo useresti durante l'output in HTML, non durante l'inserimento nel database. Otterrai sequenze letterali come &
nei tuoi dati nel database.
Re il tuo prossimo errore:
Ciò è causato da quanto segue:
$result = mysqli_query($mysqli,$stmt);
Tale funzione prevede che il secondo argomento sia una stringa, una nuova query SQL. Ma hai già preparato quella query, quindi hai bisogno di quanto segue:
$result = mysqli_stmt_execute($stmt);