Bạn chỉ bị ràng buộc bốn đối số, bởi chuỗi điều khiển "sssd", nhưng bạn có nhiều tham số. Khi liên kết các biến với mysqli, bạn cần một ký tự cho mỗi tham số, ví dụ:
mysqli_stmt_bind_param($stmt, "sssdsssssssssdd", $firstname, $surname, $address,
$gender, $city, $province, $postalcode, $phone, $secondphone, $email,
$organization, $inriding, $ethnicity, $senior, $student);
(Tôi giả sử học sinh cuối cấp và học sinh là số nguyên và cần mã "d".)
Bạn không cần phải xử lý bất kỳ biến nào của mình bằng mysqli_real_escape_string () - đó là điểm của việc sử dụng các tham số. Nếu bạn cũng thoát, bạn sẽ nhận được các ký tự gạch chéo ngược theo nghĩa đen trong dữ liệu của mình trong cơ sở dữ liệu.
Và bạn không bao giờ cần sử dụng htmlspecialchars () trong mọi trường hợp - bạn sẽ sử dụng nó khi xuất ra HTML, không phải khi chèn vào cơ sở dữ liệu. Bạn sẽ nhận được các chuỗi theo nghĩa đen như &
trong dữ liệu của bạn trong cơ sở dữ liệu.
Lại lỗi tiếp theo của bạn:
Điều này được gây ra bởi những điều sau:
$result = mysqli_query($mysqli,$stmt);
Hàm đó mong đợi đối số thứ hai là một chuỗi, một truy vấn SQL mới. Nhưng bạn đã chuẩn bị sẵn truy vấn đó, vì vậy bạn cần những thứ sau:
$result = mysqli_stmt_execute($stmt);