Здравствуйте.
Не совсем понятно зачем вы столько наворотили. Можно же вот так все организовать: все разбито по функциям. Никаких лишних телодвижений :)
Псевдокод:
public function addPost(...параметры...) {
// добавляем запись о репосте в бд
}
public function post(...параметры...) {
//постим запись
}
public function run(...параметры...) {
// в условии сразу смотрите на дату последнего репоста
$result = $dbh->prepare("SELECT COUNT(*) FROM `reposts` WHERE `id` = :id AND SELECT DATEDIFF (`date`, CURDATE()) > 7");
$result->execute([
':id' => $id
]);
$result = $result->fetchAll();
//если записей нет - постим
if (!count($result)) {
$response = $this->post(...параметры...);
if ($response->success !== 1) {
$link = "https://vk.com/wall" . $gid . "_" . $response->post_id;
$this->addPost(...параметры...);
echo '<div class="alert alert-success" role="alert">Репост сделан! Проверить его наличие Вы можете по этой ссылке: <a href="' . $link . '" target="_blank">' . $link . '</a></div>';
} else {
echo '<div class="alert alert-danger" role="alert">Ошибка! Сервер ВКонтакте вернул ответ с кодом ошибки: ' . $response->error->error_code . '</div>';
}
} else {
echo '<div class="alert alert-danger" role="alert">Сожалеем, но мы уже делали с Вами репост на этой неделе.</div>';
}