Ajax из JS в PHP (для выполнения SQL-запроса), затем из PHP в JS - PullRequest
1 голос
/ 12 июня 2019

Я использую метод $.ajax для передачи данных из моего JS-файла в мой PHP-файл «Requetes.php». Этот PHP-файл выполняет SQL-запрос в зависимости от переменной, которая есть в моем JS-файле.

Мой Javascript:

$.ajax({
  url: 'requetes.php',
  type: 'POST',
  data: {
    datepicker: formattedDate
  },
  success: function(data) {             
    $("#sql-results").text(data);            
  },
  error: function(xhr) {
    console.log("echec de l'ajax !");
  }
})

В моем PHP-файле:

$rq_datepicker = "
    SELECT * 
    FROM partie
    WHERE date = '"$_POST['datepicker']"'";


$query = mysqli_query($connect, $rq_datepicker);
while ($result = mysqli_fetch_array($query)) {  
    echo "Il y a ".$result['Reussie']." partie(s)";
    echo "Il y a ".$result['Perdue']." partie(s);"
}

Я сократил код, чтобы его было проще объяснить, но это работает отлично. Я могу получить переменную «datepicker» из JS в PHP, чтобы я мог выполнить свой запрос SQL в зависимости от этой переменной. И строка $("#sql-results").text(data); возвращает мои 2 эха из моего файла PHP.

МОЯ ПРОБЛЕМА:

Я просто хочу получить доступ к этим 2 переменным $result['Reussie'] & $result['Perdue'] из моего файла JS.

Я пробовал много вещей, таких как использование $ .ajax с методом GET или $ .get, но безуспешно.

Ответы [ 4 ]

1 голос
/ 12 июня 2019

Во-первых, ваш код уязвим для внедрения SQL, вы должны использовать PDO с подготовленными выражениями для построения запросов.

Другое дело, что вы просто создаете массив с парой ключ-значение и затем возвращаете этот массив, используя кодировку в json.

Пример: echo json_encode(array('foo' => 'bar'));

, а затем в js-коде для ajax проанализируйте data, используя var foo_result = JSON.parse(data['foo']);, теперь вы можете получить доступ к нужной переменной.

Просто дайте мне знать, если вы выполнили свои требования.

0 голосов
/ 12 июня 2019

Да, ребята, это работает!Большое спасибо !Поэтому я использовал это решение:

В моем файле PHP:

$response['data'] = array('Reussie' => $result['Reussie'], 'Perdue' => $result['Perdue']);
echo json_encode($response);

В моем файле JS:

var response = JSON.parse(data);
var stringReussie = "Il y a "+response.data.Reussie+" partie(s)";
var stringPerdue = "Il y a "+response.data.Perdue+" partie(s)";
$("#sql-results").text(stringReussie+stringPerdue);

Я просто не понимаю, почему я не мог 'поставить заголовок.Похоже, это "преобразовать" весь мой файл index.php.Но это все еще работает так ... Я думаю, это нормально.:)

Ты потрясающий!

0 голосов
/ 12 июня 2019

Вы должны структурировать свой ответ PHP так, чтобы ваши данные были доступны в JS.Для этого обычно вы используете JSON таким образом, что вы получаете данные, которые уже обработаны, и вам просто нужно получить к ним локальный доступ в JS.

В этом случае у вас есть 2 переменные, к которым вы хотите получить доступ.Но я думаю, что вы также хотите отформатировать их в некоторый объект, который вы выбрали в jQuery впоследствии.

Для этого есть 2 способа.

Первый - выполнить всю обработку в PHP ипросто сделайте переменные доступными.

Сторона PHP:

$rq_datepicker = "
    SELECT * 
    FROM partie
    WHERE date = '"$_POST['datepicker']"'";


    $query = mysqli_query($connect, $rq_datepicker);
    while ($result = mysqli_fetch_array($query)) { 
            $response['dataRaw'] = array('Reussie' => $result['Reussie'],
                                     'Perdue' => $result['Perdue']);
            $response['dataProcessed'] = array('Reussie' =>  "Il y a ".$result['Reussie']." partie(s)",
                                    'Perdue' => "Il y a ".$result['Perdue']." partie(s)");
        }
    }
echo json_encode($response); // <-- using this will encode the variable according to the json specifics

Как только PHP обрабатывает данные, в JS вам просто нужно получить к ним доступ в вашей анонимной функции, привязанной к успешному вызову Ajax

JS Side (в случае, если HTTP-запрос идет 200):

success: function( data )
{               
    var response = JSON.parse(data);
    $("#sql-results").text(response.dataProcessed.Reussie+response.dataProcessed.Perdue);
    // to access the variables instead:
    // response.dataRaw.Reussie
    // response.dataRaw.Perdue
}

Второй - PHP просто передает переменные в JS, а затем вы там строите свою строку.

PHPside:

$rq_datepicker = "
    SELECT * 
    FROM partie
    WHERE date = '"$_POST['datepicker']"'";


    $query = mysqli_query($connect, $rq_datepicker);
    while ($result = mysqli_fetch_array($query)) { 
            $response['data'] = array('Reussie' => $result['Reussie'],
                                     'Perdue' => $result['Perdue']);
        }
    }
echo json_encode($response); // <-- using this will encode the variable according to the json specifics

В этом случае у вас нет предварительно обработанных данных, поэтому вы должны создавать свои строки локально

JS Side (в случае, если HTTP-запрос идет 200):

success: function( data )
{               
    // to access the variables in this case:
    // response.data.Reussie
    // response.data.Perdue
    var response = JSON.parse(data);
    var stringReussie = "Il y a "+response.data.Reussie+" partie(s)";
    var stringPerdue = "Il y a "+response.data.Perdue+" partie(s)";
    $("#sql-results").text(stringReussie+stringPerdue);
}

Некоторые дополнительные:

Использование только json_encode с эхом в качестве вывода без объявления типа ответа, обычно устанавливает тип ответа "application / json".

echo json_encode($response);

Чтобы избежать этого «обычно» и обеспечитьтип содержимого часть ответа «application / json» (если это так), вы должны также установить заголовок ответа.

header("Content-type:application/json")

Дополнительная информация о заголовках: PHP Manual header ()

О json_encoding, читайте дополнительную информацию здесь: https://www.php.net/manual/en/function.json-encode.php

0 голосов
/ 12 июня 2019

Попробуйте это:

$.ajax({
 url: 'requetes.php',
 type: 'POST',
 data: {
  datepicker: formattedDate
},
success: function(data) {             
   $("#sql-results").html(data);            
},
 error: function(xhr) {
   console.log("echec de l'ajax !");
 }
 });



$datepick = strip_tags($_POST['datepicker']);
$rq_datepicker = "
SELECT * 
FROM partie
WHERE date = '$datepick'";


$query = $connet->query($rq_datepicker);
while ($result = $query->fetch_assoc()) {  
        echo "Il y a ".$result['Reussie']." partie(s)";
        echo "Il y a ".$result['Perdue']." partie(s);"
    }
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...