通过 ip 获取用户国家并将其显示在下拉列表顶部,但不预先选择它

Posted

技术标签:

【中文标题】通过 ip 获取用户国家并将其显示在下拉列表顶部,但不预先选择它【英文标题】:get user country by ip and show it on top of dropdown list but NOT preselect it 【发布时间】:2014-09-26 11:52:49 【问题描述】:

我的表单中有一个下拉列表,可以根据用户的 IP 预先选择用户所在的国家/地区,并且效果很好。

问题:这个下拉列表问题是必填字段,所以如果用户没有回答它,他应该无法进入下一页。我的问题是,由于它是在列表中预先选择的,即使用户没有选择它,他也可以转到下一页。

我需要什么:我想知道是否可以通过 IP 获取用户所在的国家/地区,但不预先选择它,只是简单地显示它位于列表顶部,例如在“留空”选项之前(以便用户可以轻松查看)。

这是我的代码:

<label> Where were you born?<span>*</span></label>
<div class="fieldset content">  
<select name="q5[]" multiple="multiple"  size="10px">

<?php
require 'vendor/autoload.php';
$gi = geoip_open('/usr/local/share/GeoIP/GeoIP.dat', GEOIP_STANDARD);
$ip = $_SERVER['REMOTE_ADDR'];
$preselect_country = geoip_country_name_by_addr($gi, $ip);

include('newCountry.php');

while ($line = mysql_fetch_array($result))    
    if($preselect_country == $line['country'])
       $selected = "selected";
   else
       $selected = "";
    

 echo "<option value=\"$line['country']\" $selected>$line['country']</option>\n";
  
    geoip_close($gi);

 ?>
</select>
</div>

如果有人能帮我解决这个问题,我将不胜感激。

谢谢,

【问题讨论】:

您可以将第一项(如果没有选择其他选项,则默认)留空(例如&lt;option&gt;Select one...&lt;/option&gt; - 没有value 属性),只需将用户的国家/地区作为第二项插入下拉菜单。 @ialarmedalien:抱歉,这是我的问题,我不知道如何插入用户国家作为第二或第一选项! :( 如果它是固定的(例如总是意大利)我可以,但现在我不知道该怎么做 【参考方案1】:

您可以创建select,使其第一个值为空白,并将用户的国家/地区作为列表中的第二个选项。其他国家可以低于它。要使用 PHP 脚本进行设置,您可以创建两个字符串,一个用于列表顶部(带有空白选项和用户的国家/地区),另一个用于列表的其余部分:

$list_top = "<option>Choose one...</option>\n";
$list_bottom = "";
while ($line = mysql_fetch_array($result))    
    if($preselect_country == $line['country'])
        $list_top .= "<option value=\"$line['country']\">$line['country']</option>\n";
    else
        $list_bottom .= "<option value=\"$line['country']\">$line['country']</option>\n";
    

echo $list_top . $list_bottom;

【讨论】:

以上是关于通过 ip 获取用户国家并将其显示在下拉列表顶部,但不预先选择它的主要内容,如果未能解决你的问题,请参考以下文章

如何在 woocommerce 商店的下拉列表中获取并自动显示访问者的地理位置数据(国家/地区)

如何从数据库中获取大量数据并通过输入输入将其显示到下拉列表过滤器中,但只能从数据库中选择

Angular 6 无法从提供的对象中自动选择/绑定下拉列表值

通过jQuery根据位置动态重新排列国家下拉列表?

如何获取嵌套的 JSON 数据列表并将其显示在 MatTable 中?

如何在 React Native expo 的下拉选项中动态获取 api 数据