Hier ist mein Dilemma. Das Update-Bit funktioniert, aber wie kann ich dieselbe Update-API verwenden, um ein Element per POST-Anfrage zu löschen? Eine schnelle Abhilfe, die sich mein iOS-Entwickler ausgedacht hat, besteht darin, dass ein Benutzer, wenn er zum Löschen eines Elements wischt, den Namen des Elements als „DELETE“ oder etwas in dieser Richtung sendet. Dadurch wird eine Löschabfrage für den Datenbankeintrag initiiert. Das gefällt mir nicht, denn jeder könnte das herausfinden und das System ausnutzen. Wenn ich beispielsweise ein Element bearbeite, muss ich lediglich DELETE für den Namen des Elements eingeben und die API würde ihn wie eine Löschanforderung verarbeiten. Es muss einen besseren Weg geben und ich würde mich über jeden Vorschlag freuen. Unten ist mein aktueller PHP-Code, der den API-Aufruf verarbeitet. Mein Vorschlag war jedoch, gleichzeitig zwei API-Aufrufe zu senden, nachdem ein Benutzer auf FERTIG geklickt hat, um seine Artikelseite zu bearbeiten. Eine für update.php, wenn der Benutzer ein Element aktualisiert, und eine andere für delete.php, wenn ein Benutzer beschließt, ein Element zu löschen.
Code: Select all
// 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 $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();
}