Свързали сте само четири аргумента с контролния низ "sssd", но имате много параметри. Когато свързвате променливи с mysqli, имате нужда от един знак за всеки параметър, например:
mysqli_stmt_bind_param($stmt, "sssdsssssssssdd", $firstname, $surname, $address,
$gender, $city, $province, $postalcode, $phone, $secondphone, $email,
$organization, $inriding, $ethnicity, $senior, $student);
(Предполагам, че старши и студент са цели числа и се нуждаят от кода "d".)
Не е нужно да третирате нито една от вашите променливи с mysqli_real_escape_string() - това е смисълът на използването на параметри. Ако направите и екраниране, ще получите буквални обратна наклонена черта в данните си в базата данни.
И никога не е необходимо да използвате htmlspecialchars() във всеки случай - бихте го използвали при извеждане в HTML, а не при вмъкване в базата данни. Ще получите буквални последователности като &
във вашите данни в базата данни.
Повторете следващата си грешка:
Това е причинено от следното:
$result = mysqli_query($mysqli,$stmt);
Тази функция очаква вторият аргумент да бъде низ, нова SQL заявка. Но вече сте подготвили тази заявка, така че имате нужда от следното:
$result = mysqli_stmt_execute($stmt);