与php提交时出现sql错误

问题描述:

我的PHP文件提交一个条目到数据库表不起作用,我不明白为什么。它接受Ajax提交,并且我知道问题不在数据或Ajax请求中,因为它处理成功。唯一的问题是没有数据提交给我的数据库。在我更改为代码以将地址串连接到之前它是一个变量之前,我有这个工作。任何建议都会很棒!与php提交时出现sql错误

这里是PHP文件 UPDATE :::这是更新的PHP文件

<?php 
require("dbinfo.php"); 

// Create connection 
$conn = new mysqli('localhost', $username, $password, $database); 
// Check connection 
if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 
$name = $_POST['user_name']; 
$street = $_POST['user_street']; 
$city = $_POST['user_city']; 
$state = $_POST['user_state']; 
$country = $_POST['user_country']; 
$zip = $_POST['user_zip']; 

$address = $street.', '.$city.', '.$state.', '.$country.', '.$zip; 
$shortAdd = $city.', '.$state.', '.$country; 

$type = $_POST['user_color']; 
$desc = $_POST['user_message']; 
$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; 
     $lon = $xml->result->geometry->location->lng; 
} 
$sql = "INSERT INTO `markers` (`name`, `address`, `lat`, `lng`, `type`, `desc`) 
    VALUES (?, ?, ?, ?, ?, ?);"; 

$stmt = $conn->prepare($sql); 
$stmt->bind_param('ssssss', $name, $shortAdd, $lat, $lon, $type, $desc); 
$stmt->execute(); 
$conn->close(); 
?> 
+0

你可以告诉我们的错误,如果有的话? – Ronald

+0

没有错误?它会经过并且按钮被单击时提交表单,但mySQL数据库之后没有新表。 –

+1

您是否执行了SQL语句?我注意到没有提交或$ sql-> query() – Ronald

虽然docliving的答案是正确的,采取额外的步骤和使用准备好的语句。没有它,您的代码很容易受到SQL注入攻击。只需稍作更改即可将其转换为使用准备好的语句。这里是如何做到这一点与mysqli:

$sql = "INSERT INTO `markers` (`name`, `address`, `lat`, `lng`, `type`, `desc`) 
    VALUES (?, ?, ?, ?, ?, ?);"; 

$stmt = $conn->prepare($sql); 
$stmt->bind_param('ssssss', $name, $shortAdd, $lat, $lon, $type, $desc); 
$stmt->execute(); 
+0

之后似乎仍然没有工作。 –

+0

@CollinMcCabe我认为你有另一个问题,如果它不工作与docliving的代码。矿山应该以同样的方式工作。 –

+0

仅供参考,此网站为globalcandlelight.com,当您点击蜡烛时,表格会显示出来。它似乎工作,但没有新的标记后来出现。从数据库中拉出的标记正在工作 –

当@MySelfBoy写道:

任务后,你必须执行SQL语句

他意味着你必须执行你的查询

$sql = "INSERT INTO `markers` (`name`, `address`, `lat`, `lng`, `type`, `desc`) 
    VALUES ('$name', '$shortAdd', '$lat', '$lon', '$type', '$desc');"; 

下面的指令:

$conn->query($sql); 

注:我仍然不容作出评论,所以我在这里张贴。

+0

在我添加了 –