


Помогите найти ошибку в коде
нейросети уже не помогают, ни я ни они найти ошибку не могут, вот код:
<?php
if (!isset($_COOKIE['user'])) { //если пользователь не вошел в аккаунт выкидывает его на страницу регистрации
header("Location: registration.php");}
if (!isset($_GET['id']) or empty($_GET['id'])) { //если id аккаунта для перехода не указан выкидывает его на главную страницу
header("Location: home.php");}
if ($_GET['id'] == mysqli_fetch_assoc(mysqli_query($link,"SELECT id FROM `users` WHERE `name` = '$_COOKIE['user']'"))['id']) { //если пользователь заходит на свой же аккаунт его выкидывает на специальную страницу
header("Localion: myprofile.php");}
?>
<!DOCTYPE html>
<html>
<head>
<title>work-forum</title>
<meta http-equiv="Content-Type" content = "text/html; charset=utf-8">
<?php
$host = 'localhost'; //подключение к sql базе данных
$user = 'root';
$pass = '';
$name = 'forum';
$link = mysqli_connect($host, $user, $pass, $name);
?>
</head>
<body>
<?php
$id = $_GET['id']; //узнаем о каком аккаунте была запрошенна информация
$all = mysqli_fetch_assoc(mysqli_query($link,"SELECT * FROM `users` WHERE `id` = $id")); //запрашиваем данные из бд
$name = $all["name"];
$age = $all["age"];
$gender = $all["gender"];
echo "<h2>$name</h2>"
?>
<img src="img\businessmen-team-brainstorming-and-discussing-at-office-meeting-flat-design-character-png.webp">
</body>
</html>
вывод:
Parse error: syntax error, unexpected string content "", expecting "-" or identifier or variable or number in C:\xampp\htdocs\test1\forum_comm\profile.php on line 6
В коде есть две основные ошибки: синтаксическая ошибка в строке $_COOKIE['user'] внутри SQL-запроса (неэкранированные кавычки внутри строки с двойными кавычками) и опечатка в header("Localion: myprofile.php") (правильно Location). Для исправления первой ошибки замените '$_COOKIE['user']' на '{$_COOKIE['user']}' или используйте конкатенацию, а вторую — исправьте на header("Location: myprofile.php");. Также подключение к БД должно быть объявлено до его использования в условиях.
Откуда берётся значение переменной $link в строке 6? Ты сначала используешь несуществующую переменную $link и только много ниже присваиваешь $link значение.
Что будет с конструкцией:
mysql_fetch_assoc(...)['id']
если mysql_fetch_assoc вернёт false?
Вот здесь вот:
echo "<h2>$name</h2>"
ты забыл точку с запятой.
Вот так вот:
if (!isset($_COOKIE['user'])) {
делать не надо. Совсем не надо. Информация должна храниться не в куках, а в сессии https://www.php.net/manual/ru/book.session.php . В куках же должен быть только идентификатор сессии, который интерпретатор PHP устанавливает сам - без твоего участия.
Вот это вот:
if (!isset($_GET['id']) or empty($_GET['id'])) {
зачем? Достаточно empty($_GET['id']), а !isset($_GET['id']) абсолютно лишнее.
Вот это вот:
mysqli_query($link,"SELECT id FROM `users` WHERE `name` = '$_COOKIE['user']'")
mysqli_query($link,"SELECT * FROM `users` WHERE `id` = $id")
называется SQL-инъекция и является любимой хакерами дырой в безопасности, о чём подробно рассказывается в официальной русской документации: https://www.php.net/manual/ru/security.database.sql-injection.php .
И научись нормально форматировать код. В любой приличной IDE есть автоформатер, правильно расставляющий пробелы и переносы строк.
Во-первых, с синтаксисом налажал, во-вторых, пытаешься делать запрос до подключения к БД, в-третьих, куки можно легко подделать и устроить SQL-инъекцию. В-четвёртых, когда отправляешь заголовок с редиректом, код продолжает выполняться, потому нужно завершать выполнение скрипта (оператором exit)
Дальше код не читал