2016-03-31 15 views
-1

私はバックエンドのもので本当に新しく、投票の仕組みを持つ複数の写真エントリーを持つFacebookアプリを作っています。あなたは1日に1回または複数のエントリーに投票することができます。またあなたのFacebook IDを検出するので、投票時にあなたのFacebook ID、あなたが投票したエントリー番号、投票した日付を検出します。現在の日付に投票すると、「あなたは投票に成功しました」というポップアップが表示されます。同じ日付をもう一度やり直すと、ポップアップメッセージが変わり、代わりに「明日もう一度投票しよう」と表示されます。また、エントリーページの投票数も表示されます。1日に1回Facebook Appの投票機能を制限する方法は?

私の唯一の問題は、初めてのユーザーであれば正常に動作し、現在の日付のすべてのエントリに投票できますが、翌日に戻ったときに投票すると、あなたは既に投票したと言い、投票数は更新されません。

ここでは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と$ 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時間を追加します。

+0

たとえば、今日の午後11時に投票すると、翌日の午前12時10分に投票できますか? –

+0

はい、私があなたに与えた答えを理解していますか?私はあなたがそれを理解するのを助けることができるように不明なものは何ですか?これをテストするには、データベースレコードを変更し、日付を24時間前に設定します。 – Garytje

+0

私はPHPファイルにコードをどこに置くべきかわかりません。そして、私は自分の日時をどのように変えますか?データベース列date_votedの型をTIMEまたはDATETIMEまたはTIMESTAMPに変更する必要がありますか?現在DATEタイプです。 –

関連する問題