在我正在编码的博客上,管理员可以向用户授予“作者”权限。
成功更新数据库表并将其权限设置为“作者”后,管理员将回到所有当前作者列表。
成功后,我希望在此网站上显示一条消息(例如“已添加作者”。)。
我认为,db-update无法正常工作的可能性很小,但我希望考虑这种情况。
为此,我想在数据库更新后设置一个$newAuthor
true
,但是使用if
尝试它却没有用。
以下是带有db查询的AdminController和UserRepository中的函数:
//AdminController
public function permissionAuthor()
{
$id = $_GET['id'];
$permission = "author";
$newAuthor = false;
if($this->userRepository->changePermission($id, $permission)) {
$newAuthor = true;
}
header("Location: authors");
}
//UserRepository
public function changePermission($id, $permission)
{
$table = $this->getTableName();
$stmt = $this->pdo->prepare(
"UPDATE `{$table}` SET `permission` = :permission WHERE `id` = :id");
$changedPermission = $stmt->execute([
'id' => $id,
'permission' => $permission
]);
return $changedPermission;
}
// authors.php / the view
<?php if(isset($newAuthor) && $newAuthor == true):?>
<p class="error">Author has been added.</p>
<?php endif;?>
如何才能成功将$newAuthor
设置为true
,但更新数据库的功能已成功并且消息将在视图中显示?
编辑
我尝试通过在$changedPermission
中返回UserRepository
来进行尝试。可能是错误的,因为它没有改变任何东西。
答案 0 :(得分:-2)
您可以在更改权限之前先检查权限,看看是否有区别,或者只是检查UPDATE请求是否成功工作。
自原型以来:public PDOStatement::execute ([ array $input_parameters ] ) : bool
您可以通过验证执行函数的返回值来检查请求是否成功:
$result = $stmt->execute([
'id' => $id,
'permission' => $permission
]);
if ($result == FALSE)
echo 'ERROR';
else
echo 'ok';
还直接将$newAuthor = $this->userRepository->changePermission($id, $permission);
放到PermissionAuthor函数中。
还有一件事,我看不到您在代码中调用您的PermissionAuthor函数的位置吗?您确定它已经执行了吗?