0

На странице имеется кнопка "Удалить аккаунт", которая ведет на страницу delete_account.php. Нужно чтобы при нажатии на нее авторизованный пользователь удалял свою строку из таблицы. Целый день мучаюсь с этой проблемой. Не подскажите как решить? Часть кода страницы delete_account.php

    $host = 'localhost';  
    $user = 'root';    
    $pass = 'root'; 
    $db_name = 'diploma';

    $link = mysqli_connect($host, $user, $pass, $db_name);
    mysqli_query($link, "SET NAMES 'utf8'");

    if (isset($_GET['user'])) {
        $user = $_GET ['user'];
        $query = "DELETE FROM `username` WHERE `name` = 'user'";
        mysqli_query($link, $query);
    }

Не кидайтесь палками, я всего лишь прошу дать совет, я не такой опытный) Заранее спасибо!

zhd_dm
  • 11
  • 3
  • username - это такое имя таблицы? какое-то оно необычное... А где Вы проверяете, что Ваши обращения к серверу (mysqli_connect, mysqli_query) не закончились неудачей? – Akina Jun 02 '20 at 18:01
  • username - это имя таблицы. Я вроде проверял и мне выводились данные из базы. Сейчас попробую повторно. – zhd_dm Jun 02 '20 at 18:07
  • Попробовал проверить через if($link) { echo 'Соединение установлено.'; } else { die('Ошибка подключения к серверу баз данных.'); } - Пишет соединение установлено. – zhd_dm Jun 02 '20 at 18:09
  • Аналогично нужно поступить с обоими mysqli_query. Ну и если не false - посмотреть, что же собсно там приехало. – Akina Jun 02 '20 at 18:10
  • Переменная $query при проверке выдала ошибку. – zhd_dm Jun 02 '20 at 18:15
  • Угу... ожидаемо. У Вас в таблице точно есть пользователь с именем "user"? а то там что-то долларов маловато... – Akina Jun 02 '20 at 18:16
  • Нет, user, как я понимаю, это имя пользователя в сессии. Но я могу ошибаться. Вот скриншот таблицы - https://prnt.sc/ssj9ny – zhd_dm Jun 02 '20 at 18:18
  • как я понимаю, это имя пользователя в сессии Да щазз! вот будь там '$user' - то да. А так - нет... это просто строковый литерал со значением 'user'. А такого значения в поле \user`` нету... – Akina Jun 02 '20 at 18:19
  • Я уже пробовал и с $, и без, и с одинарными кавычками, и с двойными, и без них - ничего не помогло. Сейчас попробовал как вы сказали, выдает ошибку при проверке переменной $query. – zhd_dm Jun 02 '20 at 18:21
  • Покажите содержимое этой переменной после подстановки имени пользователя. – Akina Jun 02 '20 at 18:24
  • @Akina "Аналогично нужно поступить с обоими mysqli_query" - не нужно – Ипатьев Jun 02 '20 at 18:25
  • @Akina При выполнении функции print ($_COOKIE['user']) выдает значение из поля "name" таблицы. – zhd_dm Jun 02 '20 at 18:27
  • 2
    а зачем ты его тогда из $_GET берёшь? – Ипатьев Jun 02 '20 at 18:29
  • @Ипатьев Но у него как бы нет "boolean given"... – Akina Jun 02 '20 at 18:42
  • @Ипатьев Спасибо огромное! Работает!!! – zhd_dm Jun 02 '20 at 18:46
  • ну еще бы оно не работало. любой студент у итоге может удалить всех остальных – Ипатьев Jun 02 '20 at 18:47
  • @Ипатьев Почему? Если не затруднит, объясните, пожалуйста, простыми словами. – zhd_dm Jun 02 '20 at 18:49
  • ну если уж ты не можешь одну переменную от другой отличить, то вряд ли поймешь хоть слово из того что я скажу. В куки любой может написать что угодно, и как следствие удалить кого угодно. В твой SQL запрос любой авторизованный пользователь может написать что угодно, и как следствие удалить хоть всю таблицу целиком – Ипатьев Jun 02 '20 at 18:55
  • Понял, спасибо. – zhd_dm Jun 02 '20 at 18:56

1 Answers1

0

Попробуйте:

$query = "DELETE FROM `username` WHERE `name` = '$user'";

Но я бы для начала удостоверился в следующих пунктах:

  • Подключились ли вы к базе данных вообще?
  • Действительно ли в GET параметре name находится имя пользователя
  • Действительно ли таблица называется username

Еще вам не мешало бы обернуть входной параметр в mysql_escape_string

$query = "DELETE FROM username WHERE name = '". mysql_escape_string($user) ."'"

Это необходимо для предотвращения SQL инъекций. Чтоб понять зачем это нужно, попробуйте без mysql_escape_string попробовать удалить юзера с именем ' or True or '(именно так, имя должно начинаться и заканчиваться с одинарной кавычки) и посмотрите, что случится в базе данных

Mamba
  • 417
  • Спасибо огромное за совет, но я уже решил свою проблему. У меня name находился не в GET параметре. – zhd_dm Jun 04 '20 at 08:01