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


get user country by ip and show it on top of dropdown list but NOT preselect it

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

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

我需要什么:我想知道是否可以通过用户的IP获取国家/地区,但不要预先选择,只需将其显示在列表顶部即可,例如在"留空"选项之前(这样用户就可以轻松查看)。

这是我的代码:

<label> Where were you born?<span>*</span></label>
<div class="fieldset content">  
<select name="q5[]" multiple="multiple" width="200px" 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>

如果有人能帮我修理,我将不胜感激。

谢谢,

您可以创建第一个值为空的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;