简体   繁体   中英

Postman raw data works but form-data not works on POST request in php

I'm creating reset login signup api in PHP using JWT and I'm facing some problems when using postman.When I'll try to send raw data in JSON(application/json) format, it gets success but when I send form-data, it's not working.

login api

<?PHP
  header("Access-Control-Allow-Origin: *");
  header("Access-Control-Allow-Methods: POST");
  header("Content-Type: application/json; charset=UTF-8");
  header("Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With");

 function msg($success,$status,$message,$extra = []){
 return array_merge([
    'success' => $success,
    'status' => $status,
    'message' => $message
],$extra);
}

// INCLUDING DATABASE AND MAKING OBJECT
require __DIR__.'/classes/Database.php';
$db_connection = new Database();
$conn = $db_connection->dbConnection();

// GET DATA FORM REQUEST
$data = json_decode(file_get_contents("php://input"));
$returnData = [];

// IF REQUEST METHOD IS NOT POST
if($_SERVER["REQUEST_METHOD"] != "POST"):
$returnData = msg(0,404,'Page Not Found!');

// CHECKING EMPTY FIELDS
elseif(!isset($data->firstname)
|| !isset($data->lastname)
|| !isset($data->mobile)
|| !isset($data->email) 
|| !isset($data->password)
|| !isset($data->class)
|| empty(trim($data->firstname))
|| empty(trim($data->lastname))
|| empty(trim($data->mobile))
|| empty(trim($data->email))
|| empty(trim($data->password))
|| empty(trim($data->class))
):

$fields = ['fields' => ['firstname', 'lastname', 'mobile', 'email', 'password', 'class']];
$returnData = msg(0,422,'Please Fill in all Required Fields!',$fields);

// IF THERE ARE NO EMPTY FIELDS THEN-
else:

$firstname = trim($data->firstname);
$lastname = trim($data->lastname);
$mobile = trim($data->mobile);
$email = trim($data->email);
$password = trim($data->password);
$class = trim($data->class);


if(!filter_var($email, FILTER_VALIDATE_EMAIL)):
    $returnData = msg(0,422,'Invalid Email Address!');

elseif(strlen($password) < 8):
    $returnData = msg(0,422,'Your password must be at least 8 characters long!');

elseif(strlen($firstname) < 3):
    $returnData = msg(0,422,'Your first name must be at least 3 characters long!');

elseif(strlen($lastname) < 3):
    $returnData = msg(0,422,'Your last name must be at least 3 characters long!');

elseif(strlen($mobile) < 10):
    $returnData = msg(0,422,'Your mobile number must be at least 10 characters long!');    

else:
    try{

        $check_email = "SELECT `email` FROM `users` WHERE `email`=:email";
        $check_email_stmt = $conn->prepare($check_email);
        $check_email_stmt->bindValue(':email', $email,PDO::PARAM_STR);
        $check_email_stmt->execute();

        if($check_email_stmt->rowCount()):
            $returnData = msg(0,422, 'This E-mail already in use!');

        else:
            $insert_query = "INSERT INTO `users`(`firstname`,`lastname`,`mobile`,`email`,`password`,`class`) VALUES(:firstname,:lastname,:mobile,:email,:password,:class)";

            $insert_stmt = $conn->prepare($insert_query);

            // DATA BINDING
            $insert_stmt->bindValue(':firstname', 
            htmlspecialchars(strip_tags($firstname)),PDO::PARAM_STR);
            $insert_stmt->bindValue(':lastname', 
            htmlspecialchars(strip_tags($lastname)),PDO::PARAM_STR);
            $insert_stmt->bindValue(':mobile', $mobile,PDO::PARAM_STR);
            $insert_stmt->bindValue(':email', $email,PDO::PARAM_STR);
            $insert_stmt->bindValue(':password', password_hash($password, PASSWORD_DEFAULT),PDO::PARAM_STR);
            $insert_stmt->bindValue(':class', $class,PDO::PARAM_STR);

            $insert_stmt->execute();

            $returnData = msg(1,201,'You have successfully registered.');

        endif;

    }
    catch(PDOException $e){
        $returnData = msg(0,500,$e->getMessage());
    }
endif;

endif;

echo json_encode($returnData);

please tell me where I'm wrong and help me to solve this issue.

Thanks in advance

使用表单数据发送数据 使用 raw 发送数据

You aren't correct sending the form to the your API endpoint.

Step 1. - Use the header params: (Header tab - key:value -> Content-type: application/json)

Step 2. - Don't use formdata options. This method send simple POST request without json_encoding! You can only use raw option.

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