无法在mysql中保存远程IP地址

时间:2017-09-24 13:29:29

标签: php mysql database

我有一个奇怪的问题:我想将网站访问者的IP地址保存到数据库。我要说访问者不是我(61.68.257.80是我的IP地址),然后将IP地址保存到数据库。当我通过隐藏我的代理检查它时工作正常。它保存了除了我的IP地址,但是当我从手机(带有电话互联网而不是WiFi)访问网站时,它有不同的IP地址,然后它不会存储到数据库中。任何人?

$visitor=$_SERVER['REMOTE_ADDR'];
      if($visitor!=="61.68.257.80"){
           $count="SELECT * FROM `visitor`";
           $countRun=mysqli_query($conn,$count);
             while($countRow=mysqli_fetch_array($countRun)){
                   $current_counts=$countRow['counts'];
                   $new_count=$current_counts+1;
                 }
            $remote_ip= $_SERVER['REMOTE_ADDR'];
            $queryUpdate="INSERT INTO `visitor`(`counts`,`ip_address`)VALUES('".$new_count."','".$remote_ip."')";
            $runUpdate=mysqli_query($conn,$queryUpdate);

        }

1 个答案:

答案 0 :(得分:2)

一个改进代码的小建议,同时它也会更快,

你正在做的是获取整个表记录,并循环它并最终获得最后记录的计数,这可能是最大值。

所以不要这样:

 $count="SELECT * FROM `visitor`";
           $countRun=mysqli_query($conn,$count);
             while($countRow=mysqli_fetch_array($countRun)){
                   $current_counts=$countRow['counts'];
                   $new_count=$current_counts+1;
                 }

您可以像下面一样修改您的查询:

$count = "select max(counts) as count_max_value from visitor";

以上查询将只返回一行/记录,您可以使用键count_max_value来访问它。

征求意见:

  

使用了var_dump,它给了我“string(13)然后ip地址”而在   数据库其varchar(12)。

您可以使用以下查询(对于IPv4地址)修改您的表格

ALTER TABLE `visitor` MODIFY `ip_address` VARCHAR(15);