从数据库IP绘制每个用户位置的标记

时间:2017-07-09 12:17:26

标签: javascript php jquery ajax

我的数据库中有一个用户表,用于存储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);`

1 个答案:

答案 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>