$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';
}
PHP
Не вносятся данные в базу MYSQL, в чём ошибка?
Вот так:
(`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 , обеспечивающих несравнимо более высокий уровень безопасности, чем любой самописный велосипед.
(`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 , обеспечивающих несравнимо более высокий уровень безопасности, чем любой самописный велосипед.
создал таблицу у меня затолкалось
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
Код ошибки какой?
Похожие вопросы
- вывод данных из базы данных по нажатию кнопки
- Отправка текста в базу данных PHP + MySQL! Помогите ((
- Нужна помощь c запросами и базой данных, PHP, MySQL
- PHP MYSQL после ввода запроса , отображается пустая строка перед 1 кой, немогу понять Помогите пожалуйста
- При написании php кода для отправки записи в базу данных выходит ошибка
- как сделать чтобы полученные из формы данные записывались в базу данных?
- Посоветуйте хостинг по дешевле, надежный, php mysql, mysql и хостинге не мало мест было?
- Как узнать положение элемента в базе данных?
- Как хранить номер карты в базе данных?
- Почему говорят про глобальный массив $GLOBALS в то же время данные передают через сессии?