PHP не читает параметр $ _GET при отправке запроса AJAX - PullRequest
0 голосов
/ 27 августа 2018

Я боролся с этим уже несколько месяцев и, наконец, дошел до того, что мне нужно исправить это в моем проекте.

Дело в том, что я отправляю ajax-запрос в php-файл, где мне нужно прочитать текущее значение $ _GET ['user_id'], чтобы вставить запрос. Но php просто не будет читать значение $ _GET ['user_id'] с текущего URL-адреса, как если бы оно не существовало.

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

Вот фрагмент кода, который предназначен только для пояснения:

// PHP

<?php
require_once "db.php";

$query = "INSERT INTO followers(follower, following) ";
$query .= "VALUE('{$_SESSION['id_user']}','{$_GET['user_id']}' )";
$result = mysqli_query($connect_db, $query);

?>

// AJAX

<script>
    $('.js-follow_user_btn').click(function(){
            follow_unfollow_action();
        });


        function follow_unfollow_action(){

            $.ajax({
                type: 'POST',
                url: 'follow_user.php',
                success: function(data) {
                    alert('done');
                }
            });

        }
</script>

Ответы [ 6 ]

0 голосов
/ 27 августа 2018

Вы пытаетесь получить доступ к параметру $_GET url из файла php, который не запускается непосредственно из браузера.

Чтобы использовать значение в вызове php ajax, вам нужно использовать этот метод для получения значения

$.ajax({
    type: 'POST',
    url: 'follow_user.php',
    data: { user_id: user_id },
    success: function(data) {
        alert('done');
    }
});


//follow user
<?php
require_once "db.php";

$query = "INSERT INTO followers(follower, following) ";
$query .= "VALUE('{$_SESSION['id_user']}','{$_POST['user_id']}' )";
$result = mysqli_query($connect_db, $query);

?>
0 голосов
/ 27 августа 2018

PHP $_GET superglobal заполняется данными из строки запроса запрошенного URL-адреса (независимо от метода HTTP, используемого для выполнения запроса).

Это URL, который вы используете:

url: 'follow_user.php',

В нем нет строки запроса.

Возможно, вы ожидаете, что он скопирует строку запроса со страницы, содержащей JavaScript. Это не работает так, вам нужно предоставить данные явно.


Немного в стороне:

Вы вставляете данные в базу данных. Вы должны использовать запрос POST для этого (и вы это делаете), но вы должны передавать данные в теле запроса (в противном случае вы, скорее всего, случайно создадите что-то, что неправильно отвечает на запрос GET.

Итак, обо всем по порядку: измените PHP, чтобы использовать $_POST вместо $_GET.

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


ОК, затем вам нужно получить данные из строки запроса текущей страницы.

Вы можете прочитать это в JavaScript. Этот ответ объясняет несколько подходов.

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

var user_id = (new URL(url_string)).searchParams.get("user_id");
// See the answer linked above to see how this works and for compatibility with old browsers

$.ajax({
    type: 'POST',
    url: 'follow_user.php',
    data: { user_id: user_id },
    success: function(data) {
        alert('done');
    }
});

… запомните, это помещает его в тело запроса, поэтому вам нужно прочитать его с $_POST, а не $_GET.

0 голосов
/ 27 августа 2018

Прежде всего, вам нужно изменить ваш метод с GET на POST, как уже отмечали люди.

Во-вторых, вам действительно нужно указать параметр user_id в URL. Кодируйте параметр, используя функцию urlencode:

<script>
    $('.js-follow_user_btn').click(function(){
            follow_unfollow_action();
        });


        function follow_unfollow_action(){

            $.ajax({
                type: 'GET',
                url: 'follow_user.php?user_id='.urlencode($user_id),
                success: function(data) {
                    alert('done');
                }
            });

        }
</script>

Не забудьте urldecode параметр в вашем follow_user.php скрипте.

0 голосов
/ 27 августа 2018

Поскольку у вас есть type: 'POST', в вызове ajax, сделайте его type: 'GET', или удалите эту строку по умолчанию, вызов имеет GET метод

0 голосов
/ 27 августа 2018

В вашем ajax-запросе вы используете тип метода POST, который будет получен в $ _POST superglobal в php. Если вы хотите получить его с помощью get, измените его на тип метода GET, но, поскольку вы отправляете информацию в свою базу данных, я считаю, что вам лучше придерживаться POST.

Семантически говоря, в веб-сленге POST - это «сохранение» данных, а GET - получение ресурсов.

Ура! * * 1005

0 голосов
/ 27 августа 2018

Просто измените POST на GET в вашем коде + передайте переменные в данных или в URL

 $.ajax({
    type: 'GET',
    url: 'follow_user.php',
    data: { user_id: "XXXXXX"}
    success: function(data) {
        alert('done');
    }
 });

Или лучше! Позвольте POST в вашем коде JS и получите переменную с $ _POST +, чтобы передать данные

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...