我在我的网站上有一个搜索功能,它接受城市状态和Zip并搜索半径并显示发现的结果。我已经测试了所有内容,但它在这行代码中中断:
if ($origin_id[0] != -1)
$sql .= " AND " . $prefix . ".OriginLocationID IN (" . implode(",", $origin_id) . ") ";
Globals被定义并正确显示…如果我不输入半径,它将显示该城市的结果。但如果输入半径,它就会中断…
我也包括了半径函数…
function GetLocationSearchCriteria(&$sql, &$urlappend, $prefix)
{
$origin_id = Location::GetLocationID($GLOBALS["OriginState"], $GLOBALS["OriginCity"], $GLOBALS["OriginZip"]);
if (!is_array($origin_id))
{
$o = $origin_id;
$origin_id = array();
$origin_id[0] = $o;
}
if (!empty($GLOBALS["OriginRadius"]))
{
$origin = new Location($origin_id[0]);
----------->>>>>> $origin_id = $origin->GetRadiusLocations($GLOBALS["OriginRadius"]);
$urlappend .= "&OriginRadius=" . $GLOBALS["OriginRadius"];
}
// build query
if ($origin_id[0] != -1)
$sql .= " AND " . $prefix . ".OriginLocationID IN (" . implode(",", $origin_id) . ") ";
}
function GetRadiusLocations($radius)
{
$sql = "SELECT LocationID
FROM locations
WHERE (POW((69.1*(Longitude'"" . $this->Longitude . "'")*" . cos($this->Latitude/57.3) . "),'"2'")+POW((69.1*(Latitude-'"" . $this->Latitude . "'")),'"2'"))<(" . $radius * $radius . ") ";
$conn = &$GLOBALS["dbSettings"]->GetConnection();
$rs = &$conn->Execute($sql);
if ($rs === false)
return -1;
$location_ids = array();
while (!$rs->EOF)
{
array_push($location_ids, $rs->fields[0]);
$rs->MoveNext();
}
return $location_ids;
}
找到了解决方案…我在等式的经度后面少了一个-…
应该是这个
(战俘((69.1 *(经度- '"。$ this ->经度。"'")"。因为($ this ->纬度/57.3)。2"),'"'")+战俘((69.1 (纬度- '"。$ this ->纬度。)"'",'"2 '"))& lt;("。$radius * $radius。")";