文件未根据访问者位置正确加载


file does not load properly according to visitor location

我只需要帮个小忙,你能看看这段代码吗?问题是什么,因为它只加载ph.php文件,即使用户来自美国,假设是US.php:

<script language='Javascript'> 
var country = geoplugin_countryCode();
switch (country)
{
 case (country = "UK"):
 <?php include( "../../uk.php"); ?>
break;
 case (country = "US"):
 <?php include( "../../us.php"); ?>
break;
 case (country = "PH"):
 <?php include( "../../ph.php"); ?>
break;
} 
</script>

1 Javascript-在各个国家/地区加载相应的文件

这实际上是index.php中一个名为offer.php的包含文件,根据用户所在的国家/地区动态调用其他文件。例如,如果somone来自英国,那么offer-UK.php必须加载并替换index.php 中的变量

2) PHP-

我需要使用以下URL格式正常加载此页面:www.mydomain.com/index.php?noclid=abc123它需要使用$_REQUEST或任何东西动态地传递noclid变量,以使其作为www.mydomain.com/index.php?noclid=abc123工作。在index.php文件中,我使用$_GET['clid'] = '[[clid]]';,但问题是我希望使用noclid=abc123而不是clid=abc123

正如许多人所指出的,您可能混淆了服务器端和客户端资源的获取方式。您需要理解,当您提交对该资源的请求时,php方面的所有代码都会被编译并评估为有效的html

一旦页面在浏览器中呈现,javascript就会发挥作用。如果您仍然希望按照国家/地区代码include特定的php文件,则必须向服务器发出适当的请求。

因此,在您的情况下,由于您是用javascript获取国家/地区代码,您可能需要使用POSTGET请求向另一个php脚本(我们称之为foo.php)发出请求。然后,您可以在一个非常相似的switch语句中包含适用于不同国家/地区的适当文件。只有这个switch语句才会位于foo.php中。所以foo.php可能看起来像这样:

 <?php
   $country= $_POST['countryid']; //Assuming you are making a post request and passing 'countryid'
  switch ($country) {
   case "UK":
    include( "../../uk.php");
    break;
   case "US":
    include( "../../us.php");
    break;
  case "PH":
    include( "../../ph.php");
   break;
  default:
   //if you want to handle this case..
  } 
?>

ajax请求可以简单地为:

  var country = geoplugin_countryCode();
  ...

  $.ajax({
  type: "POST",
  url: "foo.php",
  data: { countryid: country}
 })
 .done(function( msg ) {
   //Ajax request completed
 });

如果您不清楚如何发布帖子或获取请求并传递数据,我建议您阅读一些关于ajax的文档。不管怎样,这只是你解决问题的众多方法之一。希望它能让你朝着正确的方向开始。

正如Dagon所说。您尝试混合客户端和服务器端的代码。

服务器端

如果offer.php包含在您的索引php中,它将被解析并执行所有包含。我猜他们都设置了相同的变量,所以你只能看到最后一个变量的效果。更改包含的顺序,你会发现它总是最后一个。

客户端

如果你看看你生成的html和javascript,你可能会看到这样的东西:

<script language='Javascript'> 
  var country = geoplugin_countryCode();
  switch (country)
  {
    case (country = "UK"):
    break;
  }
  ...

这是因为php已经完成并生成了html输出。您可以在服务器端构建javascript代码,并将其发送到浏览器以在那里执行,但不要期望浏览器执行任何php命令。

解决方案

这取决于你的问题。但是,如果您需要服务器端的国家/地区信息,则必须将其传递给php脚本。例如用index.php调用你的index.php?country=US