2016-02-16 4 views
0

Я пытаюсь создать функцию PHP, которую я смогу использовать в javascript-коде.Выполнение MySQL запросов с использованием функции 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 или что-то еще, поэтому я не знаю, что делать.

+0

Я думаю, что вы смешиваете серверный и клиентский код. Вы не хотите иметь какие-либо запросы или информацию о подключении в своем коде на стороне клиента (например, вы здесь). Если вы хотите получить данные через Javascript, то да, вы правы, вы должны использовать какой-то вызов AJAX для веб-службы. Затем веб-служба будет размещать ваш запрос в базе данных. Я определенно рекомендую сделать некоторые исследования в AJAX и веб-сервисах. – xboxremote

ответ

2

Подробнее о ООП (объектно-ориентированное программирование) необходимо узнать более подробно. Возможно, поиск инъекций зависимостей или исключений. Кроме того, вам нужно создать PHP-скрипт, который принимает ваши запросы ajax и вызывает необходимые функции или методы, которые должны быть разделены на собственные файлы и классы. Это будет разделять разные уровни данных друг от друга (т. Е. Представление, бизнес-логика, данные). Вы также должны потратить некоторое время на изучение того, что такое MVC (Model View Controller). Это поможет понять важность разделения.

На данный момент я покажу вам быстрое решение вашей проблемы. Препятствует представьте структуру файла все в том же каталоге, например:

|--- ajax_requests.php 
|--- Database.php 
|--- Functions.php 
|--- index.php 

index.php где/JQuery находится ваш HTML:

<!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 получает запрос, получает объект базы данных и отправляет его в функцию объект, то он проверяет, что запрос существует как метод класса функций, если это произойдет, он запускает метод и повороты результат в формате 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()); 
     }; 
    } 


} 

Это грубый макет того, что я хотел бы сделать. Надеюсь, вы поняли, как все это разделено, чтобы вы могли легко добавлять функции в свое приложение по мере его роста.

+0

Если я хочу, чтобы функция, которая запрашивала, поступает из аргумента, я должен делать 'public function get_grupy_json ($ query) { $ result = $ this-> db-> dataQuery ($ query); return $ result-> fetchAll(); } ' , но где я могу позвонить get_grupy_json ($ query)? – stevenhawkingsbiggestfan

+0

вы делаете эти вызовы в своем запросе JSON, но вы не передаете запрос. Это не рекомендуется, так как ваше приложение будет открыто для SQL-инъекции. Создавайте запросы, необходимые статически в ваших PHP-функциях, затем вызывайте их через AJAX. – CodeGodie

+0

Итак, если я хочу сделать, например, 5 разных запросов, тогда мне нужно написать 5 функций? В файле functions.php – stevenhawkingsbiggestfan

0

AJAX не работает. В принципе, продукт PHP - это HTML-страница (с JS), которая отображается по запросу в браузере. Когда пользователь выполняет действие, это должно привести к отображению данных, полученных AJAX, браузер делает другой запрос, возможно, к другому скрипту PHP. Результат этого запроса не отображается пользователю, как при выполнении первого запроса, скорее он передается функции в JS отображаемой на данный момент страницы (что делает ее AJAX). Затем эта функция может обрабатывать данные любым способом.

Посмотрите на следующее: http://www.w3schools.com/jquery/jquery_ajax_intro.asp.

Смежные вопросы