Не работает бд в php?

<?php
	$login = filter_var(trim($_POST['login']),
	FILTER_SANITIZE_STRING);
	$password = filter_var(trim($_POST['password']),
	FILTER_SANITIZE_STRING);

	if(mb_strlen($login) < 4 || mb_strlen($login) > 15) {
		echo "Логин не должен быть короче 4ёх символов и не больше 15";
		exit();
	} else if(mb_strlen($password) < 3 || mb_strlen($password) > 10) {
		echo "Пароль не может быть короче 3ёх символов и не больше 10";
		exit();
	}

	$mysql = new mysqli('176.107.160.36', 'limbo', 'Fear333M', 'vanilla');
	if ($mysql->compact_errno) 
		exit('Ошибка подключения к бд');
	$mysql->query("INSERT INTO `sait` (`login`, `password`) VALUES ('$login', '$password')");

	$mysql->close();
?>


Почему данные не заносятся в бд?
  • Вопрос задан
  • 156 просмотров
Пригласить эксперта
Ответы на вопрос 2
ipatiev
@ipatiev Куратор тега PHP
Потомок старинного рода Ипатьевых-Колотитьевых
Если вы считаете, что данные не заносятся в БД, то на это может быть две причины
1. Ошибка при занесении.
2. Все заносится, но вы просто не там смотрите.

Чтобы исключить первый пункт, надо убедиться в том, что вы можете видеть все ошибки. Для этого на локальном сервере надо включить отображение ошибок на экран. Плюс настроить РНР, чтобы он не скрывал никакие ошибки
<?php
# Ошибки
# Для локального сервера
ini_set('display_errors', 1);
# Всегда
error_reporting(E_ALL);
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

# дальше пишем сам код
$login = trim(filter_input(INPUT_POST, 'login'));
$password = filter_input(INPUT_POST, 'password');

if (mb_strlen($login) < 4 || mb_strlen($login) > 15) {
  exit("Логин не должен быть короче 4 символов и больше 15");
} else if (mb_strlen($password) < 8 || mb_strlen($password) > 100) {
  exit("Пароль не может быть короче 8 символов и больше 100");
}
$password = password_hash($password, PASSWORD_DEFAULT);

$mysql = new mysqli('176.107.160.36', 'limbo', 'Fear333M', 'vanilla');

$stmt = $mysql->prepare("INSERT INTO `sait` (`login`, `password`) VALUES (?, ?)");
$stmt->bind_param("ss", $login, $password);
$stmt->execute();

Кроме настройки ошибок я еще выкинул бессмысленный код и поправил кривой, в том числе в плане безопасности.

Если же этот код выполняется и не выдает ошибок при этом, значит данные добавились. И надо просто открыть правильную базу данных
Ответ написан
Комментировать
@teenager_python
Ошибка в подключении к базе данных: строка $mysql->compact_errno должна быть заменена на $mysql->connect_errno, чтобы проверить, было ли успешно подключение к базе данных. Это может привести к тому, что код после проверки не выполнится, что означает, что данные не будут занесены в базу данных


<?php
$login = filter_var(trim($_POST['login']), FILTER_SANITIZE_STRING);
$password = filter_var(trim($_POST['password']), FILTER_SANITIZE_STRING);

if (mb_strlen($login) < 4 || mb_strlen($login) > 15) {
  exit("Логин не должен быть короче 4 символов и не больше 15");
} else if (mb_strlen($password) < 3 || mb_strlen($password) > 10) {
  exit("Пароль не может быть короче 3 символов и не больше 10");
}

$mysql = new mysqli('176.107.160.36', 'limbo', 'Fear333M', 'vanilla');
if ($mysql->connect_errno) {
  exit('Ошибка подключения к базе данных: ' . $mysql->connect_error);
}

$insert_query = $mysql->prepare("INSERT INTO `sait` (`login`, `password`) VALUES (?, ?)");
$insert_query->bind_param("ss", $login, $password);
if (!$insert_query->execute()) {
  exit('Ошибка выполнения запроса вставки: ' . $mysql->error);
}

$insert_query->close();
$mysql->close();
?>
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы