d_kishkinev (d_kishkinev) wrote,
d_kishkinev
d_kishkinev

Category:

JSON data не добавляются в MySQL PHP скриптом

Я конечно кодер еще тот, но сейчас разрабатываю систему, где у меня есть Particle Electron

Он будет в компактном кейсе. Идея в том, чтобы по мобильным вышкам определять местоположение.

Я изучил документацию для particle и немного разобрался с C/C++. Написал для платы простенькую прошивку, которая периодически посылает на сервер Particle Cloud данные о мобильной вышке (там на самом деле 5 идентификаторов: MCC - код страны, MNC - код оператора, и три индентификатора самой вышки - LAC, CI, BSIC). Данные эти Particle Cloud не хранит, а посылает в виде JSON файла на мой сервер. Сервер умещается на Raspberry Pi 3 дома в углу стола. Кстати, кому интересно как это сделать, потом напишу (спойлер - фича в том, чтобы подружиться с каким-то сервисом dynamic IP, потому что у вас в локальке за роутером конечно нет глобального да еще и фиксированного IP, но dynamic IP это решение. Я использую Dynu.net)

Данные JSON выглядят примерно так


На сервере у меня LAMP стэк:
Ubuntu Server 18.04 + Apache2 + MySQL + PHP.

База данных MySQL создана. В ней просто будут добавляться записи из key: value пар "MCC":"value1", "MNC": "value2".

Проблема сейчас с PHP скриптом, который я тут написал, прочитав первую в своей жизни книжку по PHP/MySQL. Particle Cloud посылает JSON данные на мой php скрипт. Как вы видите ниже, PHP скрипт должен парсировать JSON, потом создавать MySQL query, вынимать нужные key-value пары и вставлять значения в нужные поля моей базы данных.

<?php

$json=$_POST;
$data=json_decode($json, true);

$hostname="localhost";
$username="user";
$password="password";
$db="My_DB";

$dbconnect=mysqli_connect($hostname, $username, $password, $db);

if ($dbconnect->connect_error) {
    die("Database connection failed:" . $dbconnect->connect_error);
}

$mcc=$data["MCC"];
$mnc=$data["MNC"];
$lac=$data["LAC"];

$query="INSERT INTO `My_Data_Table` (`mcc`, `mnc`, `lac`)
                            VALUE ('$mcc', '$mnc', '$lac')";

if (!mysqli_query($dbconnect, $query)){
    die('An error occurred.');
}else{
    echo "Success!";
}

mysqli_close($dbconnect);

?>




Но пока скрипт ничего не добавляет. Тестирую это из терминала ubuntu server'а. Curl с verbose ответом берет JSON файл с данными и посылает его на PHP скрипт. Curl такой:

curl -v -X POST --header 'Content-Type: application/json; charset=UTF-8' --data my_file.json http://localhost/my_php_file.php

Получаю общую инфу от выполнения curl, мол данные то посылаются, но Apache выдает 500 Internal Server Error (общая ошибка, где она закралась - хз)

Trying 127.0.0.1
Connected to localhost port 80
POST /php-parser.php HTTP/1.1
HOST:localhost
User-Agent: curl/7.58.0
Accept: */*
Content-Type: application/json; charset=UTF-8
Content-Length: 210

*upload completely sent off: 210 of 210 bytes
*HTTP/1.0 assume close after body
HTTP/1.0 500 Internal Server Error
Server: Apache/2.4.29 (Ubuntu)
Content-Length:0
Connection: close
Content-Type: text/html; charset=UTF-8



На stackoverflow в архивах ничего не нашел. Запостил вопрос здесь. Модераторы пост пометили [duplicated], потому что видимо подумали, что у меня в php скрипте путаница с backticks, single or double quotes. Сказали, мол см. сюда. Посмотрел. Применил. Всё та же ошибка.

Пока не знаю, кто поможет. Нужны спецы в PHP/MySQL/Backend. Ищу на upwork. Если у кого идеи и предложения с интересом выслушаю.
Tags: coding, electronics, mysql, php, product development, telemetry
Subscribe
  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 9 comments