2014-06-26 192 views
0

我有一个表单,显示用户根据位置的结果。PHP if和else语句

当页面加载时,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位置可用,我仍然希望页面最初加载这些结果,同时让用户能够输入邮政编码并根据他点击提交后提供的邮政编码查看结果。

回答

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; 
    } 
} 
+0

你的答案正常工作了。那么哪个代码稍微好一点? @Rakesh夏尔马或杰克? – Mike

+0

@Mike事实上,我注意到我的答案中有一个轻微的逻辑错误,我已经更新了;我们的答案之间的区别在于回退值的定义位于顶部或'else'子句中。 –

+0

您的更新代码也能正常工作,而且在我的错误日志中没有任何PHP错误或通知。那么,你的代码和@ rakesh-sharma有什么区别? – Mike

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 : ''); 
} 
+0

你的答案有效精细。 – Mike

+0

你的代码和Jack的区别是什么?两者都很好。 – Mike

+0

@Mike一些简短的代码 –