这是我们目前的设置。我们有一个iOS应用程序,它对我的PHP脚本进行API调用,该脚本处理请求并通过PDO和MySQL查询数据库。因此,在这种情况下,有一个update_items.php API,iOS应用程序将参数值发送给用户,并根据用户是在更新项目还是删除项目,API会相应地处理它并多次查询数据库(所有请求都在一个请求中) )。
这就是我的困境。我有更新位工作,但如何使用相同的更新API通过POST请求删除项目?我的iOS开发人员提出的一个快速补救措施是,如果用户滑动删除某个项目,他会将该项目的名称发送为" DELETE"或类似的规定。这将启动数据库记录的删除查询。我不喜欢这样,因为任何人都可以解决这个问题并利用系统。例如,在编辑项目时,我所要做的就是输入DELETE作为项目的名称,API会像删除请求一样处理它。必须有更好的方法,我将不胜感激任何建议。下面是我当前处理API调用的PHP代码。但是,我的建议是在用户单击DONE以编辑其项目页面后同时发送两个API调用。一个是update.php,如果用户更新项目,另一个是delete.php,如果用户决定删除一个项目。
// now check for updating/deleting ingredients for the menu item
if( isset($the_request['id']) ) {
/*
iterate through avalialable values because there could be multiple ingredient ids involved. handle it.
*/
for( $i=0;$i<count($the_request['id']);$i++ ) {
// the queries. check if ingredient is being deleted or not via passed paramater value
switch($the_request['name'][$i]) {
case 'DELETE':
// assign passed parameter for delete query
$params = array(
':id' => $the_request['id'][$i]
);
// the query
$query = 'DELETE FROM TABLE WHERE id = :id';
break;
default:
// assign passed parameters for query
$params = array(
':name' => $the_request['name'][$i],
':price' => $the_request['price'][$i]
);
// Remove the empty values
$params = array_filter($params, function($param) { return !empty($param); });
// Build an array of SET parameters
$set = array_map(function($key) {
return sprintf('%s = %s', substr($key, 1), $key);
}, array_keys($params));
// don't forget the id
$params[':id'] = $the_request['id'][$i];
// the query
$query = sprintf('UPDATE TABLE SET %s WHERE id = :id', implode(', ', $set));
}
// prepare statement
if( $ingStmt = $dbh->prepare($query) ) {
$ingStmt->execute($params);
} else {
echo json_encode(array('error' => $dbh->errorInfo().__LINE__));
}
}
$ingStmt->closeCursor();
}
答案 0 :(得分:1)
REST回答是没有使用POST请求,请使用单独的DELETE请求。