После авторизации, на сайте необходимо выбрать роль и выбрать специальность. Однако после нажатия на кнопку "войти" появляется ошибка при добавление Роли и Специальности к записи. В логах php откладки выводится данная ошибка: php Fatal error: Uncaught Error: Undefined constant "DB_DSN" in C:\OSPanel\domains\localhost\add_role.php12 Stack trace: #0 {main} thrown in C:\OSPanel\domains\localhost\add_role.php on line 12 Помогите решить эту проблему Сама таблица в бд выглядит так: Код программы Код страницы <!DOCTYPE html> <html> <head> <title>Последний штрих</title> <link rel="stylesheet" href="Static/Styles/Avtoris.css" /> <script src="static/scripts/script1.js"></script> </head> <body> <div class="container"> <h1>Выберите кто вы?</h1> <div id="roleSelection"> <input type="radio" id="studentRadio" name="role" value="student" onchange="toggleFields()"> <label for="studentRadio">Я студент</label> <input type="radio" id="teacherRadio" name="role" value="teacher" onchange="toggleFields()"> <label for="teacherRadio">Я преподаватель</label> </div> <div id="specialtySelection" style="display: none;"> <h2>Выберите специальность:</h2> <select id="specialtyDropdown"> <option value="" selected disabled hidden>Выберите специальность</option> <?php // Подключение к базе данных $servername = "localhost"; $username = "root"; $password = ""; $dbname = "skillzap"; // Создание подключения $conn = new mysqli($servername, $username, $password, $dbname); // Проверка подключения if ($conn->connect_error) { die("Ошибка подключения: " . $conn->connect_error); } // Получение специальностей из таблицы specialties $sql = "SELECT name FROM specialties"; $result = $conn->query($sql); // Вывод вариантов специальностей в элемент <select> if ($result->num_rows > 0) { while ($row = $result->fetch_assoc()) { echo '<option value="' . $row['name'] . '">' . $row['name'] . '</option>'; } } // Закрытие соединения с базой данных $conn->close(); ?> </select> </div> <div id="keyInput" style="display: none;"> <h2>Введите ключ:</h2> <input type="text" id="adminKey" placeholder="Введите ключ"> </div> <button id="loginButton" onclick="login()">Войти</button> </div> </body> </html> PHP <!DOCTYPE html> <html> <head> <title>Последний штрих</title> <link rel="stylesheet" href="Static/Styles/Avtoris.css" /> <script src="static/scripts/script1.js"></script> </head> <body> <div class="container"> <h1>Выберите кто вы?</h1> <div id="roleSelection"> <input type="radio" id="studentRadio" name="role" value="student" onchange="toggleFields()"> <label for="studentRadio">Я студент</label> <input type="radio" id="teacherRadio" name="role" value="teacher" onchange="toggleFields()"> <label for="teacherRadio">Я преподаватель</label> </div> <div id="specialtySelection" style="display: none;"> <h2>Выберите специальность:</h2> <select id="specialtyDropdown"> <option value="" selected disabled hidden>Выберите специальность</option> <?php // Подключение к базе данных $servername = "localhost"; $username = "root"; $password = ""; $dbname = "skillzap"; // Создание подключения $conn = new mysqli($servername, $username, $password, $dbname); // Проверка подключения if ($conn->connect_error) { die("Ошибка подключения: " . $conn->connect_error); } // Получение специальностей из таблицы specialties $sql = "SELECT name FROM specialties"; $result = $conn->query($sql); // Вывод вариантов специальностей в элемент <select> if ($result->num_rows > 0) { while ($row = $result->fetch_assoc()) { echo '<option value="' . $row['name'] . '">' . $row['name'] . '</option>'; } } // Закрытие соединения с базой данных $conn->close(); ?> </select> </div> <div id="keyInput" style="display: none;"> <h2>Введите ключ:</h2> <input type="text" id="adminKey" placeholder="Введите ключ"> </div> <button id="loginButton" onclick="login()">Войти</button> </div> </body> </html> Код файла add_role.php <?php ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL); // add_role.php require_once 'vendor/autoload.php'; require_once 'config.php'; // Подключение к базе данных R::setup(DB_DSN, DB_USERNAME, DB_PASSWORD); // Получение данных из POST-запроса $role = $_POST['role']; // Проверка роли и добавление соответствующих данных if ($role === 'student') { $specialty = $_POST['specialty']; // Получение текущего пользователя $user = R::findOne('user', 'email = ?', [$_SESSION['email']]); // Проверка, что пользователь существует if ($user) { // Добавление роли и специальности к пользователю $user->role = $role; $user->specialty = $specialty; R::store($user); echo 'Роль и специальность успешно добавлены.'; } else { echo 'Пользователь не найден.'; } } elseif ($role === 'teacher') { $key = $_POST['key']; // Получение ключа из базы данных $correctKey = R::getCell('SELECT value FROM `keys` WHERE role = ?', [$role]); // Проверка ключа if ($key === $correctKey) { // Получение текущего пользователя $user = R::findOne('user', 'email = ?', [$_SESSION['email']]); // Проверка, что пользователь существует if ($user) { // Добавление роли к пользователю $user->role = $role; R::store($user); echo 'Роль успешно добавлена.'; } else { echo 'Пользователь не найден.'; } } else { echo 'Неверный ключ.'; } } else { echo 'Некорректная роль.'; } ?> PHP <?php ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL); // add_role.php require_once 'vendor/autoload.php'; require_once 'config.php'; // Подключение к базе данных R::setup(DB_DSN, DB_USERNAME, DB_PASSWORD); // Получение данных из POST-запроса $role = $_POST['role']; // Проверка роли и добавление соответствующих данных if ($role === 'student') { $specialty = $_POST['specialty']; // Получение текущего пользователя $user = R::findOne('user', 'email = ?', [$_SESSION['email']]); // Проверка, что пользователь существует if ($user) { // Добавление роли и специальности к пользователю $user->role = $role; $user->specialty = $specialty; R::store($user); echo 'Роль и специальность успешно добавлены.'; } else { echo 'Пользователь не найден.'; } } elseif ($role === 'teacher') { $key = $_POST['key']; // Получение ключа из базы данных $correctKey = R::getCell('SELECT value FROM `keys` WHERE role = ?', [$role]); // Проверка ключа if ($key === $correctKey) { // Получение текущего пользователя $user = R::findOne('user', 'email = ?', [$_SESSION['email']]); // Проверка, что пользователь существует if ($user) { // Добавление роли к пользователю $user->role = $role; R::store($user); echo 'Роль успешно добавлена.'; } else { echo 'Пользователь не найден.'; } } else { echo 'Неверный ключ.'; } } else { echo 'Некорректная роль.'; } ?> Код файла check_key.php <?php // Подключение к базе данных $servername = "localhost"; $username = "root"; $password = ""; $dbname = "skillzap"; // Создание подключения $conn = new mysqli($servername, $username, $password, $dbname); // Проверка подключения if ($conn->connect_error) { die("Ошибка подключения: " . $conn->connect_error); } if ($_SERVER["REQUEST_METHOD"] === "POST") { // Получение ключа из POST-запроса $key = $_POST["key"]; // Проверка ключа преподавателя в базе данных $sql = "SELECT * FROM teacher_keys WHERE `key` = '$key'"; $result = $conn->query($sql); if ($result->num_rows > 0) { // Ключ верный echo "success"; } else { // Ключ неверный echo "error"; } } // Закрытие соединения с базой данных $conn->close(); ?> PHP <?php // Подключение к базе данных $servername = "localhost"; $username = "root"; $password = ""; $dbname = "skillzap"; // Создание подключения $conn = new mysqli($servername, $username, $password, $dbname); // Проверка подключения if ($conn->connect_error) { die("Ошибка подключения: " . $conn->connect_error); } if ($_SERVER["REQUEST_METHOD"] === "POST") { // Получение ключа из POST-запроса $key = $_POST["key"]; // Проверка ключа преподавателя в базе данных $sql = "SELECT * FROM teacher_keys WHERE `key` = '$key'"; $result = $conn->query($sql); if ($result->num_rows > 0) { // Ключ верный echo "success"; } else { // Ключ неверный echo "error"; } } // Закрытие соединения с базой данных $conn->close(); ?> Код файла откуда создаётся сессия и берётся Email <?php ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL); // auth_callback.php // Подключение библиотеки Google API для PHP require_once 'path/to/google-api-php-client/vendor/autoload.php'; // Подключение к базе данных R::setup('mysql:host=localhost;dbname=skillzap', 'root', ''); // Конфигурационные данные $client_id = ''; $client_secret = ''; $redirect_uri = 'http://localhost/auth_callback.php'; // Создание клиента Google API $client = new Google_Client(); $client->setClientId($client_id); $client->setClientSecret($client_secret); $client->setRedirectUri($redirect_uri); // Получение кода авторизации от Google $code = $_GET['code']; // Обмен кода авторизации на маркер доступа $token = $client->fetchAccessTokenWithAuthCode($code); // Проверка подлинности маркера доступа if (isset($token['access_token'])) { $accessToken = $token['access_token']; // Установка маркера доступа для клиента Google API $client->setAccessToken($accessToken); // Получение информации о пользователе от Google $googleService = new Google_Service_Oauth2($client); $userInfo = $googleService->userinfo->get(); // Проверка адреса электронной почты пользователя $email = $userInfo->email; if (strpos($email, '@mpt.ru') !== false) { // Адрес электронной почты соответствует условию (mpt) // Сохранение информации о пользователе в сессии session_start(); $_SESSION['email'] = $email; // Редирект на главную страницу или другую страницу вашего веб-сайта header('Location: http://localhost/Posledniyshtrikh.php'); exit; } else { // Адрес электронной почты не соответствует условию (mpt) echo 'Авторизация доступна только для пользователей с почтовыми адресами mpt.'; } } else { // Ошибка получения маркера доступа echo 'Ошибка при получении маркера доступа от Google.'; } ?> PHP <?php ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL); // auth_callback.php // Подключение библиотеки Google API для PHP require_once 'path/to/google-api-php-client/vendor/autoload.php'; // Подключение к базе данных R::setup('mysql:host=localhost;dbname=skillzap', 'root', ''); // Конфигурационные данные $client_id = ''; $client_secret = ''; $redirect_uri = 'http://localhost/auth_callback.php'; // Создание клиента Google API $client = new Google_Client(); $client->setClientId($client_id); $client->setClientSecret($client_secret); $client->setRedirectUri($redirect_uri); // Получение кода авторизации от Google $code = $_GET['code']; // Обмен кода авторизации на маркер доступа $token = $client->fetchAccessTokenWithAuthCode($code); // Проверка подлинности маркера доступа if (isset($token['access_token'])) { $accessToken = $token['access_token']; // Установка маркера доступа для клиента Google API $client->setAccessToken($accessToken); // Получение информации о пользователе от Google $googleService = new Google_Service_Oauth2($client); $userInfo = $googleService->userinfo->get(); // Проверка адреса электронной почты пользователя $email = $userInfo->email; if (strpos($email, '@mpt.ru') !== false) { // Адрес электронной почты соответствует условию (mpt) // Сохранение информации о пользователе в сессии session_start(); $_SESSION['email'] = $email; // Редирект на главную страницу или другую страницу вашего веб-сайта header('Location: http://localhost/Posledniyshtrikh.php'); exit; } else { // Адрес электронной почты не соответствует условию (mpt) echo 'Авторизация доступна только для пользователей с почтовыми адресами mpt.'; } } else { // Ошибка получения маркера доступа echo 'Ошибка при получении маркера доступа от Google.'; } ?> Код script1.js function toggleFields() { var studentRadio = document.getElementById('studentRadio'); var specialtySelection = document.getElementById('specialtySelection'); var teacherRadio = document.getElementById('teacherRadio'); var keyInput = document.getElementById('keyInput'); if (studentRadio.checked) { specialtySelection.style.display = 'block'; keyInput.style.display = 'none'; } else if (teacherRadio.checked) { specialtySelection.style.display = 'none'; keyInput.style.display = 'block'; } } function login() { var role = ''; var specialty = ''; var adminKey = ''; var studentRadio = document.getElementById('studentRadio'); var specialtyDropdown = document.getElementById('specialtyDropdown'); var teacherRadio = document.getElementById('teacherRadio'); var adminKeyInput = document.getElementById('adminKey'); if (studentRadio.checked) { role = 'Студент'; specialty = specialtyDropdown.value; // Отправка данных на сервер для добавления роли и специальности студента var xhr = new XMLHttpRequest(); xhr.open("POST", "add_role.php", true); xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); xhr.onreadystatechange = function () { if (xhr.readyState === 4 && xhr.status === 200) { // Обработка ответа от сервера var response = xhr.responseText; if (response === "success") { // Роль и специальность успешно добавлены window.location.href = "Posledniyshtrikh.php"; } else { // Ошибка добавления роли и специальности alert("Произошла ошибка при добавлении роли и специальности."); } } }; xhr.send("role=" + role + "&specialty=" + specialty); } else if (teacherRadio.checked) { role = 'Преподаватель'; adminKey = adminKeyInput.value; // Проверка ключа преподавателя на сервере var xhr = new XMLHttpRequest(); xhr.open("POST", "check_key.php", true); xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); xhr.onreadystatechange = function () { if (xhr.readyState === 4 && xhr.status === 200) { // Обработка ответа от сервера var response = xhr.responseText; if (response === "success") { // Ключ верный, добавление роли преподавателя addRole(role); } else { // Ключ неверный alert("Введен неверный ключ преподавателя."); } } }; xhr.send("key=" + adminKey); } } function addRole(role) { // Отправка данных на сервер для добавления роли преподавателя var xhr = new XMLHttpRequest(); xhr.open("POST", "add_role.php", true); xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); xhr.onreadystatechange = function () { if (xhr.readyState === 4 && xhr.status === 200) { // Обработка ответа от сервера var response = xhr.responseText; if (response === "success") { // Роль успешно добавлена window.location.href = "Posledniyshtrikh.php"; } else { // Ошибка добавления роли alert("Произошла ошибка при добавлении роли."); } } }; xhr.send("role=" + role); } JS function toggleFields() { var studentRadio = document.getElementById('studentRadio'); var specialtySelection = document.getElementById('specialtySelection'); var teacherRadio = document.getElementById('teacherRadio'); var keyInput = document.getElementById('keyInput'); if (studentRadio.checked) { specialtySelection.style.display = 'block'; keyInput.style.display = 'none'; } else if (teacherRadio.checked) { specialtySelection.style.display = 'none'; keyInput.style.display = 'block'; } } function login() { var role = ''; var specialty = ''; var adminKey = ''; var studentRadio = document.getElementById('studentRadio'); var specialtyDropdown = document.getElementById('specialtyDropdown'); var teacherRadio = document.getElementById('teacherRadio'); var adminKeyInput = document.getElementById('adminKey'); if (studentRadio.checked) { role = 'Студент'; specialty = specialtyDropdown.value; // Отправка данных на сервер для добавления роли и специальности студента var xhr = new XMLHttpRequest(); xhr.open("POST", "add_role.php", true); xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); xhr.onreadystatechange = function () { if (xhr.readyState === 4 && xhr.status === 200) { // Обработка ответа от сервера var response = xhr.responseText; if (response === "success") { // Роль и специальность успешно добавлены window.location.href = "Posledniyshtrikh.php"; } else { // Ошибка добавления роли и специальности alert("Произошла ошибка при добавлении роли и специальности."); } } }; xhr.send("role=" + role + "&specialty=" + specialty); } else if (teacherRadio.checked) { role = 'Преподаватель'; adminKey = adminKeyInput.value; // Проверка ключа преподавателя на сервере var xhr = new XMLHttpRequest(); xhr.open("POST", "check_key.php", true); xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); xhr.onreadystatechange = function () { if (xhr.readyState === 4 && xhr.status === 200) { // Обработка ответа от сервера var response = xhr.responseText; if (response === "success") { // Ключ верный, добавление роли преподавателя addRole(role); } else { // Ключ неверный alert("Введен неверный ключ преподавателя."); } } }; xhr.send("key=" + adminKey); } } function addRole(role) { // Отправка данных на сервер для добавления роли преподавателя var xhr = new XMLHttpRequest(); xhr.open("POST", "add_role.php", true); xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); xhr.onreadystatechange = function () { if (xhr.readyState === 4 && xhr.status === 200) { // Обработка ответа от сервера var response = xhr.responseText; if (response === "success") { // Роль успешно добавлена window.location.href = "Posledniyshtrikh.php"; } else { // Ошибка добавления роли alert("Произошла ошибка при добавлении роли."); } } }; xhr.send("role=" + role); }
DB_DSN нету такого аргумента, посмотри в config.php и добавь или всю 12 строку замени на: R::setup('mysql:host=localhost;dbname=skillzap', 'root', ''); Код R::setup('mysql:host=localhost;dbname=skillzap', 'root', '');
lrufusl, написал, но теперь такая ошибка: Успешное подключение к базе данных!<br /> <b>Fatal error</b>: Uncaught RedBeanPHP\RedException: A database has already been specified for this key. in C:\OSPanel\domains\localhost\rb.php:12354 Stack trace: #0 C:\OSPanel\domains\localhost\rb.php(12219): RedBeanPHP\Facade::addDatabase() #1 C:\OSPanel\domains\localhost\add_role.php(12): RedBeanPHP\Facade::setup() #2 {main} thrown in <b>C:\OSPanel\domains\localhost\rb.php</b> on line <b>12354</b><br />