Загрузка...

Не сохраняются данные в БД.

Тема в разделе Backend создана пользователем Dimi4da 14 июн 2023. 187 просмотров

Загрузка...
  1. Dimi4da
    Dimi4da Автор темы 14 июн 2023 1 6 июл 2018
    После авторизации, на сайте необходимо выбрать роль и выбрать специальность. Однако после нажатия на кнопку "войти" появляется ошибка при добавление Роли и Специальности к записи.

    В логах 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

    Помогите решить эту проблему:despair:


    [IMG]

    Сама таблица в бд выглядит так:
    [IMG]

    Код страницы

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

    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);
    }
     
  2. lrufusl
    lrufusl 15 июн 2023 12 18 окт 2021
    DB_DSN нету такого аргумента, посмотри в config.php и добавь или всю 12 строку замени на:
    Код
    R::setup('mysql:host=localhost;dbname=skillzap', 'root', '');
     
    15 июн 2023 Изменено
    1. Dimi4da Автор темы
      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 />
    2. lrufusl
      Dimi4da,
Top