让我在前面加上一个解释:
我正在开展一个小型项目,在Google地图中我在城市周围放置了一个未确定的半径。我在mysql数据库中有一个表,其中包含所有城市及其lat和lng坐标(绘制圆圈时需要)。
对于此应用的用户,我已将其设置为所以他们需要做的是按以下格式添加城市和州:city_st
一个字符串将包含所有需要的城市: $ parseLocations =“sioux city_ia,alabaster_al,boise_id,atlanta_ga”;
我的问题是,虽然它适用于该字符串中的第一项,但其他任何一项都不会从数据库中提取,即使在我看来我拥有的$ sql变量正在请求正确的信息。这是一个循环,所以我很困惑为什么第一个项目工作正常,但其他人都没有。
感谢您的帮助
<?PHP
$user = 'root';
$password = 'password';
$db = 'interactionDesign';
$host = 'localhost';
$port = 8889;
$conn = (mysqli_connect($host, $user, $password, $db));
if (!$conn) {
die("Connection failed. " . mysqli_connect_error());
}
echo "Connected successfully." . "<p>";
// break out the string of locations
$parseLocations = "sioux city_ia, alabaster_al, boise_id, atlanta_ga";
$locations = explode(',', $parseLocations);
// break city_st into separate array values, add to 2 dim array
for ($x = 0; $x < count($locations); $x++) {
$point[$x] = explode('_', $locations[$x]);
}
//loop through 2 dim array, echo values
for ($l_row = 0; $l_row < count($point); $l_row++) {
for ($l_col = 0; $l_col < 2; $l_col++) {
echo $l_row . " " . $l_col . " " . $point[$l_row][$l_col] . "<BR>";
}
$city = $point[$l_row][0];
$state = $point[$l_row][1];
$sql = "SELECT lat, lng, city, state FROM zipCodes WHERE city=\"$city\" and state_abb=\"$state\"";
$result = mysqli_query($conn, $sql);
print_r($conn);
echo "<p>";
print_r($sql);
echo"<BR>";
$row = mysqli_fetch_assoc($result);
echo "<P>" . $row["city"] . ", " . $row["state"] . ": " . $row["lat"] . " " . $row["lng"] . " <--- From Database" . "<p>";
}
?>
答案 0 :(得分:0)
我猜主要的问题是你的逗号分隔字符串中有空格。
此:
$parseLocations = "sioux city_ia, alabaster_al, boise_id, atlanta_ga";
explode()
将:
array("sioux city_ia", " alabaster_al"," boise_id", " atlanta_ga")
请注意除数组中第一项之外的所有内容的空格。
如果你这样做:
$parseLocations = "sioux city_ia,alabaster_al,boise_id,atlanta_ga";
你应该得到你期望的数组值。
现在说,我不知道为什么,如果你开始用硬编码城市/州的价值,你就不会硬编码成可用的数组,如:
$locations = array(
array('city' => 'some value', 'state' => 'some other value'),
...
);
并保存所有爆炸和其他字符串操作以获得可行的数据结构。
答案 1 :(得分:0)
如果我理解正确,用户应该输入用逗号(,)分隔的所有地方。因此,用户可以输入变量$parseLocations
,如果用户输入了大量空格(逗号之前或之后),您仍希望它能够正常工作。
请尝试这个:
for ($x = 0; $x < count($locations); $x++) {
$point[$x] = explode('_', trim($locations[$x]));
}