我有一个表单,根据位置显示用户结果。
当页面加载时,PHP会根据来自我的geoIP脚本的userIP位置显示结果,该脚本工作正常。此ip位置存储在$location
变量中。
但是,我还想要允许用户根据他在输入文本字段中提供的邮政编码更改此位置,然后单击“提交”。
这是我的PHP:
$geo = geoCheckIP($_SERVER['REMOTE_ADDR']);
if (isset($geo) && ($geo != "not found, not found")) {
$location = $geo;
}
else
{
$location = (isset($_POST['location']) ? $_POST['location'] : '');
}
表格:
<form action="/" method="POST">
<div class="postal"><input name="location" id="postal" type="text" value="<?php echo $location; ?>" placeholder="Postal Code or City, State"></div><div id="example">ex.: San Francisco, CA</div><div class="search"><input name="search" id="search" type="submit" value="Search"></div>
</form>
然后在表单下方加载xml,其中&l=".$location."
是插入邮政编码的位置。
XML:
$xml = simplexml_load_file($url."publisher=".$publisher."&q=".$q."&l=".$location."&sort=".$sort."&radius=".$radius."&st=".$st."&jt=".$jt."&start=".$start."&limit=".$limit."&fromage=".$fromage."&highlight=".$highlight."&filter=".$filter."&latlong=".$latlong."&co=".$co."&chnl=".$chnl."&userip=".$userip."&useragent=".$useragent."&v=".$v);
所以一切都有效,除了if语句被触发时。如果输入字段中输入了邮政编码,则只会恢复为基于用户的IP位置。
但是,如果未设置基于用户的IP位置或"not found, not found"
,则会触发else语句。在这种情况下,用户可以输入邮政编码,点击提交并根据输入的邮政编码查看结果。
如何重新排列我的php代码以允许这两个选项?
如果IP位置可用,我仍然希望页面最初加载这些结果,同时让用户能够输入邮政编码并根据他提供的邮政编码查看结果。
答案 0 :(得分:2)
您只需要根据逻辑首先测试的内容进行重新排列:
$location = ''; // assume the worst
if (isset($_POST['location'])) {
// location given, use that
$location = $_POST['location'];
} else {
// location not given, find it based on IP address if possible
$geo = geoCheckIP($_SERVER['REMOTE_ADDR']);
if (isset($geo) && ($geo != "not found, not found")) {
$location = $geo;
}
}
答案 1 :(得分:1)
试
if (isset($_POST['location']) && !empty($_POST['location'])) {
$location = $_POST['location'];
}
else {
$geo = geoCheckIP($_SERVER['REMOTE_ADDR']);
$location = (!empty($geo) && $geo != "not found, not found" ? $geo : '');
}