Как мне установить переменную `true`, если обновление базы данных прошло успешно? - PullRequest
0 голосов
/ 31 января 2019

В блоге, который я пишу, администратор может дать «авторское» разрешение пользователям.

Когда обновление таблицы БД прошло успешно, а для их разрешения установлено «Автор»,Администратор вернется к списку всех текущих авторов.

Я хочу, чтобы сообщение ("Автор был добавлен.", например,) появилось на этом сайте после его успешного завершения.

Конечно, возможность не работающего обновления базы данных минимальна, я думаю, но я хочу, чтобы этот случай был рассмотрен.

Чтобы сделать это, я хотел установить $newAuthor true, когда база данных имеетбыл обновлен, но это не сработало, попробовав его с if.

Вот функции в AdminController и UserRepository с запросом db:

//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 голосов
/ 31 января 2019

Вы можете либо проверить разрешение перед его изменением и посмотреть, есть ли разница, либо просто проверить, успешно ли работал запрос ОБНОВЛЕНИЯ.

Поскольку прототип: public PDOStatement::execute ([ array $input_parameters ] ) : bool

Вы можетепроверьте, был ли запрос успешным, проверив возвращаемое значение функции execute следующим образом:

$result = $stmt->execute([
    'id' => $id,
    'permission' => $permission
  ]);

if ($result == FALSE)
    echo 'ERROR';
else
    echo 'ok';

Также непосредственно поместите $newAuthor = $this->userRepository->changePermission($id, $permission); в функциюmissionAuthor.

Но еще одна вещь, яне видите, где вы вызываете свою функцию allowAuthor в своем коде?Вы уверены, что оно выполнено?

...