Получите несколько данных php через json ajax с тем же именем

Я работаю над поиском в реальном времени, и мне нужно передать данные php в ajax с помощью json, но проблема в том, что я не могу передать массив, содержащий 2 или более одинаковых значения, это код php:

<?php
    class search{
        public function gettingvalues($search_value){
            require_once('db_conx.php');
            $dir = "http://localhost/usersimage/";
            $sql = "SELECT name,img,username FROM users WHERE username like '$search_value%' || name like '$search_value%'";
            $query = mysqli_query($conx,$sql);
            if ($query) {
                if (mysqli_num_rows($query) > 0) {
                    while ($row = mysqli_fetch_array($query)) {
                        $img = $row['img'];
                        $name = $row['name'];
                        $username = $row['username'];
                        $json = array('img' => $img, 'name' => $name, 'username' => $username);
                        echo json_encode($json);
                    }
                }
            }
        }
    }
?>

А это индексный код:

<?php

    if (isset($_POST['data'])) {
        require('search.php');
        $search = new search;
        $search->gettingvalues($_POST['data']);
        header('Content-Type: application/json; charset=utf-8');
        die();
    }
?>
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script type = "text/javascript">
    $(document).ready(function(){
        $('input').keyup(function(){
            var value= $('input').val();
            $.ajax({
                type: "POST",
                url: "",
                data: {data: value},
                datatype: "json",
                success: function(json_data){
                    $('#feedback').html(json_data.name);
                }
            });
        });
    });
</script>
<input type = "text" name = "search" placeholder = "looking for?">
<div id = "feedback"></div>

Итак, если мой массив содержит 2 или более одинаковых имени, ajax не вернет никаких данных, я надеюсь, что у кого-то есть ответ.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать 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 и хотите разрабатывать...
0
0
478
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Измените это:

                while ($row = mysqli_fetch_array($query)) {
                    $img = $row['img'];
                    $name = $row['name'];
                    $username = $row['username'];
                    $json = array('img' => $img, 'name' => $name, 'username' => $username);
                    echo json_encode($json);
                }

К:

while ($row = mysqli_fetch_array($query)) {
    $img = $row['img'];
    $name = $row['name'];
    $username = $row['username'];
    $json[] = array('img' => $img, 'name' => $name, 'username' => $username);
}
echo json_encode($json);

Внутри вашего ответа для jQuery извлеките данные json, зациклив их. Обязательно используйте var obj = jQuery.parseJSON (json_data); перед зацикливанием

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

Ahmad Salameh 25.06.2018 16:18

Не уверен, о чем вы спрашиваете. Может быть, это то, что вы хотите знать? Измените "$ search_value%" на "% $ search_value%", это позволит проверить, находится ли эта строка где-нибудь внутри поля столбца. Если это не поможет, можете ли вы дать дополнительную информацию?

Mohammad Amin 25.06.2018 16:24
Ответ принят как подходящий

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

Функция поиска

<?php
    class search{
        public function gettingvalues($search_value){
            require_once('db_conx.php');
            $dir = "http://localhost/usersimage/";
            $sql = "SELECT name,img,username FROM users WHERE username like '$search_value%' || name like '$search_value%'";
            $query = mysqli_query($conx,$sql);
            $results = []; //<!---
            if ($query) {
                if (mysqli_num_rows($query) > 0) {
                    while ($row = mysqli_fetch_array($query)) {
                        $img = $row['img'];
                        $name = $row['name'];
                        $username = $row['username'];
                        $json = array('img' => $img, 'name' => $name, 'username' => $username);
                        $results[] = $json;  //<!---
                    }
                }
            }
            echo json_encode($results); //<!---
        }
    }
?>

Аякс

<script type = "text/javascript">
    $(document).ready(function(){
        $('input').keyup(function(){
            var value= $('input').val();
            $.ajax({
                type: "POST",
                url: "",
                data: {data: value},
                datatype: "json",
                success: function(json_data) {
                  var names = [];
                  $.each(json_data, function(index, element) {
                    names.push(element.name)
                  })
                  $('#feedback').html(names.join(','));
                }
            });
        });
    });
</script>
<input type = "text" name = "search" placeholder = "looking for?">
<div id = "feedback"></div>

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