Я сделал приложение для входа / регистрации, следуя этому руководству:
https://www.youtube.com/watch?v=QxffHgiJ64M&список = PLe60o7ed8E-TztoF2K3y4VdDgT6APZ0ka
Все было хорошо, но потом я удалил параметр age и вставил параметр «lastname» и «email». Таким образом, каждый раз, когда я пытаюсь зарегистрировать пользователя, поле «email» имеет значение «0» (даже если я не использую @ или.)
Это мой файл Register.php:
<?php
require("Password.php");
$connect = mysqli_connect("x", "x", "x", "x");
$name = $_POST["name"];
$lastname = $_POST["lastname"];
$email = $_POST["email"];
$password = $_POST["password"];
function registerUser() {
global $connect, $name, $lastname, $email, $password;
$passwordHash = password_hash($password, PASSWORD_DEFAULT);
$statement = mysqli_prepare($connect, "INSERT INTO user (name, lastname, email, password) VALUES (?, ?, ?, ?)");
mysqli_stmt_bind_param($statement, "ssis", $name, $lastname, $email, $passwordHash);
mysqli_stmt_execute($statement);
mysqli_stmt_close($statement);
}
function emailAvailable() {
global $connect, $email;
$statement = mysqli_prepare($connect, "SELECT * FROM user WHERE email= ?");
mysqli_stmt_bind_param($statement, "s", $email);
mysqli_stmt_execute($statement);
mysqli_stmt_store_result($statement);
$count = mysqli_stmt_num_rows($statement);
mysqli_stmt_close($statement);
if ($count < 1){
return true;
}else {
return false;
}
}
$response = array();
$response["success"] = false;
if (emailAvailable()){
registerUser();
$response["success"] = true;
}
echo json_encode($response);
?>
Простая ошибка, вы перепутали поле адреса электронной почты в mysqli_stmt_bind_param
с i
вместо s
,
Изменить,
mysqli_stmt_bind_param($statement, "ssis", $name, $lastname, $email, $passwordHash);
Чтобы,
mysqli_stmt_bind_param($statement, "ssss", $name, $lastname, $email, $passwordHash);
Я не уверен как mysqli
преобразует параметр в указанный вами тип, но при запуске следующего кода вывод 0
:
<?php
echo (int) 'test@test.com'; ---> 0
?>
Других решений пока нет …