За последние 24 часа нас посетил 36781 программист и 7753 робота. Сейчас ищут 1722 программиста ...

Запрос к БД без перезагрузки страницы

Тема в разделе "PHP для новичков", создана пользователем max74max, 25 окт 2022.

  1. max74max

    max74max Активный пользователь

    С нами с:
    2 дек 2020
    Сообщения:
    26
    Симпатии:
    1
    Здравствуйте.
    У меня есть код, который с периодичностью в 1 секунду подгружает файл php.php
    Результатом является радномный вывод логина пользователя из БД без перезагрузки страницы.
    Меня всё устраивает, но!
    1. В файле php.php нужно заново подключать db_config.php чтобы соединится с бд
    2. Файл php.php также открывается по прямому адресу в браузере. А это плохо, т.к. нужно чтобы он работал только в определенном месте.

    Это можно было бы решить, например если в index.php задать переменную, а в php.php её проверять. Но как я понял, ajax не позволяет так сделать.

    Посоветуйте, пожалуйста, как решить эту проблему?

    index.php
    PHP:
    1.         <script>
    2.         setInterval(function () { autoloadpage(); }, 1000);
    3.         function autoloadpage() {
    4.             $.ajax({
    5.                 url: "php.php",
    6.                 type: "POST",
    7.                 success: function(data) {
    8.                     $("div#wrapper").html(data);
    9.                 }
    10.             });
    11.         }
    12.         </script>
    13.  
    14.     <div id="wrapper">
    15.     contents will be changed automatically.
    16.     </div>
    php.php
    PHP:
    1. include "db_config.php";
    2.  
    3. $rnd = rand (1,10);
    4. $stmt = $mysqli->prepare("SELECT * FROM `users` WHERE id=?");
    5. $stmt->bind_param("s", $rnd);
    6. $stmt->execute();
    7. $result7 = $stmt->get_result();
    8. while ($row7 = mysqli_fetch_assoc($result7)) {
    9.     $login = $row7["login"];
    10. }
    11.     echo "Login is: ".$login;
     
    #1 max74max, 25 окт 2022
    Последнее редактирование: 25 окт 2022
  2. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.861
    Симпатии:
    656
    Нет проблемы.

    Но если нужно защитить вывод, используй авторизацию.

    Если оч. надо отдавать в ответ только на AJAX-запросы, различай AJAX- и неAJAX-запросы. Но в этом обычно нет необходимости кроме случая, когда нужно реально сделать роутинг по типу запроса (чтобы, например, выдавать разный тип контента).
     
  3. max74max

    max74max Активный пользователь

    С нами с:
    2 дек 2020
    Сообщения:
    26
    Симпатии:
    1
    Если я пропишу в php.php
    PHP:
    1. if(!$code) die('hacking attempt');
    а в index.php
    PHP:
    1. $code = true;
    То php.php не видет это переменную. Вот в этом и проблема
     
  4. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.861
    Симпатии:
    656
    Вроде используете AJAX, а что это такое, не знаете :(
    --- Добавлено ---
    Нужно в клиентском коде указывать признаки AJAX-запроса.
    --- Добавлено ---
    А на сервере отлавливать.
     
  5. max74max

    max74max Активный пользователь

    С нами с:
    2 дек 2020
    Сообщения:
    26
    Симпатии:
    1
    Ага, я вообще не знаю Ajax. Пример взял с интернета, оказался рабочим.
    Можно ткнуть носом где, что указывать признаки AJAX-запроса?
     
  6. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.874
    Симпатии:
    753
    Адрес:
    Татарстан
    ну например так

    PHP:
    1. function isAjax() {
    2.         return
    3.             isset($_SERVER['HTTP_X_REQUESTED_WITH']) &&
    4.             !empty($_SERVER['HTTP_X_REQUESTED_WITH']) &&
    5.             strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest';
    6.     }
    то что про какую то защиту пишите - можно и нужно использовать CSRF токен для защиты
    суть - при генерации страницы - генерится уник. токен, записывается в сессию .... при Аякс запросе - на бэк передаете его тоже - там проверяете с текущей сессией

    Не хотите светить адрес и имя файла реальное - ну велкам в ЧПУ и единую точку входа
     
  7. Александр Петрович

    Александр Петрович Активный пользователь

    С нами с:
    14 ноя 2019
    Сообщения:
    12
    Симпатии:
    0
    Ajax позволяет так сделать
    Код (Text):
    1. $.ajax({
    2.                 url: "php.php",
    3.                 type: "POST",
    4.                 data: {
    5.                         key: value
    6.                 },
    7.                 success: function(data) {
    8.                     $("div#wrapper").html(data);
    9.                 }
    10.             });
    И в файле php.php у вас придет $_POST[key] = value;