成功更新数据库后,如何设置变量“ true”?

时间:2019-01-31 13:24:01

标签: php mysql methods boolean

在我正在编码的博客上,管理员可以向用户授予“作者”权限。

成功更新数据库表并将其权限设置为“作者”后,管理员将回到所有当前作者列表。

成功后,我希望在此网站上显示一条消息(例如“已添加作者”。)。

我认为,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来进行尝试。可能是错误的,因为它没有改变任何东西。

1 个答案:

答案 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函数的位置吗?您确定它已经执行了吗?