Здравствуйте! Как присвоить значение переменной, в зависимости от того, какая ссылка нажата? Ссылки формируются из БД. Метод GET не интересует, т.к. небезопасен. Суть: скрипт удаляет пользователя и БД, как сделать так, чтобы никто не смог удалить чужую БД? PHP: $delete = $_GET ['delete']; if (isset ($delete)) { $deletedb = mysqli_query ($link, "DROP DATABASE $name;"); $deleteuser = mysqli_query ($link, "DROP USER '$name'@'localhost';") echo "<br>База данных успешно удалена"; } Придумал такой способ проверки: PHP: $user = 'u1'; if (isset ($delete) ) { $check = mysqli_query ($link, "SELECT userid FROM db WHERE name = '$delete'"); $arr = mysqli_fetch_array ($check); $db = $arr['userid']; if ($db = $user) { $dropuser = mysqli_query ($link, "DROP USER '$delete'@'localhost'"); $dropdb = mysqli_query ($link, "DROP DATABASE $delete;"); } }
Зачем удалть базу? Может записи достаточно? Проверить какой пользователь запрашивает удаление и если это невладелец записи, то не удалять. https://ru.wikipedia.org/wiki/Аутентификация https://ru.wikipedia.org/wiki/Авторизация https://ru.wikipedia.org/wiki/ACL https://en.wikipedia.org/wiki/Role-based_access_control
@redcap создай отдельную базу и в ней в таблице веди учёт чьи другие базы, чтобы можно было проверить
Такая таблица в отдельной БД есть - содержит 3 колонки: уникальный ID базы, имя базы данных (имя пользователя БД и имя БД совпадают) и какому пользователю принадлежит БД. --- Добавлено --- PHP: // имя (ID) текущего пользователя скрипта $user = 'u1'; //если переменная delete выбрана if (isset ($delete) { //делаем запрос к БД (определяем пользователя базы данных, которая подлежит удалению) $check = mysqli_query ($link, "SELECT userid FROM db WHERE name = '$delete'"); //формируем массив из этого запроса $arr = mysqli_fetch_array ($check); //получаем имя (ID) владельца БД в виде переменной $db = $arr['userid']; //если владелец БД и текущий пользователь скрипта совпадают if ($db = $user) { //удаляем mysql пользователя $dropuser = mysqli_query ($link, "DROP USER '$delete'@'localhost'"); //удаляем БД $dropdb = mysqli_query ($link, "DROP DATABASE $delete;"); } }
@redcap для каких интересно задач требуется создание индивидуальных баз для каждого пользователя?) Вы хостинг-провайдер?
В результате получился такой код для страницы авторизации: HTML: <form method = "post"> <span>Логин</span> <br> <input type = "text" name = "login"> <br> <span>Пароль</span> <br> <input type = "text" name = "pass"> <br> <input type = "submit" name = "dologin" value = "Войти"> </form> PHP: <?php //запускаем сессию, где будут храниться данные о статусе авторизации пользователя: авторизован, или нет session_start(); //получаем логин из формы $login = $_POST['login']; //получаем уже захэшированный пароль из формы $pass = md5($_POST['pass']); //если обе переменные выбраны, то if (isset ($login,$pass)) { //подключаемся к базе данных, где хранятся логины пользователей и хэши их паролей $link = mysqli_connect('localhost', '***', '***', '***'); //получаем логин пользователя из БД $check = mysqli_query ($link, "SELECT login FROM 'users_kp' WHERE login = '$login' AND WHERE pass = '$pass'"); //создаём ассоциативный массив из этого запроса $checkarr = mysqli_fetch_array ($check); //выводим логин в переменную $userlogin = $checkarr['login']; // если логин из БД и логин из формы совпадают, то if ($userlogin==$login) { //пользователь авторизован $authorized ='yes'; //сохраняем значение переменной в сессию $authorized = $_SESSION['authorized']; } } ?>
@redcap значит задача решена? @redcap для организации хостинга есть же ISPmanager, CPanel и т. д., почему не взять их?
Про ISPManager/CPanel/VestaCP/Parallels Plesk и другие панели знаю. На данный момент использую ISPManager 5 Lite, но он платный, и, на мой взгляд, не очень удобный в плане интерфейса. Задача пока не решена, буду тестировать, ещё надо дописать проверку на страницах панели.
Вот эти две строки смущают. Если я не ошибаюсь, то переменная $delete будет существовать в любом случае, а её значение будет зависеть от существования $_GET['delete']. Разве нет?
В yii2 эта проблема решается javascript-ом, который заставляет ссылки открывать методом post, и туда добавляется просто CSRF-токен