2016-03-31 4 views
-1

Я действительно новичок в фоновом режиме, и я создаю приложение для 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(); 
    } 

ответ

0

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

strotime($last_vote_date) < strotime($current_date) 

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

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

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

+0

Например, если я сегодня проголосую 11:00 вечера, позвольте мне проголосовать 12:10 на следующий день? –

+0

Да, вы понимаете ответ, который я вам дал? Что непонятно, поэтому я могу помочь вам это понять? Чтобы проверить его, измените запись базы данных и установите дату на 24 часа. – Garytje

+0

Я не знаю, где разместить код в моем PHP-файле. И как я буду конвертировать свою дату? Нужно ли мне менять тип столбца базы данных date_voted на TIME или DATETIME или TIMESTAMP? В настоящее время этот тип DATE. –