2010-07-23 41 views
0

我正在实施一些联属网络跟踪到我的网站。联盟网络要求我隐藏网站上的电话号码。array_key_exists

当联盟点击链接到我的网站时,任何网站URL都会被添加到类似/?source = affiliate & siteid = XXXX的例子中; mydomain.com/?source=affiliate & siteid = XXXX

我一直在试图做到这一点,以隐藏电话号码;

<?php 
if (!array_key_exists('affiliate', $_GET)){ 
    //Show telephone number 
    echo "<li>+44 (0)1234 567891</li>"; 
} 
?> 

但是,这似乎并没有工作。理想情况下,我需要在默认情况下显示号码,但如果URL包含url的affilaite部分,则应该隐藏电话号码。

+1

我希望你真的不使用这样的代码这种方式。它将成为一个维护地狱。更好的(还不是完美的)方法是设置配置值或根据您想要显示的内容进行定义。即在你的控制逻辑中,你可以使用'if(!isAffiliate()){define(“SHOW_PHONE_NUMBER”,1); }'并在你的模板中if(defined('SHOW_PHONE_NUMBER')){echo getPhoneNumber(); }'。这将使您的更改变得更加容易,即如果将来还有其他条件显示或隐藏号码时。 – dbemerlin 2010-07-23 06:26:46

回答

4

这听起来像你已经混了键和值。在URL中,关键是=左侧的部分,而值在右侧。

你想要的条件应该是if (!array_key_exists('source', $_GET) || $_GET['source'] != 'affiliate')。这将检查source密钥是否已定义,并且其值是否为affiliate

+0

太棒了,感谢您的快速回复。 :D非常感谢。 – doubleplusgood 2010-07-23 00:42:04

4

在您的$ _GET数组中,源是关键,子公司是价值。 你想:

<?php 
if (!in_array('affiliate', $_GET)){ 
    //Show telephone number 
    echo "<li>+44 (0)1234 567891</li>"; 
} 
?> 

<?php 
if (!array_key_exists('source', $_GET)){ 
    //Show telephone number 
    echo "<li>+44 (0)1234 567891</li>"; 
} 
?> 
+1

第一段代码检查联属网站是URL中的SOMETHING的值,而不是特定的源密钥。第二段代码只是检查*是否是源键,而不是它具有附属值。 – 2010-07-23 00:26:58

+0

正确。提问者请求“如果URL包含URL的附属部分”。第一个使用不同的函数来查找他所要求的内容,而第二个函数与他的代码最接近,只更改他正在寻找的特定密钥。更重要的是,两者一起说明了两者的区别。 :) 干杯! – sleepynate 2010-07-23 01:03:31

0

结论:

if (array_key_exists('source', $_GET) && $_GET['source'] == 'affiliate') { 
    //Show telephone number 
    echo "<li>+44 (0)1234 567891</li>"; 
} 
相关问题