PHP

Не вносятся данные в базу MYSQL, в чём ошибка?

 $connect = mysqli_connect("localhost", "root", "", "avaku_db100");
if (!$connect) {
die ('Error connect to database');
}

$name = htmlspecialchars(trim($_POST['name']), FILTER_SANITIZE_STRING);
$username = htmlspecialchars(trim($_POST['username']), FILTER_SANITIZE_STRING);
$gender = htmlspecialchars(trim($_POST['gender']), FILTER_SANITIZE_STRING);
$email = htmlspecialchars(trim($_POST['email']), FILTER_SANITIZE_STRING);
$password = htmlspecialchars(trim($_POST['password']), FILTER_SANITIZE_STRING);
$ip = $_SERVER['REMOTE_ADDR'];

if (preg_match('/^[\w\.\-]+\@+[a-z]+\.+[a-z]{2,10}$/', $email) || preg_match('/^[-0-9a-zA-Z_!#\.]{7,32}$/i', $password)) {

$a = "gHgsdBnBB3wdaSoPl098CxvV36ghhF";
$b = "hJnnHdfP932plbM01cxX04ZxwT94hGGh19";
$c = "hgGdw21Lk05kvcxN19cvRt20cxRR327nN90VzZ";
$hash_password = sha1(sha1($password . $a . 2 . 6 . $c . PASSWORD_BCRYPT) . $b);

$signup = mysqli_query($connect, "INSERT INTO `users` (`id`, `username`, `name`, `gender`, `email`, `password`, `ip`, `datetime`) VALUES (NULL, '$username', '$name', '$gender', '$email', '$hash_password', '$ip', NOW())");

echo 'Success';
}
else {
echo 'Error';
}
Вот так:
(`id`, ..., `datetime`) VALUES (NULL, ..., NOW())
делать НЕ НАДО. Автоинкрементного поля id вообще не должно быть в запросе.
Полю datetime назначается значение по умолчанию CURRENT_TIMESTAMP и из запроса это поле тоже удаляется - дата/время создания записи будут записаны в поле автоматически.

Ты не проверяешь, что $signup равно false. Если $signup равно false, значит произошла ошибка, информацию о которой можно получить из mysqli_error() - ты своими глазами можешь увидеть, почему запрос не выполнился. А ещё лучше - включить выбрасывание исключений из mysqli: в PHP это намного удобнее и надёжнее, чем каждый раз вручную проверять результат функции.

А теперь по прочим ошибкам и странностям кода.

У функции htmlspecialchars НЕ СУЩЕСТВУЕТ параметра FILTER_SANITIZE_STRING. Параметры FILTER_* имеются только у функций filter_*.
https://www.php.net/manual/ru/function.htmlspecialchars

htmlspecialchars НЕ ЗАЩИЩАЕТ от SQL-инъекций. От слова "совсем".
Защищает либо использование mysqli_real_escape_string, либо использование параметризованных (подготовленных, подготавливаемых) запросов.
https://www.php.net/manual/ru/mysqli.real-escape-string.php
https://www.php.net/manual/ru/mysqli.quickstart.prepared-statements.php

Не надо пытаться проверять е-mail регуляркой - это не работает: стандарт адресов e-mail не укладывается в регулярку. И даже если отбросить экзотические варианты, слишком легко что-то не учесть. Например, у тебя имя домена второго уровня может содержать только латинские буквы (что не соответствует реальности), а символов '@' может быть несколько. Для проверки формата e-mail есть функция filter_var с параметром FILTER_VALIDATE_EMAIL.
https://www.php.net/manual/ru/function.filter-var.php

Не надо ограничивать набор символов и максимальную длину пароля - этим ты лишь снижаешь уровень безопасности и создаёшь проблемы тем, кото предпочитает использовать длинные парольные фразы. Тем более, что хранится не сам пароль, а его хэш, имеющий фиксированную длину.

Вот так:
$hash_password = sha1(sha1($password . $a . 2 . 6 . $c . PASSWORD_BCRYPT) . $b);
делать НЕ НАДО. Специально для хэширования паролей в PHP есть набор функций https://www.php.net/manual/ru/ref.password.php , обеспечивающих несравнимо более высокий уровень безопасности, чем любой самописный велосипед.
!!!! Ulan !!!! Kuralbaev
!!!! Ulan !!!! Kuralbaev
78 083
Лучший ответ
создал таблицу у меня затолкалось
 Warning: Undefined array key "username" in scratch_3.php on line 8 

Deprecated: trim(): Passing null to parameter #1 ($string) of type string is deprecated in scratch_3.php on line 8

Deprecated: Constant FILTER_SANITIZE_STRING is deprecated in scratch_3.php on line 8

Warning: Undefined array key "gender" in scratch_3.php on line 9

Deprecated: trim(): Passing null to parameter #1 ($string) of type string is deprecated in scratch_3.php on line 9

Deprecated: Constant FILTER_SANITIZE_STRING is deprecated in scratch_3.php on line 9

Deprecated: Constant FILTER_SANITIZE_STRING is deprecated in scratch_3.php on line 10

Deprecated: Constant FILTER_SANITIZE_STRING is deprecated in scratch_3.php on line 11

Warning: Undefined array key "REMOTE_ADDR" in scratch_3.php on line 12
Success
Process finished with exit code 0

Vitalya Kan
Vitalya Kan
59 846
Код ошибки какой?