Как ограничить функцию голосования в приложении Facebook один раз в день?

Я действительно новичок в бэк-энде, и я создаю приложение для Facebook с несколькими записями фотографий с механикой голосования. Вы можете голосовать за одну или несколько записей один раз в день, а также определять ваш идентификатор Facebook, чтобы при голосовании база данных определяла ваш идентификатор Facebook, номер записи, за которую вы проголосовали, и дату, когда вы проголосовали. Когда вы голосуете в течение текущей даты, появится всплывающее окно с надписью «Вы успешно проголосовали». Затем, когда вы попробуете снова ту же дату, всплывающее сообщение изменится, и вместо этого будет написано «попробуйте проголосовать завтра». Он также показывает количество голосов на странице входа.

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

Вот код для страницы PHP: (отредактировал это, уже решил проблему, спасибо за помощь)

date_default_timezone_set('Asia/Manila');

// Get last vote date: fetch_date_voted returns none if user voted for first time
$current_date = date('Y-m-d');
$fetch_date_return = $this->fetch_date_voted($entry_id, $facebook_id, $table_prefix, $conn);
$last_vote_date = $fetch_date_return['last_date'];$return['date_last_voted'] = $fetch_date_return;

// Below is a code i got from stackoverflow - 844641242329946 (kristina id)
/*if( $last_vote_date && ($last_vote_date == "none" || (strtotime($last_vote_date) + (60*60*24)) < strtotime($current_date))){*/
// Below is the original code
if( $last_vote_date == "none" || $last_vote_date < $current_date )   {
$table_name = $table_prefix . '_voter';
$query = $conn->query("INSERT INTO $table_name
(facebook_id, entry_id, date_voted)
VALUES
($facebook_id, $entry_id, '$current_date')
");
//

// After doing INSERT, the variable $query will return a TRUE status
if ( $query ) {

// If the date fetched is TRUE, it will UPDATE
$update = $this->update_count($entry_id, $table_prefix, $conn);

// If update is successful, it will fetch the latest vote_count
if($update) {

$fetched_data = $this->fetch_current_count($entry_id, $table_prefix, $conn);

if ($fetched_data['status']) {
$return['status']           = true;
$return['vote_count']       = $fetched_data['vote_count'];

} else {
$return['status'] = false;
}
} else {
$return['status'] = false;
}

} else {

die('Error : ('. $conn->errno .') '. $conn->error);
$return['status']         = false;
$return['error_response'] = $conn->error;

}
} else {
$return['status'] = false;
$return['error_response'] = 'date_invalid';

}echo json_encode($return);

//$query->close();
$conn->close();
}

-1

Решение

$ last_vote_date И $ current_date являются строковыми представлениями даты, конвертируют их во время, и это работает:

strotime($last_vote_date) < strotime($current_date)

Помните, что это всегда будет возвращать true, потому что вы хотите, чтобы они не использовали его в течение дня, поэтому это будет:

 if( $last_vote_date && ($last_vote_date == "none" || (strtotime($last_vote_date) + (60*60*24)) < strtotime($current_date))){

добавить 24 часа.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]