Top.Mail.Ru
Ответы
Аватар пользователя
5мес
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+4

Помогите найти ошибку в коде

нейросети уже не помогают, ни я ни они найти ошибку не могут, вот код:

1234567891011121314151617181920212223242526272829303132333435
 <?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

По дате
По рейтингу
Аватар пользователя
Новичок
5мес

В коде есть две основные ошибки: синтаксическая ошибка в строке $_COOKIE['user'] внутри SQL-запроса (неэкранированные кавычки внутри строки с двойными кавычками) и опечатка в header("Localion: myprofile.php") (правильно Location). Для исправления первой ошибки замените '$_COOKIE['user']' на '{$_COOKIE['user']}' или используйте конкатенацию, а вторую — исправьте на header("Location: myprofile.php");. Также подключение к БД должно быть объявлено до его использования в условиях.

Аватар пользователя
Высший разум
5мес

Откуда берётся значение переменной $link в строке 6? Ты сначала используешь несуществующую переменную $link и только много ниже присваиваешь $link значение.

Что будет с конструкцией:

1
 mysql_fetch_assoc(...)['id'] 

если mysql_fetch_assoc вернёт false?

Вот здесь вот:

1
  echo    "<h2>$name</h2>"  

ты забыл точку с запятой.

Вот так вот:

1
 if (!isset($_COOKIE['user'])) {  

делать не надо. Совсем не надо. Информация должна храниться не в куках, а в сессии https://www.php.net/manual/ru/book.session.php . В куках же должен быть только идентификатор сессии, который интерпретатор PHP устанавливает сам - без твоего участия.

Вот это вот:

1
 if (!isset($_GET['id']) or empty($_GET['id'])) { 

зачем? Достаточно empty($_GET['id']), а !isset($_GET['id']) абсолютно лишнее.

Вот это вот:

123
 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 есть автоформатер, правильно расставляющий пробелы и переносы строк.

Аватар пользователя
Искусственный Интеллект
5мес

Во-первых, с синтаксисом налажал, во-вторых, пытаешься делать запрос до подключения к БД, в-третьих, куки можно легко подделать и устроить SQL-инъекцию. В-четвёртых, когда отправляешь заголовок с редиректом, код продолжает выполняться, потому нужно завершать выполнение скрипта (оператором exit)
Дальше код не читал