首页 > 解决方案 > 如何修复基于地理位置的回显输出的php代码

问题描述

如果该城市位于德克萨斯州,我正在尝试使用 php 和地理付费服务在我的网页内容中显示该城市。为什么我的 if....else 语句不起作用?

通过 ipstack 付费 SSL 地理定位服务。使用 cpanel 托管 GoDaddy

<html>
    <h1>
    <?php
    $ip = $_SERVER['REMOTE_ADDR']; 
    $api_key = "myipstackkeygoeshere";
    $freegeoipjson = file_get_contents("http://api.ipstack.com/".$ip."?access_key=".$api_key."");
    $jsondata = json_decode($freegeoipjson);
    $cityfromip = $jsondata->city;
    $region_namefromip = $jsondata->region_name;
    if ($region_namefromip = "Texas") {
    echo "". $cityfromip ."";
    } else {
    echo "Texas";
    }
    ?>
    Services</h1>  
 </body>
</html>

如果访客的位置在德克萨斯州,我希望在“服务”之前显示城市(例如:“达拉斯服务”)。如果访客的位置不在德克萨斯州,我希望显示“德克萨斯州”(例如:“德克萨斯州服务”)。

在添加 if...else 语句并仅echo "". $cityfromip ."";使用页面之前将显示城市(无论是什么州)。使用 if...else 语句,不显示城市。我的代码哪里出错了?

标签: phpgeolocation

解决方案


杰克的回答有所帮助,我能够使用以下方法提出一个可行的解决方案:

<?php  
 $ip = $_SERVER['REMOTE_ADDR']; 
 $api_key = "AccessKeyGoesHere"; 
 $freegeoipjson = file_get_contents("https://api.ipstack.com/".$ip."?access_key=".$api_key.""); 
 $data = json_decode($freegeoipjson, TRUE); 
 $city = print_r($data['city'], true); 
 $state = print_r($data['region_code'], true); 
 $charlotte_cities_in_75_mile_radius = "City1 City2 City3 City4 City5 City6 City7 City8"; 

 if ((strpos($charlotte_cities_in_75_mile_radius,$city) !== false) AND ($state == "NC")) { 
     echo $city ."&nbsp;"; 
 }
 else { 
     echo 'North Carolina '; 
 } 
 ?> 

推荐阅读