v2.5.2
Giriş yap

sorguyu oturtamamak

emmir2
320 defa görüntülendi

Merhabalar 3 adet premium paketim mevcut kullanıcı kayıt olduğu zaman bu 3 pakette 1 hafta olarak hediye ediliyor 1 hafta sonra premium süresi bitiyor buraya kadar sorunum yok

Ek olarak satın alırsa 1 yıl 1 hafta 1 hafta olarak süreleri mevcut

şimdi benim mantık hatası yaptığım nokta hediye olarak verilen premium süresi dolunca o kodlar hep aktif kalmakta ben ek olarak paket satın alımı gerçekleştirsem bile otomatik olarak veriyi 0 yapıyor koşulları kafam da oturtamadım daha doğrusu yardımcı olacak varmı

  @$pretarih = $preControl['date'];
  @$kayitTarihi = $userControl['kayit_tarihi'];

  $premiumbitisi = date('Y-m-d H:i:s', strtotime($kayitTarihi. ' + 1 weeks'));
  if($premiumbitisi < date('Y-m-d H:i:s')){
      $islem = $db->prepare("UPDATE emlakci SET premium_1 = ? WHERE id = ?");
      $islem = $islem->execute(array(0,$userControl['id']));
    }

  $premium2bitisi = date('Y-m-d H:i:s', strtotime($kayitTarihi. ' + 1 weeks'));
  if($premium2bitisi < date('Y-m-d H:i:s')){
      $islem = $db->prepare("UPDATE emlakci SET premium_2 = ? WHERE id = ?");
      $islem = $islem->execute(array(0,$userControl['id']));
    }

     $premium3bitisi = date('Y-m-d H:i:s', strtotime($kayitTarihi. ' + 1 weeks'));
  if($premium3bitisi < date('Y-m-d H:i:s')){
      $islem = $db->prepare("UPDATE emlakci SET premium_3 = ? WHERE id = ?");
      $islem = $islem->execute(array(0,$userControl['id']));
    }

    $premiumbitisii = date('Y-m-d H:i:s', strtotime($pretarih. ' + 1 years'));
  if($premiumbitisii < date('Y-m-d H:i:s')){
      $islem = $db->prepare("UPDATE emlakci SET premium_1 = ? WHERE id = ?");
      $islem = $islem->execute(array(0,$userControl['id']));
      if ($islem) {
        $islem = $db->prepare("UPDATE premium_uyelik SET premium_1 = ? WHERE id = ?");
        $islem = $islem->execute(array(0,$userControl['id']));
      }
    }

    $premium2bitisii = date('Y-m-d H:i:s', strtotime($pretarih. ' + 1 weeks'));
  if($premium2bitisii < date('Y-m-d H:i:s')){
      $islem = $db->prepare("UPDATE emlakci SET premium_2 = ? WHERE id = ?");
      $islem = $islem->execute(array(0,$userControl['id']));
      if ($islem) {
        $islem = $db->prepare("UPDATE premium_uyelik SET premium_2 = ? WHERE id = ?");
        $islem = $islem->execute(array(0,$userControl['id']));
      }
    }


    $premium3bitisii = date('Y-m-d H:i:s', strtotime($pretarih. ' + 1 years'));
  if($premium3bitisii < date('Y-m-d H:i:s')){
      $islem = $db->prepare("UPDATE emlakci SET premium_3 = ? WHERE id = ?");
      $islem = $islem->execute(array(0,$userControl['id']));
      if ($islem) {
        $islem = $db->prepare("UPDATE premium_uyelik SET premium_3 = ? WHERE id = ?");
        $islem = $islem->execute(array(0,$userControl['id']));
      }
    }
Cevap yaz
Cevaplar (6)
ebykdrms
678 gün önce

Tek tablo çok daha rahat olur tabi. Ama orada da premium_1, premium_2 ve premium_3 sütunlarında bitiş tarihi tutmanız daha uygun olur.
premium_bittimi diye ayrı bir sütuna gerek olduğunu sanmıyorum.
emlakci tablosu:
id, kayit_tarihi, premium_1, premium_2, premium_3 sütunlarına sahip olursa ve bu premium sütunları bitiş tarihini tutarsa rahatça sorgulama yapabilirsiniz.
Eğer tarihleri PHP ile hesaplatırsanız çok fazla ihtimale göre kod yazmanız gerekecek.

emmir2
678 gün önce

premium_1 paketi en üst sırada çıkmasını sağlıyor
premium_2 ek il ve ilçe sağlıyor
premium_3 fotoğrafın yanına çerçeve eklemesini sağlıyor

ikinci bir sorgu veya tablo birleştirmek yerine direkt emlakçı tablosuna da ekledimm
alt yapıda full bunun üzerine kurulu sadece çakışma olmakta haftalık paket bitince kodlar sürekli kontrol ediyor
şöyle bir şey düşünüyorum 3 sutün daha açıp hediyelik premium bitince onlar da 0 olacak süre dolunca o sütunları 0 yapıp sonrasın da premiumları bitiricemm

örnek olarak

<?php
    $premiumbitisi = date('Y-m-d H:i:s', strtotime($kayitTarihi. ' + 1 weeks'));
  if($premiumbitisi < date('Y-m-d H:i:s')){
      $islem = $db->prepare("UPDATE emlakci SET premium_bittimi1 = ? WHERE id = ?");
      $islem = $islem->execute(array(0,$userControl['id']));
      
      if($islem){
        $islem = $db->prepare("UPDATE emlakci SET premium_1 = ? WHERE id = ?");
        $islem = $islem->execute(array(0,$userControl['id']));
      }
    }
?>
ebykdrms
678 gün önce

O zaman sanırım veritabanında tuttuğunuz verilerle ilgili bir sorun olabilir.
emlakci tablonuzda premium_1, premium_2 ve premium_3 adında sütunlarınız var.
Ayrıca premium_uyelik tablonuzda da bu alanlar var.
Hem emlakci hem de premium_uyelik tablolarından kayıt çekerken tek bir id değeri kullanıyorsunuz. Sanırım bir üye kaydı yaptığınızda üyenin 2 tabloda da kaydını oluşturuyorsunuz ve id'lerin böylece aynı olmasını sağlıyorsunuz. Burada bir sorun var gibi geldi bana.
Eğer premium üyelikleri ayrı bir tabloda tutacaksanız, emlakci tablonuzda 3 adet premium durumu tutmak yerine premium_uyelik tablosuyla ilişki kurabileceğiniz 1 adet premium_uyelik_id adlı sütununuz olmalı. Yani:
emlakci tablosu sütunları: id, kayit_tarihi, premium_uyelik_id şeklinde olmalı.
Buradaki premium_uyelik_id sütunu, kullanıcının premium üyeliği varsa premium_uyelik tablosuna kaydedildiği id değerini tutmalı. Kullanıcı premium üyelik almamışsa bu değer 0 olmalı.
Siz ilk kez sisteme kaydolan kullanıcıya direkt 1 haftalık premium paketlerini hediye ettiğiniz için kullanıcı kayıt olduğu anda iki tabloda da kullanıcıya kayıt açmalısınız ve premium_uyelik tablosunda kullanıcının id değerini alıp emlakci tablosundaki premium_uyelik_id sütununa yazmalısınız.
Böylece artık emlakci tablosunda sadece üyenin herhangi bir premium paketi olup olmadığını tutmuş olacaksınız. Premium detaylarını da premium_uyelik tablosunda tutuyorsunuz zaten.
Daha sonra bir premium paketinin bitiş tarihini nasıl hesaplayacağınızı kurgulamak lazım. Burada hesaplamayı "+1 week" şeklinde yapmamalısınız.
premium_uyelik tablosunda kayıt oluştururken zaten ne süreyle premium üyelik verdiğinizi biliyorsunuz. Bu yüzden bu tabloda paketin bitiş tarihini tutmalısınız. Mesela premium_1 sütununda, bu üyenin 1. premium paketinin hangi tarihte sona ereceği bilgisi direkt tutulabilir. Eğer kullanıcı bu paketi hiç almamışsa buranın değeri NULL olur.

Böylece örneğin şöyle bir veritabanı yapısına kavuştuk:

emlakci

id: 123
kayit_tarihi: '2022-06-23 15:55:24'
premium_uyelik_id: 23

premium_uyelik

id: 23
premium_1: '2022-06-30 15:55:24'
premium_2: '2022-06-30 15:55:24'
premium_3: '2022-06-30 15:55:24'

Bu üye sisteme 23 Haziran'da kaydolmuş. Biz de kayıt tarihinden itibaren 1 hafta sonra sonlanmak üzere 3 premium paketi de vermişiz.
Sonra mesela bu üye paketleri incelemiş ve premium_2 paketini beğenip 1 aylığına almak istemiş olsun.
O zaman bu üyenin premium_uyelik_id sütununa bakarak 23 değerini elde ederiz.
premium_uyelik tablosundaki id=23 olan sütunun premium_2 sütunundaki tarihi alırız.
Bu tarih geçmiş bir tarih mi?
EVET: O zaman premium_2 alanına bugünün şu anından itibaren 1 ay sonrasının tarihini yazarız.
HAYIR: O zaman premium_2 alanındaki tarihi alır, bu tarihe 1 ay ekler, yeni tarihi buraya yazarız.

Böylece premium_uyelik tablosunun id=23 satırının son hali şöyle olur:
id: 23
premium_1: '2022-06-30 15:55:24'
premium_2: '2022-07-30 15:55:24' (1 hafta + 1 ay)
premium_3: '2022-06-30 15:55:24'

Kontrollerimizi yaparken artık işimiz çok kolay. Üyenin herhangi bir premium üyeliği var mı diye emlakci tablosundaki premium_uyelik_id değerine bakarız. Bu değer NULL veya 0 değilse belli ki premium üyeliği var veya daha önce en az bir kere premium üyelik almış. (Tabi siz kaydolan her müşteriye premium verdiğiniz için bu mecburen olacak)
Sonra bu değer ile premium_uyelik tablosuna gider, her bir premium paket için kayıtlı tarihi kontrol ederek günü geçmiş mi diye bakarız.
Günü geçmemiş olanlar aktiftir. Günü geçmiş olanları umursamamıza gerek yok.

Uzun bir cevap oldu. Umarım anlaşılır olmuştur. Kurgu yazması kolay. Kodlamasında kolay gelsin... :)

emmir2
678 gün önce

öncelikle yazım kurallarından nefret ediyorum de ayrı de ayrı diye diye nerde de görsem ayrı yazmaya başladım doğru yanlış :D
her neysee
işleyiş şu şekilde 3 adet paketim var kayıt tarihinden 1 hafta sonrasına kadar hediye ediyorum.
bu kodlar ile süre dolunca paketi sonlandırıyorum

  $premiumbitisi = date('Y-m-d H:i:s', strtotime($kayitTarihi. ' + 1 weeks'));
  if($premiumbitisi < date('Y-m-d H:i:s')){
      $islem = $db->prepare("UPDATE emlakci SET premium_1 = ? WHERE id = ?");
      $islem = $islem->execute(array(0,$userControl['id']));
    }

bu 1 hafta süre olunca bu kod hep aktif kalıyor
üye premium paketler kısmından premium üyelik alır almaz premium durumu direkt olarak 0 oluyor
Bu kısım da premium paketler tarafından alınan yer süre dolunca paketi sonlandırıyorum

 $premiumbitisii = date('Y-m-d H:i:s', strtotime($pretarih. ' + 1 years'));
  if($premiumbitisii < date('Y-m-d H:i:s')){
      $islem = $db->prepare("UPDATE emlakci SET premium_1 = ? WHERE id = ?");
      $islem = $islem->execute(array(0,$userControl['id']));
      if ($islem) {
        $islem = $db->prepare("UPDATE premium_uyelik SET premium_1 = ? WHERE id = ?");
        $islem = $islem->execute(array(0,$userControl['id']));
      }
    }
ebykdrms
678 gün önce
1) Kurgunuz şu şekilde mi?

Sizin 1 adet premium üyelik özelliğiniz var. Paketler, bu premium özelliklerine ne kadar süreyle sahip olunacağını belirtiyor.
1.paketi seçerlerse 1 haftalık premium üyelik kazanmış oluyorlar.
2.paketi seçerlerse 1 aylık premium üyelik kazanmış oluyorlar.
3.paketi seçerlerse 1 yıllık premium üyelik kazanmış oluyorlar.

2) Yoksa kurgunuz şu şekilde mi?

Sizin 3 adet premium üyelik özelliğiniz var. Paketler, hangi premium özelliklerine sahip olunacağını belirtiyor.
1.paketi seçerlerse 1.premium üyelik özelliklerini almak için 1 hafta, 1 ay, 1 yıl seçenekleri mevcut.
2.paketi seçerlerse 2.premium üyelik özelliklerini almak için 1 hafta, 1 ay, 1 yıl seçenekleri mevcut.
3.paketi seçerlerse 3.premium üyelik özelliklerini almak için 1 hafta, 1 ay, 1 yıl seçenekleri mevcut.

Anladığım kadarıyla 2. kurgu sizin için geçerli çünkü kayıt tarihinden itibaren 1 hafta boyunca 3 paketi de hediye ediyorsunuz.
Yani 3 farklı premium üyelik özelliklerini kayıt tarihinden itibaren 1 hafta boyunca kullanıcıya hediye etmek istiyorsunuz.

2 kurgu da üzerine ayrı ayrı düşünelecek kurgular. Sizinki hangisiyse ona göre ilerleyelim.

NOT: "dahi" anlamındaki tüm -de'leri bitişik, hal eki olan tüm -de'leri ayrı, ayrı yazılması gereken tüm soru eklerini bitişik yazıyorsunuz. Bu TDK'ye bir tepki mi diye düşündüm bi'an.

emmir2
679 gün önce

Yokmu fikri olann ?