2016-11-22 3 views
-2

Мои php-файлы, которые отправляют запись в таблицу базы данных, не работают, и я не могу понять, почему. Он принимает в Ajax submit, и я знаю, что проблема связана не с данными, либо с запросом Ajax, поскольку он обрабатывается как успешный. Единственная проблема заключается в том, что никакие данные никогда не отправляются в мою базу данных. У меня была эта работа до того, как я изменил код на конкатенацию строки адреса, где раньше была одна переменная. Любой совет будет полезен!Ошибка sql при отправке с помощью php

Вот PHP файлы UPDATE ::: ЭТО ОБНОВЛЕНИЕ PHP FILE

<?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

ответ

1

Хотя ответ 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, и форма отображается, когда вы нажимаете на свечу. Кажется, что это работает, но после этого не появляется новый маркер. Маркеры, которые извлекают из базы данных, работают, однако –

1

Когда @MySelfBoy писал:

После выполнения задания вы должны выполнять операторы SQL

Он означает, что вы должны выполнить запрос

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

со следующей инструкцией:

$conn->query($sql); 

Примечание: Я все еще не могу комментировать, так что я отправляю его здесь.

+0

. Кажется, что все еще не работает после того, как я добавил, что в –

Смежные вопросы