繁体   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