我创建了一个脚本,用于确定用户的国家/地区,以向他们提供特定于该国家/地区的内容(例如,货币等)。
此脚本包含在网站上所有网页的标题中,因为我希望他们能够根据需要更改国家/地区(例如,他们可能在国外,但仍希望在家中播放内容)。
如果找到发布的变量,它将更改国家/地区并重定向回主页。这将导致重定向循环,因为脚本也包含在此页面和其他页面上,然后再次查找已发布的变量但无法找到它。
我没有为我保存在数据库中的特定国家/地区的所有国家/地区提供自定义内容。
我的脚本如下
<?php
$ip;
if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
$ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
$ip = $_SERVER['REMOTE_ADDR'];
}
$content = file_get_contents('https://tools.keycdn.com/geo.json?host='.$ip);
$jsonArray = json_decode($content, true);
$country = "";
foreach($jsonArray['data']['geo'] as $key => $value){
if($key != 'country_name'){
}else{
$country = $value;
}
}
$active_country_id;
$active_country_name = "";
$active_country_code;
$active_country_currency;
$country_active = "";
$country_menu = "";
if(!isset($_GET["country_id"])){
$sql1 = mysqli_query($con, "SELECT * FROM countries WHERE country='$country'");
$countryCount1 = mysqli_num_rows($sql1);
if ($countryCount1 > 0) {
while($row = mysqli_fetch_array($sql1)){
$active_country_id = $row["id"];
$active_country_name = $row["country"];
$active_country_code = $row["code"];
$active_country_currency = $row["currency"];
$country_active .= "$active_country_code";
$country_active .= " - ";
$country_active .= "$active_country_name";
}
} else {
$country_active = "No Countries";
}
}else{
$new_country_id = $_GET["country_id"];
$sql1 = mysqli_query($con, "SELECT * FROM countries WHERE id='$new_country_id'");
$countryCount1 = mysqli_num_rows($sql1);
if ($countryCount1 > 0) {
while($row = mysqli_fetch_array($sql1)){
$active_country_id = $row["id"];
$active_country_name = $row["country"];
$active_country_code = $row["code"];
$active_country_currency = $row["currency"];
$country_active .= "$active_country_code";
$country_active .= " - ";
$country_active .= "$active_country_name";
}
} else {
$country_active = "No Countries";
}
//header("location: index.php");
}
$sql2 = mysqli_query($con, "SELECT * FROM countries WHERE country!='$active_country_name'");
$countryCount2 = mysqli_num_rows($sql2);
if ($countryCount2 > 0) {
while($row = mysqli_fetch_array($sql2)){
$country_id = $row["id"];
$country_name = $row["country"];
$country_code = $row["code"];
$country_currency = $row["currency"];
$country_menu .= "<li><a href='country.php?country_id=$country_id'>";
$country_menu .= "$country_code";
$country_menu .= " - ";
$country_menu .= "$country_name";
$country_menu .= "</a></li>";
}
} else {
$country_menu = "No other Countries";
}
?>
我想在注释掉的行//header("location: index.php");
对此的任何帮助将不胜感激。
答案 0 :(得分:1)
您已将重定向放在else
country_id
作为请求存在的位置。您应该查找缺少country_id
的位置,然后使用country_id
重定向。
如果将其重构为
,将更容易阅读自己的代码if (true) {
// stuff
} else {
// other stuff
}
如果您使用if (!$something)
后跟else
,则其他成为双重否定(不是)并且令人困惑。首先尝试使用if ($_GET...)
,然后使用else
。
或者......你也可能没有else
并设计你的脚本只在需要时进行重定向,否则让它继续进行。
if (!$_GET['country_id']) {
// redirect with country_id
}
// Carry on with page as normal