使用jquery获取用户ip并发布到php页面,ip返回空

时间:2017-11-08 10:45:15

标签: javascript php jquery ajax ip

我正在尝试使用jquery获取用户的ip地址并将该地址存储在var中,然后将该变量发送到我的php页面,通过SQL插入到我的数据库中。

     function rateMedia(mediaId, rate, numStar) {
    $('.box' + mediaId).html('<img src="design/loader-small.gif" alt=""
     />');
    var ip = 1; // i would like to store the ip address in a variable

    var data = {mediaId: mediaId, rate: rate, ip:ip}; // Create JSON
    which will be send via Ajax, this includes the variable for the ip

    $.ajax({ // JQuery Ajax
        type: 'POST',
        url: 'ajax/tuto-star-rating.php', // URL to the PHP file which will insert new value in the database
        data: data, // We send the data string
        dataType: 'json',
        timeout: 3000,
        success: function(data) {
            $('.box' + mediaId).html('<div style="font-size: small;
     color: green">Thank you for rating</div>'); // Return "Thank you
      for 
      rating"
            // We update the rating score and number of rates
            $('.resultMedia' + mediaId).html('<div style="font-size: 
 small; color: grey">Rating: ' + data.avg + '/' + numStar + ' (' + 
 data.nbrRate + ' votes)</div>');
 ..............................

的tuto星级rating.php

if($_POST) {
    $mediaId = $_POST['mediaId']; // Media ID
    $rate = $_POST['rate']; // Your rate
    $ip = $_POST['ip']; //i would simply like to get the ip address
    like this


    $host   = 'localhost';
    $dbname = 'mov';
    $username = "root";
    $password = "";
    $pdo = new PDO('mysql:dbname=mov;host=localhost', $username,
    $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

   ...............................

    $query = $bdd->execute('INSERT INTO tc_tuto_rating (media, rate, user_ip) VALUES 
    ('.$mediaId.', '.$rate.','.$ip.')'); // insert the new rate
    }
    ..............................

我已经尝试完全从jQuery中排除ip并在下面的php脚本中获取IP地址,这通常有效。但如果在jQuery中的帖子之前没有声明ip变量,那么它会工作,我的数据库中的ip列是空的,这样做。代码

    <?php  

    if($_POST) {
    $mediaId = $_POST['mediaId']; // Media ID
    $rate = $_POST['rate']; // Your rate
    $ip = $_SERVER['REMOTE_ADDR'];



    if (!empty($_SERVER['HTTP_CLIENT_IP'])) {

        $ip = $_SERVER['HTTP_CLIENT_IP'];

    } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {

        $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];

    }

    return $ip;

     }


    $host   = 'localhost';
    $dbname = 'mov';
    $username = "root";
    $password = "";
    $pdo = new PDO('mysql:dbname=mov;host=localhost', $username,
    $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $get_cat = $pdo->prepare("SELECT * FROM tc_tuto_rating WHERE media
     = :media AND user_ip = :user_ip");

    $get_cat->bindParam(":media", $mediaId, PDO::PARAM_INT);
    $get_cat->bindParam(":user_ip", $ip, PDO::PARAM_INT);

    $get_cat->execute();

   ?>

我使用var ip = 1;来测试它。 ip地址在数据库中正确存储为1,如何正确获取正确的ip地址。我已经看到了类似的问题,并尝试了大部分问题,这些问题要么无效,要么无法弄清楚如何将解决方案与我的代码合并。

0 个答案:

没有答案