Я пытаюсь создать функцию PHP, которую я смогу использовать в javascript-коде.
<!DOCTYPE html> <?php include 'pdo_connect.php'; function pleaseWork($query) { return dataQuery($query)->fetchAll(); } function makeQuery($query) { $work = pleaseWork($query); $json = json_encode($work); } ?> <html> <head> <script src="//ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script> <title>Admin check</title> <meta charset="UTF-8"> </head> <body> <script type='text/javascript'> <?php makeQuery("SELECT * FROM `grupy`");?> var jArray = <?= $json ?>; console.log(jArray); </script>
Конечно, это не работает, потому что код в блоке JS ничего не знает о переменных с начала файла. Как мне это сделать? Я никогда не использовал AJAX или что-то еще, поэтому я не знаю, что делать.
Вам нужно узнать о ООП (объектно-ориентированное программирование) более подробно. Возможно, поиск инъекций зависимостей или исключений. Кроме того, вам нужно создать PHP-скрипт, который принимает ваши запросы ajax и вызывает необходимые функции или методы, которые должны быть разделены на собственные файлы и классы. Это отделит разные уровни данных друг от друга (например, презентация, бизнес-логика, данные). Вы также должны потратить некоторое время на изучение того, что такое MVC (Model View Controller). Это поможет понять важность разделения.
Пока я покажу вам быстрое решение вашей проблемы. Предположим, что ваша файловая структура находится в одном каталоге:
|--- ajax_requests.php |--- Database.php |--- Functions.php |--- index.php
index.php – где находится ваш HTML / jQuery:
<!DOCTYPE html> <html> <head> <script src="//ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script> <title>Admin check</title> <meta charset="UTF-8"> </head> <body> <script type='text/javascript'> $.ajax({ type: "post", url: "ajax_requests.php", data: {request: "get_grupy_json"}, success: function(result){ console.log(result); } }); </script>
Обратите внимание, как мы используем jQuery, чтобы сделать наш запрос Ajax. Мы отправляем post
запрос в файл ajax_requests.php
отправляя get_grupy_json
качестве нашего параметра request
. Никакие SQL-запросы не должны присутствовать в ваших интерфейсных представлениях.
ajax_requests.php получает запрос, получает объект базы данных и отправляет его объекту Functions, а затем проверяет, существует ли этот запрос как метод класса Functions, он выполняет метод и превращает результат в json (помните чтобы добавить проверку ошибок самостоятельно):
<?php if (!empty($_POST)) { $method = $_POST['request']; include 'Database.php'; include "Functions.php"; $db = new Database(); $functions = new Functions($db); if (method_exists($functions, $method)) { $data = $functions->$method(); header('Content-Type: application/json'); echo json_encode($data); } }
functions.php
class Functions { private $db; public function __construct(Database $db) { $this->db = $db; } public function get_grupy_json() { $query = "SELECT * FROM `grupy`"; $result = $this->db->dataQuery($query); return $result->fetchAll(); } }
database.php
class Database { private $conn = null; public function __construct() { try { $username = "root"; $password = "root"; $servername = "localhost"; $dbname = "test"; $this->conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password); $this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch (PDOException $e) { trigger_error("Error: " . $e->getMessage()); } } public function dataQuery($query, $params = array()) { try { $stmt = $this->conn->prepare($query); $stmt->execute($params); return $stmt; } catch (PDOException $e) { trigger_error("Error: " . $e->getMessage()); }; } }
Это грубый макет того, что я буду делать. Надеюсь, вы поняли, как все это разделено, чтобы вы могли легко добавлять функции в свое приложение по мере его роста.
AJAX не работает так. В принципе, продукт PHP – это HTML-страница (с JS), которая отображается по запросу в браузере. Когда пользователь выполняет действие, это должно привести к отображению данных, полученных AJAX, браузер делает другой запрос, возможно, к другому скрипту PHP. Результат этого запроса не отображается пользователю, как при выполнении первого запроса, скорее он передается функции в JS отображаемой на данный момент страницы (что делает ее AJAX). Затем эта функция может обрабатывать данные любым способом.
Посмотрите на это: http://www.w3schools.com/jquery/jquery_ajax_intro.asp .