簡體   English   中英

將下拉選擇的值拆分為兩個變量? (PHP/HTML)

[英]Splitting value of drop down selection into two variables? (PHP/HTML)

所以我有一個網站,其中包含兩個 HTML 下拉列表 - 一個是美國各州的列表,另一個是所選 state 中的城市/城鎮列表。 截至目前,我對每個 state 都有一個 HTML 文件,它們都有這樣列出的選項:

<option value="44.729932, -72.381758">Albany</option>
<option value="44.976728, -73.30257">Alburg</option>

這些值是每個城鎮的坐標(緯度、經度)。 當我點擊“搜索”時,表單數據被發送到 SimpleGeo 的 PHP 腳本(位置數據庫公司 - 太棒了,順便說一句) - 選擇城鎮的目的是在這部分提供 $lat 和 $lon 的值PHP 腳本,每次查詢都會發送到 SimpleGeo:

$q = $_GET['q'];
$lat = 44.729932;
$lon = -72.381758;

$args = array('q' => $q, 'num' => 25, 'category' => Restaurant, 'radius' => 25);
$results = $client->getPlaces($lat, $lon, $args);

不能改變的部分是“getPlaces($lat, $lon, $args);” 部分原因是當我用 $coordinates 替換 $lat 和 $lon 然后將它們的值替換為:

$coordinates = $_GET['city']; ('city' is the name and id of my city/town lists)

它不會將其視為有效查詢。 同時,如果將“$lat, $lon”替換為數字作為坐標,它就完全可以理解了。

...我只需要在 HTML 文件本身或 PHP 腳本中拆分我的值,通過識別“,”表示緯度值已經結束並且經度值已經開始。 我不知道應該怎么做,我只知道 $lat 和 $lon 必須等於我的 HTML 文件設置的值 - 每個 state 一個文件,每個文件平均大約有 500 個選項......我該怎么做讓它將“44.729932, -72.381758”之類的東西識別為 $lat 和 $lon?,或者:如果我讓選項看起來像這樣,如何讓我的下拉列表傳遞 lat 和 lon 的值:

<option lat="44.976728" lon="-73.30257">Alburg</option>

感謝閱讀,對不起,時間太長了:現在是 2,50AM:我的眼睛在流血。 .P 幫助非常感謝...

您可以拆分選項的值以獲取緯度和經度。

使用-?[0-9]+\.[0-9]+, -?[0-9]+\.[0-9]+之類的正則表達式驗證您的字段,然后將其explode並獲取兩個值:

list($lat, $lon) = explode(", ", $_GET['city']);

此處的分隔符是,包括空格,以將其刪除。

你可以試試這個...

if (isset($_GET['location']) AND strpos($_GET['location'], ', ') !== FALSE) {
   list($latitude, $longitude) = explode(', ', $_GET['location']);
}

...盡管如果有人向您發送一些有趣的東西,例如hello -4.3, 3.1 bye! .

愛迪生


或者,您可以使用此正則表達式對其進行驗證提取值。

if ($location = filter_input(INPUT_GET, 'location')) {
   preg_match('/^(?P<latitude>-?\d+\.\d+), (?P<longitude>-?\d+\.\d+)\z/', $location, $matches);

   $latitude = $matches['latitude'];
   $longitude = $matches['longitude'];
}

愛迪生

上述任何一方的額外數據問題都不會成為正則表達式的問題。

我建議您使用唯一 ID 作為選項的值屬性,然后根據用戶選擇的 ID 從數據庫中加載所選城鎮的緯度和經度。

如果您堅持這樣做,那么您可以使用explode() 來拆分返回的值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM