• 08-02-2023, 02:58:11
    #1
    Selamunaleyküm, mysql tabloda download_ip alanına uniqe özelliği verdim. Aynı ip işlem yapınca veri kaydedilmiyor fakat 24 saat dolunca kayıtlı olan ip'yi tekrar kaydetsin istiyorum nasıl yapabilirim? Şimdiden teşekkürler.

    Pek bilgim yok o yüzden düzgün anlatamadım kusura bakmayın.
  • 08-02-2023, 03:09:37
    #2
    Aleyküm selam, bunu veritabanından yapmak yerine ip adresini php tarafında alıp bunu x isimli sessiona 86400 saniyeliğine kayıt edin. Sonrasında bir if sorgusu ile x isimli session yok ise veritabanına kayıt işlemi yaptırabilirsiniz.
  • 08-02-2023, 03:36:04
    #3
    Hocam bu işlemi ya mysql ya da php tarafından yapmanız gerekiyor. Mysql'de yapmak için phpmyadmin den şu sql komutu girmeniz gerekiyor:
    ALTER TABLE 'tablo_ismi' ADD UNIQUE 'unique_index'('birinci_uniq', 'ikinci_uniq');
    Ancak ben @Mücahit; hocama katılıyorum ve bu işlem backend tarafından yapılmasının daha olacağını düşünüyorum. Yalnız session ile değil de veritabanından sorgu şeklinde yapılsa daha iyi olabilir düşüncesindeyim.
    • Önce işlem yapılacak olan tablodan ip ve son güncelleme verisi çekilir
    • Sonra son güncelleme tarihinden bugünün tarihi çıkartılır
    • Eğer aradaki fark 24 saatten yani 1 günden fazlaysa
    • İlgili tabloya kişinin ip adresi atanır ve son güncelleme tarihine bugünün tarihi atanır
    Yazmış olduğum kod:
    $id = islem_yapilacak_id;
    $ip = islem_yapilacak_ip;
    
    
    $ipbul = $conn->query("SELECT * FROM tablo_ismi WHERE id='$id'");
    $ipbul  = $ipbul  ->fetch(PDO::FETCH_ASSOC);
    
    
    
    $buguntarihi= date('d/m/Y H:i:s');
    
    $fark = ($buguntarihi  - $ipbul['songuncellemetarihi']) / 86400;
    
    if(fark>1){ //1 günden yani 24 saatten fazlaysa
    
    try{
    $update = $conn->prepare("UPDATE tablo_ismi SET
      ip=:frm_ip,
      songuncellemetarihi =:frm_songuncellemetarihi
      WHERE id=:frm_id");
    
    
                    $update = $update->execute(array(
                      "frm_id" =>  $id ,
                      "frm_songuncellemetarihi " =>  $buguntarihi,
                      "frm_ip" =>  $ip
                    
                    ));
                    echo  "Successful";
                    header('Location: index.php');
    } catch ( PDOException $e ){
         print $e->getMessage();
         echo  "Transaction failed";
    }
    
    
    
    }
    PDO kodları için kendime şöyle bir doküman oluşturmuştum. Belki işinize yarar: https://github.com/asametyildirim/Ph.../tree/main/PDO

    Yukarıdaki kodlarda aşağıda bulunan yerleri sizin doldurmanız gerekiyor. Ayrıca veritabanınız da songuncellemetarihi adında satır olması gerekiyor.
    • tablo_ismi
    • birinci_uniq
    • ikinci_uniq
    • tablo_ismi
    • islem_yapilacak_id
    • islem_yapilacak_ip
  • 08-02-2023, 03:38:31
    #4
    Mücahit adlı üyeden alıntı: mesajı görüntüle
    Aleyküm selam, bunu veritabanından yapmak yerine ip adresini php tarafında alıp bunu x isimli sessiona 86400 saniyeliğine kayıt edin. Sonrasında bir if sorgusu ile x isimli session yok ise veritabanına kayıt işlemi yaptırabilirsiniz.
    ASametYildirim adlı üyeden alıntı: mesajı görüntüle
    Hocam bu işlemi ya mysql ya da php tarafından yapmanız gerekiyor. Mysql'de yapmak için phpmyadmin den şu sql komutu girmeniz gerekiyor:
    ALTER TABLE 'tablo_ismi' ADD UNIQUE 'unique_index'('birinci_uniq', 'ikinci_uniq');
    Ancak ben @Mücahit; hocama katılıyorum ve bu işlem backend tarafından yapılmasının daha olacağını düşünüyorum. Yalnız session ile değil de veritabanından sorgu şeklinde yapılsa daha iyi olabilir düşüncesindeyim.
    • Önce işlem yapılacak olan tablodan ip ve son güncelleme verisi çekilir
    • Sonra son güncelleme tarihinden bugünün tarihi çıkartılır
    • Eğer aradaki fark 24 saatten yani 1 günden fazlaysa
    • İlgili tabloya kişinin ip adresi atanır ve son güncelleme tarihine bugünün tarihi atanır
    Yazmış olduğum kod:
    $id = [B]islem_yapilacak_id[/B];
    $ip = [B]islem_yapilacak_ip[/B];
    
    
    $ipbul = $conn->query("SELECT * FROM [B]tablo_ismi[/B] WHERE id='$id'");
    $ipbul  = $ipbul  ->fetch(PDO::FETCH_ASSOC);
    
    
    
    $buguntarihi= date('d/m/Y H:i:s');
    
    $fark = ($buguntarihi  - $ipbul['songuncellemetarihi']) / 86400;
    
    if(fark>1){ //1 günden yani 24 saatten fazlaysa
    
    try{
    $update = $conn->prepare("UPDATE [B]tablo_ismi[/B] SET
      ip=:frm_ip,
      songuncellemetarihi =:frm_songuncellemetarihi
      WHERE id=:frm_id");
    
    
                    $update = $update->execute(array(
                      "frm_id" =>  $id ,
                      "frm_songuncellemetarihi " =>  $buguntarihi,
                      "frm_ip" =>  $ip
                    
                    ));
                    echo  "Successful";
                    header('Location: index.php');
    } catch ( PDOException $e ){
         print $e->getMessage();
         echo  "Transaction failed";
    }
    
    
    
    }
    PDO kodları için kendime şöyle bir doküman oluşturmuştum. Belki işinize yarar: https://github.com/asametyildirim/Ph.../tree/main/PDO
    Teşekkür ederim deniyorum inşallah yapabilirim
  • 08-02-2023, 03:54:00
    #5
    Yapamadım yav