Я работаю над поиском в реальном времени, и мне нужно передать данные 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 не вернет никаких данных, я надеюсь, что у кого-то есть ответ.






Измените это:
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); перед зацикливанием
Не уверен, о чем вы спрашиваете. Может быть, это то, что вы хотите знать? Измените "$ search_value%" на "% $ search_value%", это позволит проверить, находится ли эта строка где-нибудь внутри поля столбца. Если это не поможет, можете ли вы дать дополнительную информацию?
Вы должны создать массив со всеми результатами в вашей функции поиска, а затем в результатах цикла ответа 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>
Да, это работает так, но я хочу получить все данные из базы данных, даже идентичные данные.