如何使用 slim 获取 post 请求数据?

How to get post request data using slim?

这是一个简单的 crud 应用程序,我正在使用 mysql 数据库... slim 版本是 2.6.2。 Mysql 版本为 5.7.8

邮递员图片:

// Adds a customer
function addCustomer() {
    //$request = Slim::getInstance()->request();
    $request = \Slim\Slim::getInstance()->request();
    $cus = json_decode($request->getBody());

    $sql = "INSERT INTO customers (Username,First_Name,Last_Name,Email,Phone,Password,Type,Status) VALUES (:username, :firstname, :lastname, :email, :phone, :password, :type, :status)";
    try {
        $db = DB_Connection();
        $stmt = $db->prepare($sql);  
        
        $stmt->bindParam("username", $cus->Username);
        $stmt->bindParam("firstname", $cus->First_Name);
        $stmt->bindParam("lastname", $cus->Last_Name);
        $stmt->bindParam("email", $cus->Email);
        $stmt->bindParam("phone", $cus->Phone);
        $stmt->bindParam("password", $cus->Password);
        $stmt->bindParam("type", $cus->Type);
        $stmt->bindParam("status", $cus->Status);
        $stmt->execute();
        $cus->id = $db->lastInsertId();
        $db = null;
        echo json_encode($cus); 
    } catch(PDOException $e) {
        echo '{"error":{"text":'. $e->getMessage() .'}}'; 
    }
}

获取请求工作正常:

我相信您缺少的是绑定语句中参数前的冒号。您应该更正为:

$stmt->bindParam(":username", $cus->Username);
$stmt->bindParam(":firstname", $cus->First_Name);
$stmt->bindParam(":lastname", $cus->Last_Name);
$stmt->bindParam(":email", $cus->Email);
$stmt->bindParam(":phone", $cus->Phone);
$stmt->bindParam(":password", $cus->Password);
$stmt->bindParam(":type", $cus->Type);
$stmt->bindParam(":status", $cus->Status);

编辑

实际上,现在我进行了更深入的研究,你正在传递首字母小写的参数(看看 Postman 屏幕截图,你使用了用户名,但在你的代码中,你试图分配用户名) .把一个大写的"Username"作为一个post字段给Postman,或者替换如下:

$stmt->bindParam(":username", $cus->username);
$stmt->bindParam(":firstname", $cus->firstname);
$stmt->bindParam(":lastname", $cus->lastname);
$stmt->bindParam(":email", $cus->email);
$stmt->bindParam(":phone", $cus->phone);
$stmt->bindParam(":password", $cus->password);
$stmt->bindParam(":type", $cus->type);
$stmt->bindParam(":status", $cus->status);

编辑二

用以下循环替换所有绑定:

foreach($request->params() as $key => $val) {
    $stmt->bindParam($key, $val);
}

我认为您要插入的 $cus->Username 是 empty.Try 以使用 $stmt->bindValue 而不是 $stmt->bindParam。

这看起来像是区分大小写的问题。您正在绑定表单中的参数,试图通过对应的数据库列名称引用它们。您的邮递员屏幕截图显示输入名称均为小写。

尝试

    $stmt->bindParam("username", $cus->username);
    $stmt->bindParam("firstname", $cus->firstname);
    $stmt->bindParam("lastname", $cus->lastname);
    $stmt->bindParam("email", $cus->email);
    $stmt->bindParam("phone", $cus->phone);
    $stmt->bindParam("password", $cus->password);
    $stmt->bindParam("type", $cus->type);
    $stmt->bindParam("status", $cus->status);