如何使用 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);
这是一个简单的 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);