Здравствуйте. У меня есть код, который с периодичностью в 1 секунду подгружает файл php.php Результатом является радномный вывод логина пользователя из БД без перезагрузки страницы. Меня всё устраивает, но! 1. В файле php.php нужно заново подключать db_config.php чтобы соединится с бд 2. Файл php.php также открывается по прямому адресу в браузере. А это плохо, т.к. нужно чтобы он работал только в определенном месте. Это можно было бы решить, например если в index.php задать переменную, а в php.php её проверять. Но как я понял, ajax не позволяет так сделать. Посоветуйте, пожалуйста, как решить эту проблему? index.php PHP: <script> setInterval(function () { autoloadpage(); }, 1000); function autoloadpage() { $.ajax({ url: "php.php", type: "POST", success: function(data) { $("div#wrapper").html(data); } }); } </script> <div id="wrapper"> contents will be changed automatically. </div> php.php PHP: include "db_config.php"; $rnd = rand (1,10); $stmt = $mysqli->prepare("SELECT * FROM `users` WHERE id=?"); $stmt->bind_param("s", $rnd); $stmt->execute(); $result7 = $stmt->get_result(); while ($row7 = mysqli_fetch_assoc($result7)) { $login = $row7["login"]; } echo "Login is: ".$login;
Нет проблемы. Но если нужно защитить вывод, используй авторизацию. Если оч. надо отдавать в ответ только на AJAX-запросы, различай AJAX- и неAJAX-запросы. Но в этом обычно нет необходимости кроме случая, когда нужно реально сделать роутинг по типу запроса (чтобы, например, выдавать разный тип контента).
Если я пропишу в php.php PHP: if(!$code) die('hacking attempt'); а в index.php PHP: $code = true; То php.php не видет это переменную. Вот в этом и проблема
Вроде используете AJAX, а что это такое, не знаете --- Добавлено --- Нужно в клиентском коде указывать признаки AJAX-запроса. --- Добавлено --- А на сервере отлавливать.
Ага, я вообще не знаю Ajax. Пример взял с интернета, оказался рабочим. Можно ткнуть носом где, что указывать признаки AJAX-запроса?
ну например так PHP: function isAjax() { return isset($_SERVER['HTTP_X_REQUESTED_WITH']) && !empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest'; } то что про какую то защиту пишите - можно и нужно использовать CSRF токен для защиты суть - при генерации страницы - генерится уник. токен, записывается в сессию .... при Аякс запросе - на бэк передаете его тоже - там проверяете с текущей сессией Не хотите светить адрес и имя файла реальное - ну велкам в ЧПУ и единую точку входа
Ajax позволяет так сделать Код (Text): $.ajax({ url: "php.php", type: "POST", data: { key: value }, success: function(data) { $("div#wrapper").html(data); } }); И в файле php.php у вас придет $_POST[key] = value;