简体   繁体   中英

Cant post data in body in PHP

iam trying to post the following json data

{"name":"somename","email":"somemail","password":"abcdef"}

in the body of my api,

<?php


require_once 'include/DB_Functions.php';
$db = new DB_Functions();

// json response array
$response = array("error" => FALSE);

if (isset($_POST['name']) && isset($_POST['email']) && 
isset($_POST['password'])) {

// receiving the post params
$name = $_POST['name'];
$email = $_POST['email'];
$password = $_POST['password'];

// check if user is already existed with the same email
if ($db->isUserExisted($email)) {
    // user already existed
    $response["error"] = TRUE;
    $response["error_msg"] = "User already existed with " . $email;
    echo json_encode($response);
} else {
    // create a new user
    $user = $db->storeUser($name, $email, $password);
    if ($user) {
        // user stored successfully
        $response["error"] = FALSE;
        $response["uid"] = $user["unique_id"];
        $response["user"]["name"] = $user["name"];
        $response["user"]["email"] = $user["email"];
        $response["user"]["created_at"] = $user["created_at"];
        $response["user"]["updated_at"] = $user["updated_at"];
        echo json_encode($response);
    } else {
        // user failed to store
        $response["error"] = TRUE;
        $response["error_msg"] = "Unknown error occurred in registration!";
        echo json_encode($response);
    }
}
} else {
$response["error"] = TRUE;
$response["error_msg"] = "Required parameters (name, email or password) is 
missing!";
echo json_encode($response);
}
?>

my problem is that if (isset($_POST['name']) && isset($_POST['email']) && isset($_POST['password'])) is always false and the message Required parameters (name, email or password) is missing! is shown Required parameters (name, email or password) is missing! is shown

In the wampserver log, error is given as

PHP Deprecated: Automatically populating $HTTP_RAW_POST_DATA is deprecated and will be removed in a future version. To avoid this warning set 'always_populate_raw_post_data' to '-1' in php.ini and use the php://input stream instead. in Unknown on line 0

if sending post data as json, in api you must decode input data to array

$data = json_decode($_POST)

and after then continue with the condition

if (isset($data['name'], $data['email'], $data['password']) {

Note: This is a community wiki answer.

As per the manual on $HTTP_RAW_POST_DATA

http://php.net/manual/en/reserved.variables.httprawpostdata.php

"In general, php://input should be used instead of $HTTP_RAW_POST_DATA.".

As noted by the OP in comments also:

@Fred-ii- thanks, it worked by adding like this $postdata = file_get_contents("php://input");

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM