Vroeger kon ik met

$content = file_get_contents("php://input");
//convert json object to php associative array
$json = json_decode($content,true);

waardes uit een url halen maar nu werkt dat niet meer.

Kan iemand mijn vertellen hoe ik

"name":"iSpindel000","ID":125392,"angle":77.06406,"temperature":34.0625,"battery":4.671533,"gravity":27.02963,"interval":1

kan ontleden? Ik kan de post welke het apparaat geeft namelijk niet aanpassen.


Onderstaand heb ik de aangepaste code staan maar deze krijg ik op een of andere manier niet werkend.Ik denk dat het te maken heeft met het : wat ertussen staat.




<?php
date_default_timezone_set('Europe/Amsterdam');
$servername = "localhost";
$username = "user";
$password = "paswoord";
$dbname = "name";
$time = date('Y-m-d h:i:s A');
$unixtime = strtotime($time);
// Create connection
$conn = new mysqli($servername, $username,$password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}

if(isset($_GET["name"])) { // alleen als er data is meegegeven voeren we dit uit
echo "ok".$_GET;
$data = $_GET["name\"\:\""]; // parameter ophalen
$data1 = $_GET["angle"]; // parameter ophalen
$data2 = $_GET["temperature"]; // parameter ophalen
$data3 = $_GET["battery"]; // parameter ophalen
$data4 = $_GET["wort"]; // parameter ophalen

}


//$content = file_get_contents("php://input");
//convert json object to php associative array
$json = json_decode($content,true);

$sql = "INSERT INTO fermentervalues (name, angle, temperature, battery, wort, string ) VALUES( '$data', '$data1', '$data2', '$data3', '$data4', '$unixtime')";
if ($conn->query($sql) === TRUE) {

} else {

echo "Error:" . $sql . "<br>" . $conn->error;
}
$conn->close();

echo "ok";
?>
En $_POST ?
Als ik het goed begrijp leest php://input de rauwe body van een HTML HTTP response.

Waarom gebruik je specifiek php://input, maar ook: hoe wordt de informatie aangeleverd?

Indien dit via POST gebeurt is deze tevens beschikbaar via $_POST.

Als de methode GET is dan is de informatie beschikbaar via GET, maar dan zou deze wel urlencoded aangeleverd moeten worden via de querystring (oftewel in de vorm script.php?name=iSpindel000&ID=125392 etc.)

En anders zul je misschien de REQUEST_URI moeten ontleden ofzo.

Aangezien $_GET leegt blijft vermoed ik dat het een POST request betreft?

Je zou ook de documentatie van deze "Arduino" kunnen raadplegen om na te gaan hoe deze zijn informatie aanlevert, ik neem aan dat dat gespecificeerd is.
Wow, op dezelfde seconde zelfs, Thomas :-)
$_POST reageerd op dezelfde manier als $_GET.



[size=xsmall]Toevoeging op 27/03/2020 21:00:21:[/size]

Hallo Thomas,
php://input heb ik in het begin gebruikt en dit stuk code heeft altijd gewerkt. Het probleem is dat het nu zonder wijzigingen van mijn kant of wijzigingen in het apparaat niet meer werkt. Ik denk dat de hoster iets in het php pakket heeft veranderd ofzo. Ik stuur de info op dezelfde manier als voorheen dus ook handmatig via de webbrowser maar geen van beide werken nog.
Hm, en als je in dezelfde directory een bestandje aanmaakt, en deze probeert te lezen met file_get_contents()?

Vervolgens zou je een simpel formuliertje in elkaar kunnen zetten die iets POST naar een script die dit probeert te verwerken met file_get_contents('php://input'). Op die manier kun je in ieder geval uitsluiten dat het daar niet aan ligt.

Je zou ook kunnen kijken naar de documentatie van dit apparaat, staan daar nog details in over hoe informatie is aangeleverd?

En tot slot zou je altijd kunnen proberen om het melden + weergeven van fouten aan te zetten in het afhandelend script, en dan deze proberen aan te roepen zoals dit apparaat dat doet.

Zet het volgende bovenaan je code:
<?php
error_reporting(E_ALL); // welke fouten melden (alle)
ini_set('display_startup_errors', true);
ini_set('display_errors', 'stdout');
?>

Ook zou je wellicht $content op kunnen vangen in een plat bestand, en dan vervolgens dit bestand inhoudelijk kunnen inspecteren om te zien wat er aan data binnenkomt.

Op dit moment kun je denk ik het beste inzetten op strategieën waarmee je dingen kunt uitsluiten / data kunt analyseren.
Kijk nu komen we verder



Warning: Use of undefined constant temperature - assumed 'temperature' (this will throw an Error in a future version of PHP) in /home/bla/public_html/sitepro/add1.php on line 24
ok

[size=xsmall]Toevoeging op 27/03/2020 21:22:15:[/size]

Sorry die reageerde op een echo. Nu krijg ik weer geen melding nu ik die echo weg gehaald heb
Wat de error dus zegt :-)

Gebruik 'temperature' etc.. tussen je brackets.
Ja sorry dat had ik al aangepast. Was een testje om te zien of ik iets binnen kreeg. maar dus niet het probleem.
En via $_POST?
Sorry Arien, ik snap je vraag niet.

Reageren