有人可以帮我这个吗?
我试图展示一些与美国或非盟访客分开的内容。我正在对IP进行地理定位,并使用PHP会话(以便用户可以根据需要切换国家/地区)
if (($jsonobj->countryCode == "AU" || $_SESSION['username'] == "AU") && ($jsonobj->countryCode !== "US" || $_SESSION['username'] !== "US"))
{
echo 'australian content';
}
if (($jsonobj->countryCode == "US" || $_SESSION['username'] == "US") && ($jsonobj->countryCode !== "AU" || $_SESSION['username'] !== "AU"))
{
echo 'us content';
}
我无法让它工作 - 基本上我想要通过IP自动显示内容或他们可以手动切换它的灵活性。有什么想法吗?
答案 0 :(得分:0)
你的条件错了。 它正在同时验证这两个条件。
这可以解决您的问题。
if ($jsonobj->countryCode == "AU" || $_SESSION['username'] == "AU"){
echo 'australian content';
}
if ($jsonobj->countryCode == "US" || $_SESSION['username'] == "US"){
echo 'us content';
}
答案 1 :(得分:0)
您可以在两个字段中搜索单词,字母或短语以决定要显示的内容。如果它包含两者,它将同时显示两者(如果你想要一个或另一个,删除第二个if并将其更改为else)
if((bool)strpos(strtolower($jsonobj->countryCode . $_SESSION['username']), 'au')) {
// Australlian
}
if((bool)strpos(strtolower($jsonobj->countryCode . $_SESSION['username']), 'us')) {
// American
}
如果你有多个,你可以创建一个保存编写代码的函数:
function checkDisplay($code) use ($jsonobj) {
return (bool)strpos(strtolower($jsonobj->countryCode . $_SESSION['username']), $code);
}
然后使用它:
if(checkDisplay('au')) {
// Australian
} elseif(checkDisplay('us')) {
// USA
} else {
// default or error
}
答案 2 :(得分:0)
所以我们......
/**
* GEO_IP Session country_code Result
*
* AU AU AU AU || AU AND
* AU US US
* US US US
* US AU AU US || AU
*
*/
if(( $geo_ip_country_code == "AU" || $_SESSION['country_code'] == "AU" ) &&
( $geo_ip_country_code == "US" || $_SESSION['country_code'] == "AU" )
) {
echo 'australian content';
} else {
echo 'us content';
}
但这里似乎有一种模式!基本上,GEO_IP可能用于初始设置会话国家代码,但它是确定他们选择的国家/地区的会话,因此可以简化上述内容。
注意:如果$ _SESSION [' country_code']已经设置,并且我假设您在第一页上加载了设置的国家/地区,那么您不想更新它。
更好的解决方案
在您设置会话的地方,您可以使用类似的内容......
if(!isset($_SESSION['country_code'])){
$_SESSION['country_code'] = $geo_ip_country_code;
}
然后,这只是挑选当前会话值
$country_code = $_SESSION['country_code'];
switch(strtolower($country_code)){
case 'au':
echo "Aussie Content";
break;
case 'usa':
echo "USA Content";
break;
default:
echo "Sorry you can not access this.";
}