2014-06-26 193 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一些簡短的代碼 –