2016-03-31 17 views
-1

Ben arka uçta şeyler gerçekten yeniyim ve oylama mekaniği ile birden fazla fotoğraf girişleri ile bir Facebook uygulaması yapıyorum. Günde bir veya daha fazla girişe oy verebilirsiniz ve Facebook kimliğinizi de algılar, böylece oy kullandığınızda, veritabanı Facebook kimliğinizi, seçtiğiniz oy numarasını ve oy verdiğiniz tarihi saptar. Geçerli tarihte oy kullandığınızda, "başarılı bir şekilde oy verdiniz" yazan bir pencere açılacaktır. Daha sonra aynı tarihi tekrar denediğinizde, pop-up'ın mesajı değişecek ve bunun yerine "yarın tekrar oylamaya çalışacağız" diyecek. Ayrıca giriş sayfasındaki oy sayısını gösterir.Facebook App'de günde bir kez oylama işlevi nasıl sınırlanır?

Tek sorunum, ilk kez bir kullanıcı olduğunuzda, iyi çalışıyor, geçerli tarihte tüm girişleri oylayabilir, ancak bir sonraki gün geri döndüğünüzde, oy verdiğinizde, yukarı, hâlihazırda oy kullandığınızı söyleyecektir ve oy sayısı güncellenmeyecektir. İşte

PHP sayfası için kod:

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(); 
    } 

cevap

0

$ last_vote_date (bu düzenlenebilir, zaten, yardım için teşekkürler sorunu çözüldü) VE $ CURRENT_DATE, bir tarih dize temsilleridir zaman onları dönüştürmek ve çalışıyor:

strotime($last_vote_date) < strotime($current_date) 

bunları bir gün için kullanmayın istiyorum çünkü bu her zaman doğru dönecek dikkat, bu yüzden olacaktır:

if($last_vote_date && ($last_vote_date == "none" || (strtotime($last_vote_date) + (60*60*24)) < strtotime($current_date))){ 
saat eklemek için

.

+0

Örneğin, bugün saat 11: 00 oyu verirsem, ertesi gün 12:10 oy vermeme izin verecek mi? –

+0

evet, size verdiğim cevabı anlıyor musunuz? Belirsiz olan şey, anlamanıza yardımcı olabilir miyim? Test etmek için bir veritabanı kaydını değiştirin ve tarihi 24 saat olarak ayarlayın. – Garytje

+0

Kodu PHP dosyamda nereye koyacağımı bilmiyorum. Ve tarihimi zamana nasıl dönüştüreceğim? Date_voted TIME veya DATETIME veya TIMESTAMP için veritabanı sütun türünü değiştirmem gerekir mi? Şu anda DATE tarihinde. –

İlgili konular