我正在尝试创建一个用户输入姓名和地址的表单。使用谷歌地图API调用检索地理参考坐标,返回值'lat'和'lng'。我不明白为什么这些值没有写入DB。我哪里错了?
<?php
include("database.php");
$error = "";
if(isset($_POST['submit']))
{
$username = mysql_real_escape_string($_POST['username']);
$address = mysql_real_escape_string($_POST['address']);
$sql = "INSERT INTO users(username,address) VALUES('$username','$address')";
mysqli_query($database,$sql) or die(mysqli_error($database));
if($address !=''){
$request_url = "http://maps.googleapis.com/maps/api/geocode/xml?address=".$address."&sensor=true";
$xml = simplexml_load_file($request_url) or die("url not loading");
$status = $xml->status;
if ($status=="OK"){
$lat = $xml->result->geometry->location->lat;
$lng = $xml->result->geometry->location->lng;
}
$sql1 = "INSERT INTO users(lat,lng) VALUES('$lat','$lng')";
mysqli_query($database,$sql1) or die(mysqli_error($database));
}
}
echo $lat;
echo $lng;
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="css/reset.css">
<link rel="stylesheet" href="css/style.css">
</head>
<body>
<div class="pen-title">
<h1>B</h1>
</div>
<!-- Form Module-->
<div class="form-module">
<div class="registration">
</div>
<div class="form">
<h2>Account Information</h2>
<form role="form" action="registration.php" method="post">
<input type="text" name="username" placeholder="Username"/>
<input type="text" name="address" placeholder="Address"/>
<input type="submit" name="submit" value="INVIA" />
</form>
</div>
</div>
</body>
</html>
答案 0 :(得分:2)
假设您的用户表格来自评论部分username
,address
,lat
,lng
。
首先,由于您只是在用户表中添加用户名和地址,因此sql会自动将默认值添加到lat
和lng
- 正如您所说的数据是0.00000我猜数据类型是某种浮点数。
其次,当您插入lat
,lng
时,您没有更新users表但是插入新记录,数据库会将默认条目插入users
,{{1列。
如果您想对2个查询执行此操作,则需要将第二个查询设为address
而不是UPDATE
,例如
INSERT
但是,这可以在1个查询中轻松完成,首先将$sql1 = "UPDATE users SET lng = '$lng' AND lat = '$lat' WHERE username = $username;
和$lag
值设为默认值,然后尝试将其填入$lat
部分:
$address != ""
您还应考虑使用预准备语句来利用MySQLi的完整安全性并将数据插入数据库,例如:
$username = $_POST['username'];
$address = $_POST['address'];
$lng = 0.00;
$lat = 0.00;
if($address != "") {
//Fill $lng/$lat here
}
$sql = "INSERT INTO users (`username`, `address`, `lat`, `lng`) VALUES ('$username','$address','$lat','$lng')";
mysqli_query($database,$sql) or die(mysqli_error($database));
答案 1 :(得分:1)
请检查数据库中纬度和longitutde字段的数据类型。请使用varchar或text更改。