如何 prevent/disable 基于 geoip 数据的 <a href>

How to prevent/disable an <a href> based on geoip data

在 php 和 js 方面,我是一个绝对的初学者,并且一直在努力寻找满足以下要求的可行解决方案。

我有一个 Joomla 订阅扩展,带有一个使用 href 标签的 "subscribe" 按钮。

我想要实现的是,基于 geoip 位置,来自英国以外的浏览者被拒绝访问按钮点击操作,但给出一条消息解释原因。

到目前为止,我所能实现的只是一个禁用的按钮,它仍然可以点击...

到目前为止,我已经能够实现的一点点如下。真的希望有人能帮助我。

<?php
// Added Geo IP Location Tracking
$user_ip = getenv('REMOTE_ADDR');
// http://www.geoplugin.net/php.gp?ip=$user_ip
$geo = unserialize(file_get_contents("http://www.geoplugin.net/php.gp?ip=$user_ip"));
$city = $geo["geoplugin_city"];
$region = $geo["geoplugin_regionName"];
$country = $geo["geoplugin_countryName"];
$countryCode = $geo["geoplugin_countryCode"];
}
?>


<?php
if ($countryCode == 'CH') {


echo "Unfortunately China is not covered by our service!"."<br>";           
}
?>

<p><a class="btn btn-large btn-primary" <?php if ($countryCode == 'CH'){ ?> disabled <?php   } ?> href="<?php echo JRoute::_('index.php?option=com_axisubs&view=subscribe&plan='.$item->slug); ?>">
<i class="icon-ok"></i>

<?php if ( $item->hasTrial() ) : ?>
<?php echo JText::_('COM_AXISUBS_START_TRIAL'); ?>
<?php else: ?>
<?php echo JText::_('COM_AXISUBS_SUBSCRIBE_NOW'); ?>
<?php endif; ?>
</a>

您不能将 links 设置为 "disabled" 这仅适用于输入、文本字段、按钮等表单元素。

你可以做的是添加一些 javascript 来防止 link 的默认操作:

<a class="btn btn-large btn-primary" <?= ($countryCode != 'CH')?'onclick="return false;"':'' ?> href="<?php echo JRoute::_('index.php?option=com_axisubs&view=subscribe&plan='.$item->slug); ?>">

通过使用此方法,您还可以在警告框中添加一条消息,例如当用户不在所需国家/地区时:

<a class="btn btn-large btn-primary" <?= ($countryCode != 'CH')?'onclick="alert(\'you are not in CH\');return false;"':'' ?> href="<?php echo JRoute::_('index.php?option=com_axisubs&view=subscribe&plan='.$item->slug); ?>">

如果您必须屏蔽多个国家代码,您可以这样做:

<a class="..." <?= (in_array($countryCode, ['CH', 'FR', 'UK', 'DE']))?'onclick="alert(\'you are not in an allowed country\');return false;"':'' ?> href="...">

您根本不应包含 link 以防止滥用您的服务。

$link = $countryCode == 'CH' ? 'href="#" onclick="return false;" disabled' : 'href="index.php?option=com_axisubs&view=subscribe&plan='.$item->slug.'"';

然后输出你的link标签

<a class="btn btn-large btn-primary" <?php echo $link ?>>

这样 link 在您的页面上不存在,虚拟 link 不可点击。