Вопрос хороший, характерностью имеющихся в коде ошибок.
На первом месте тут конечно , конечно, незабвенный
Бобби Тейблс и его прошаренная мамаша.
Таблицу здесь удалить не получится, но вот скачать всю базу - запросто.
Плюс мамаша конечно тупит. Данные надо не "экранировать", поскольку почти никто не понимает, что это значит, а отправлять в БД отдельно от запроса.
Но меня здесь больше интресует не безопасность, а осмысленность данного кода.
Если элемент "login" попадает в сессию в результате авторизации, то зачем снова делать все эти 100500 запросов в БД?
Я бы этот код сократил до
<?php
require_once $_SERVER["DOCUMENT_ROOT"] . "/engine/core/session.php";
if (empty($_SESSION["user_id"])) {
include "login.php";
die;
}
и поместил в profile.php
При этом убедившись, что код собственно авторизации выглядит как-то так
$stmt = $conn->prepare("SELECT * FROM users_all WHERE name=?");
$stmt->bind_param("s", $_POST['name']);
$stmt->execute();
$user = $stmt->get_result()->fetch_assoc();
if ($user && password_verify($_POST['password'], $user['password']))
{
$_SESSION['user_id'] = $user['id'];
header("Location: /profile.php");
die;
}