2016-07-12 4 views
3

Я пытаюсь обработать запрос POST от веб-службы. Он отправляет HTTP-запрос POST следующим образом:Обращаться с запросом POST в формате JSON

{ 
"latitude":"12.232", 
"longitude":"123.323" 
} 

Это сообщение в файл PHP на моем сервере. Я знаю, что он попадает в файл точно. Однако я не получаю данные.

В моем PHP, я это (оставляя кучу вещей:.

$json = file_get_contents('php://input'); 
$obj = json_decode($json); 
$mine ="sixteen"; //using this for a test 

$sql = "INSERT INTO rr_emergency (random) VALUES('$obj');"; 
$result = $dbh->query($sql)->fetchAll(PDO::FETCH_ASSOC); 

Это не делает никаких изменений в моей базе данных

Если я вместо этого:

$sql = "INSERT INTO rr_emergency (random) VALUES('$mine');"; 

Затем «шестнадцать» добавляется в нужное место в новой строке в моей таблице каждый раз, когда веб-служба вызывает мой PHP. Вот как я знаю, что получаю данные.

ПРИМЕЧАНИЕ. Я пытался просто добавить $obj в таблицу, чтобы увидеть возвращаемый формат данных, прежде чем я попытаюсь правильно разобрать его и поместить все, где он принадлежит.

Что я здесь делаю неправильно? Я думаю, что проблема здесь ($json = file_get_contents('php://input');), но не знаю, что еще попробовать.

Спасибо.

+0

Вы не можете хранить PHP объект в столбец таблицы mysql. Результат '$ obj = json_decode ($ json);' является объектом PHP, а не строкой – RiggsFolly

+0

Добавьте некоторую ошибку, проверяющую ваш код запроса, и вы, вероятно, увидите полезное сообщение об ошибке. – RiggsFolly

+0

Вы не можете получить значения с '$ _POST ['широта'];'? Думаю, JSON этого не допустит? – ntgCleaner

ответ

3

Таким образом, есть несколько проблем

$obj = json_decode($json); 

Это возвращающие object. Вы хотите, array

$obj = json_decode($json, true); 

Тогда ваш PDO неверен

$sql = "INSERT INTO rr_emergency (random) VALUES(:val);"; 
$prep = $dbh->prepare($sql); 
foreach($obj as $row) $prep->execute([':val' => $row]); 

Это правильно вставить свои данные (используя подготовленный оператор) и цикл над данными возвращения JSON

+0

Это полностью привело меня туда, куда мне нужно было идти. Проблема заключалась в следующем: '' '$ obj = json_decode ($ json, true);' '', что позволило мне сделать '' '$ first = $ obj ['latitude'];' '', а затем использовать это для ввода правильных данных в мою таблицу. Цикл не был необходим, но я вижу, где у вас это, исходя из моего вопроса. Благодаря! – jonmrich

1

Вы пытаетесь вставить объект, когда вам действительно нужна строка. Применение:

$obj = json_decode($json, true) 
$obj_str = implode(", ", $obj); 
$sql = "INSERT INTO rr_emergency (random) VALUES('$obj_str');"; 

После того как я отправил выше, вы добавили:

Я пытался просто добавить $ OBJ в мою таблицу только для просмотра данных формата

Объектов делать не по своей сути конвертировать в строки, поэтому размещение $obj в вашем запросе не работает. То, как я храню объекты в своей БД, когда мне это нужно, - это хранить нотацию JSON напрямую.

$json = file_get_contents("php://input"); 
$sql = "INSERT INTO rr_emergency (random) VALUES('$json')"; 

Вы теряете способность выполнять фильтрацию и подбирая операций внутри объекта, но это эффективный способ упаковки от данных, которые не нуждаются в БД, чтобы разобрать до конца.

Если вам нужно хорошо отформатирован, легко структура следующим образом:

$obj = json_decode($json); 
$obj_str = print_r($obj,true); //store formatted string 
$sql = "INSERT INTO rr_emergency (random) VALUES('$obj_str');"; 

Если, как вы сказали, все, что вам нужно сделать, это «просто увидеть формат данных», я предлагаю вторя к экрану или записи файл журнала; Выполните одно из следующих действий. Для печати на экране:

print_r($obj); 

Для записи в файл:

$filepath = "/path/to/file.txt" 
file_put_contents($filepath,print_r($obj,true)); 

Важное примечание

Ввод текста непосредственно в БД запросов, не избежать этого делает вас уязвимыми для атак с внедрением SQL.Вместо этого используйте подготовленные заявления.

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