odebranie danych json

0

Witam php dostaje dane z json sprawdziłęm to wire shark i uzyskałem coś takiego
screenshot-20191206195023.png
lecz nie wiem jak to zdekodować w php jak wybrać te dane :

<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "stevessipyiotdb";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}
// Post data
$response = array();
$res=array();

//$json = json_decode($_POST);
$json = json_decode(file_get_contents('php://input'),true);


if($json!=null){
	$DeviceName=$json["DeviceName"];
	$Humidity=$json["Humidity"];
	$Temperature=@json["Temperature"];
	//$SampleDate=$json["date"]
$sql=" INSERT INTO SipyData (deviceName, humidity, temperature)
VALUES ('$DeviceName', '$Humidity' ,'$Temperature')";

	if(mysqli_query($conn, $sql)){
	//sucesfully inserted into database
		$response["code"] = "1";
		$response["message"] = "sucesfully stored";
		//echoing Json response
		echo json_encode($response);
	}
	else{
		//failed to insert row
		$response["code"] = "2";
		$response["message"] =mysql_error($conn);
		//echoing Json response
		echo json_encode($response);
	}
}else{
	echo "json data error";
}
mysqli_close($conn);
?>
0

Lepiej pokaż jaka jest zawartość tego co dostajesz z php://input, czyli np.

$tmp = file_get_contents('php://input');
echo $tmp;

i wstaw co pokazuje echo.

Oczywiście zakładam, że masz działający serwer www na IP 192.168.0.101 i standardowym porcie 80, inaczej nic nie przechwycisz.

0

tak mam działający serwer ale uzyskuje tylko "json data error"

0

No to pokaż co dostajesz w PHP, co pokazuje echo.

0

Widzę tylko tyle
screenshot-20191207131935.png

a dodałem tak echo
screenshot-20191207132129.png

0

To nie tak jak napisałem wyżej.

0

Czy chodziło o to ?

// Post data
$response = array();
$res=array();
//$json = json_decode($_POST);
$tmp = file_get_contents('php://input');
echo $tmp;

niestety efekt ten sam

0

spróbuj
var_dump($tmp)

0

no to dostałem

string(0) ""
0

ten json jest wysyłam przez Ciebie czy z jakiegoś zewnętrznego źródła? JAk to drugie to spróbuj sam go wysłać

0

string jest wysyłany przeze mnie z mikrontrolera esp32 na którym jest odczyt temperatury i wysłanie stringa do php . plik php znajduje dostaje HTTP 200 ok następnie dane o serwerze . Sprawdziłem dane wychodzące z kontrolera jest wszystko ok . oprogramowanie do mikrokontrolera napisane w micropython.

1

Wysyłasz nagłówek Content-Lenght (zamiast Content-Length), przez co PHP prawdopodobnie ignoruje całą dalszą część żądania.

0

okej troche sie poprawiło lecz wyrzuciło wiecej błędów
screenshot-20191207171008.png

0

Ten błąd oznacza, że w linii 20 próbnujesz traktować obiekt jak tablicę, co jest akurat dziwne bo to:

$json = json_decode(file_get_contents('php://input'),true);

powinno CI zrócic tablicę a nie obiekt.

Zrób tak:

$json = json_decode(file_get_contents('php://input'),true);
ob_start();
print_r($json);
error_log( ob_get_clean() );

w logu błędów PHP powinieneś dostać zrzut $json, albo zrób tak:

$json = json_decode(file_get_contents('php://input'),true);
print_r($json);

i wklej co pokaże

0

wszystko działą dzięki
ale chciałbym wiedzieć co oznacza druga i 4 linijka tego środkowego kodu

0

Tylko którego kodu - mojego czy Twojego, najlepiej wklej te linijki, o które Ci chodzi.

0

dokładnie te linijki

ob_start();
error_log( ob_get_clean() );

i jeszcze jedno pytanie czy da sie wysłać zapytanie o pomiar na php ?

1

Zawsze możesz każdą funkcję poznać wpisując w wyszukiwarkę "php + nazwa funkcji", czyli tutaj "php ob_start"

Natomiast w tej funkcji chodzi o to, że włącza buforowanie wyjścia, czyli jak uruchomisz ob_start(), a potem echo "tekst", to "tekst" nie pokaże się standardowo na ekranie / nie zostanie wysłane na wyjście, tylko wpadnie do bufora, ob_get_clean() pobiera dane z bufora i go czyści. W tym przypadku funkcja przechwytuje to co wysyła na wyjście/ekran print_r i przesyła do logu błędów.

Zapytanie o pomiar realizujesz osobnym skryptem albo rozpoznaniem parametrów get / post, poczytaj o formularzach i tworzeniu aplikacji www w PHP.

1 użytkowników online, w tym zalogowanych: 0, gości: 1