我的数据库中有一个用户表,用于存储IP地址。 我有一个api,可以获得用户的经纬度。
首先,我需要让每个用户都知道并且很长。
目前,我的代码只返回我数据库中的最后一个用户而且很长。
这是我的代码,试图让每个客户长期和朗return:
$user_grab = mysqli_query($con, "SELECT * FROM users");
while($users_ = mysqli_fetch_array($user_grab)) {
$username_ = $users_['username'];
$client_ip = $users_['ip'];
//This is for getting each users location on our map
$ip = $client_ip;
$geocode = file_get_contents("http://freegeoip.net/json/{$ip}");
$output = json_decode($geocode);
$client_latitude = $output->latitude;
$client_longitude = $output->longitude;
}
然后我使用以下命令将其返回到我的家庭PHP页面:
$response = array('client_latitude'=>$client_latitude,'client_longitude'=>$client_longitude);
echo json_encode($response);
我收到了以下JS / JQUERY代码的AJAX请求:
<script>
function fetchOnline() {
$.ajax({
url: "includes/get_dash_settings.php",
context: document.body,
type: 'POST',
data: {get_data:true},
success: function(value) {
var data = JSON.parse(value);
$('#lat').html(data['client_latitude']);
$('#long').html(data['client_longitude']);
},
complete:function(){
setTimeout(fetchOnline,5000);
}
})
}
$(document).ready(function() { setInterval(fetchOnline,5000); });
</script>
最后,我尝试将这些显示在div中进行测试。
最终,我希望他们进入jVectorMap Markers JS代码,这样它就可以在每个用户lang和long上绘制地图上的标记。
但就目前而言,并没有让每个用户充满信心。只有我数据库中的最后一个用户
更新后的代码
以下发布的Sumarai代码不起作用。 它没有更新div id - 所有坐标。 有谁知道我的版本有什么问题?
我在问我的问题时使用了一些不同的代码。我从一开始就使用它,但没有在这里发布,因为我认为这不会很困难。
我的新脚本是相同的,但我现在在单独的文件中调用它们,因为我已经在我的其他文件中调用了一个数组(get_dash_settings)。
这是我主PHP文件中的脚本:
<script>
function fetchOnline() {
$.ajax({
url: "includes/get_dash_settings.php",
context: document.body,
type: 'POST',
data: {get_data:true},
success: function(value) {
var data = JSON.parse(value);
$('#totalUsers').html(data['totalUsers']);
$('#totalOnline').html(data['totalOnline']);
$('#freeModeStatus').html(data['freemode']);
$('#bypassesStatus').html(data['bypasses']);
$('#isOnline').html(data['client_is_online']);
},
complete:function(){
setTimeout(fetchOnline,5000);
}
});
$.ajax({
url: "includes/get_dash_map.php",
context: document.body,
type: 'POST',
data: {get_data_:true},
success: function(value_) {
const data_ = JSON.parse(value_);
const $parent = $('#all-the-coordinates');
for (const row of data) {
const $element = $('<span></span>');
$element.text(`${data_['client_latitude']}, ${data_['client_longitude']}`);
$parent.append($element);
}
},
complete:function(){
setTimeout(fetchOnline,5000);
}
});
}
$(document).ready(function() { setInterval(fetchOnline, 5000); });
</script>
我的get_dash_map.php:
$user_grab = mysqli_query($con, "SELECT * FROM users");
$response = [];
while($users_ = mysqli_fetch_array($user_grab)) {
$client_ip = $users_['ip'];
//This is for getting each users location on our map
$ip = $client_ip;
$geocode = file_get_contents("http://freegeoip.net/json/{$ip}");
$output = json_decode($geocode);
$client_latitude = $output->latitude;
$client_longitude = $output->longitude;
$response[] = ['client_latitude' => $client_latitude,'client_longitude' => $client_longitude];
}
echo json_encode($response);`
答案 0 :(得分:2)
由于你想要获得一堆坐标,因此将它们返回到各种类型的数组中是有意义的。您目前只获得最后一个,因为您正在覆盖这些值。创建一个条目,然后将该条目作为数组项添加到响应中。您可以使用[]
后缀轻松创建新的数组项。 $response[] = $x
会将一个数组项添加到包含$response
的{{1}}。
$x
你显然也需要改变你的javascript,因为它目前需要一个带有两个键的Object,但你现在得到了一个对象数组。
$user_grab = mysqli_query($con, "SELECT * FROM users");
$response = [];
while($users_ = mysqli_fetch_array($user_grab)) {
$client_ip = $users_['ip'];
//This is for getting each users location on our map
$ip = $client_ip;
$geocode = file_get_contents("http://freegeoip.net/json/{$ip}");
$output = json_decode($geocode);
$client_latitude = $output->latitude;
$client_longitude = $output->longitude;
$response[] = [
'client_latitude' => $client_latitude,
'client_longitude' => $client_longitude
];
}
echo json_encode($response);
在html中
<script>
function fetchOnline() {
$.ajax({
url: "includes/get_dash_settings.php",
context: document.body,
type: 'POST',
data: {get_data:true},
success: function(value) {
const data = JSON.parse(value);
const $parent = $('#all-the-coordinates');
for (const row of data) {
const $element = $('<span></span>');
$element.text(`${row['client_latitude']}, ${row['client_longitude']}`);
$parent.append($element);
}
}
})
}
$(document).ready(function() { setInterval(fetchOnline, 5000); });
</script>