PHP INSERT不写入数据库

时间:2016-05-27 10:16:08

标签: php mysql

我正在尝试创建一个用户输入姓名和地址的表单。使用谷歌地图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>

2 个答案:

答案 0 :(得分:2)

假设您的用户表格来自评论部分usernameaddresslatlng

首先,由于您只是在用户表中添加用户名和地址,因此sql会自动将默认值添加到latlng - 正如您所说的数据是0.00000我猜数据类型是某种浮点数。

其次,当您插入latlng时,您没有更新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更改。