Ajax с JS на PHP (для выполнения запроса sql), затем с PHP на JS

Я использую метод $.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.info("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.

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

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

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

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

Rory McCrossan 12.06.2019 12:27

Вы должны вернуть ответ от php в формате json, а затем использовать его в конце js, как хотите.

mega6382 12.06.2019 12:27
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
2
59
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

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

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

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

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

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

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

$.ajax({
 url: 'requetes.php',
 type: 'POST',
 data: {
  datepicker: formattedDate
},
success: function(data) {             
   $("#sql-results").html(data);            
},
 error: function(xhr) {
   console.info("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);"
    }
 }
Ответ принят как подходящий

Вы должны структурировать свой ответ 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 (в случае, если 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, а затем вы создаете свою строку локально.

Сторона PHP:

$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 (в случае, если 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()

Подробнее о json_encoding читайте здесь: https://www.php.net/manual/en/function.json-encode.php

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

В моем файле 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. Но он все еще работает, так что... Думаю, все в порядке. :)

Ты обалденный !

Другие вопросы по теме