Ich habe mich viel umgeschaut, bevor ich diese Frage gepostet habe, also entschuldige mich, wenn es auf einem anderen Post ist und dies ist nur meine zweite Frage hier also entschuldige mich, wenn ich diese Frage nicht richtig formatiere.JSON POST mit PHP lesen
Ich habe einen wirklich einfachen Webdienst, den ich erstellt habe, der post-Werte nehmen und ein JSON-codiertes Array zurückgeben muss. Das alles funktionierte gut, bis mir gesagt wurde, dass ich die Formulardaten mit einem Inhaltstyp der Anwendung/json posten müsste. Seit dem kann ich keine Werte mehr aus dem Webservice zurückgeben und es hat definitiv etwas damit zu tun, wie ich ihre Postwerte filtere.
Grundsätzlich in meinem lokalen Setup habe ich eine Testseite erstellt, die die folgenden -
$curl = curl_init();
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($data))
);
curl_setopt($curl, CURLOPT_URL, 'http://webservice.local/'); // Set the url path we want to call
$result = curl_exec($curl);
//see the results
$json=json_decode($result,true);
curl_close($curl);
print_r($json);
Auf der webservice Ich habe dies (ich habe einige der Funktionen gezupft) -
<?php
header('Content-type: application/json');
/* connect to the db */
$link = mysql_connect('localhost','root','root') or die('Cannot connect to the DB');
mysql_select_db('webservice',$link) or die('Cannot select the DB');
if(isset($_POST['action']) && $_POST['action'] == 'login') {
$statusCode = array('statusCode'=>1, 'statusDescription'=>'Login Process - Fail');
$posts[] = array('status'=>$statusCode);
header('Content-type: application/json');
echo json_encode($posts);
/* disconnect from the db */
}
@mysql_close($link);
?>
Grundsätzlich weiß ich, dass es aufgrund der $ _POST-Werte nicht gesetzt ist, aber ich kann nicht finden, was ich anstelle von $ _POST setzen muss. Ich habe versucht, json_decode ($ _ POST), file_get_contents ("php: // Eingabe") und eine Reihe anderer Möglichkeiten, aber ich schoss im Dunkeln ein wenig.
Jede Hilfe würde sehr geschätzt werden.
Danke, Steve
Danke Michael für die Hilfe, dass ein bestimmter Schritt nach vorne war, habe ich wenigstens jetzt auf einen repsonse bekam, als ich die Post echo .... auch wenn es
aktualisiert null ist Curl -
$curl = curl_init();
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($curl, CURLOPT_URL, 'http://webservice.local/');
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data));
aktualisiert pHP auf der Seite, die die Daten geschrieben wird -
$inputJSON = file_get_contents('php://input');
$input= json_decode($inputJSON, TRUE); //convert JSON into array
print_r(json_encode($input));
Wie ich zumindest sage, sehe ich eine Antwort jetzt, bevor es eine leere Seite zurückgab
Nicht sicher, was der Fehler ist, aber IMHO, der erste Schritt wäre der Inhalt von $ _POST, um zu sehen, was drin ist. Wenn die Daten da sind, ist es ziemlich einfach, mit ihnen umzugehen. Wenn $ _POST leer ist, wissen Sie zumindest, wo das Problem liegt. – Sylverdrag
Es funktioniert für mich! – jruzafa