lostyazilim
tr.link

PHP form gonderiminden sonra cookie oluşturmak ve bu cookie yi kullanarak formu gizlemek!

7 Mesajlar 783 Okunma
lstbozum
tr.link

BEYAZMASTER BEYAZMASTER YÜCE ALLAH'IN aciz 1 kulu Kullanıcı
  • Üyelik 04.02.2020
  • Yaş/Cinsiyet 43 / E
  • Meslek Yazılım...
  • Konum Diğer
  • Ad Soyad O** B**
  • Mesajlar 597
  • Beğeniler 154 / 153
  • Ticaret 0, (%0)

Selamun Aleyküm...

Başlıktaki işlemi yapmaya çalışıyorum...

(Sayfada yorum yaoan bir ziyaretçinin çerezin süresi dolana dek yorum formunu görememesi için...)

Örneklenirebilirseniz çok sevinirim, teşekkürler...

 

 

ÖNCE "İYİ,DOĞRU,GÜZEL BİR İNSAN" OLMAK (VEFA,TEVAZZU,NAİFLİK,SAYGI,...) GEREK!
Sonra wm oluruz.
wmaraci
reklam

emreyvz emreyvz .NET Core & Angular & PHP Kullanıcı
  • Üyelik 19.04.2016
  • Yaş/Cinsiyet 28 / E
  • Meslek Bilgisayar Mühendisi
  • Konum İstanbul Anadolu
  • Ad Soyad E** Y**
  • Mesajlar 691
  • Beğeniler 110 / 250
  • Ticaret 24, (%100)

Merhaba, aşağıdaki HTML ve PHP koduyla forma bir kayıt yapıldığında COOKIE'ye bir değer setlenir ve 1 gün boyunca bir dahaki gelişte o değer göre form gösterilir veya gösterilmez.. 

 

   <?php 
      $formVisibility = "initial";
      $formFilledCookie= $_COOKIE["formFilled"];
      if (!empty($formFilledCookie)){
             $formVisibility = "none";
      }
      if ($_POST['name']) { 
          $name = $_POST['name']; 
          $currentUnixTime = strtotime("now");
          setcookie("formFilled", $currentUnixTime,  time() + (86400 * 30));  // 1 günlük cookie
      } 
   ?> 

<form style="display:<?php echo $formVisibility; ?>;" method="post" action= "#"> 
        İsim: <input type="text" name="name"> 
        <br><br> 
        <input type="submit"> 
</form> 

 

Ama bu metot 2 sebeple güvenilir değildir. 

 

1. COOKIE'ler kullanıcının bilgisayarında store edilirler. Dolayısıyla manipüle edilebilir ve süresi geçmemiş olmasına rağmen tekrar form gönderimi yapılabilir. Bunun önüne geçmek için de SESSION kullanılabilir. Kullanım olarak çok benzerdir. Kullanıcının bilgisayarında tutulmaz.

 

2. İlk probleme çözüm olarak verilen yöntem de ilk halinden güvenli olmasına rağmen en iyi çözüm değildir. En iyi çözüm ise kullanıcının formu gönderip göndermediğinin kaydını veritabanında tutup, request'in handle edildiği adımda bu kontrolün sağlanıp herhangi bir şekilde veritabanına insert yapılmasına izin vermemektedir. Böylecek kullanıcı ön yüzde ne yaparsa yapsın veritabanına istenmeyen veri sokamayacaktır.

 

Kolay gelsin.

BEYAZMASTER

kişi bu mesajı beğendi.

BEYAZMASTER BEYAZMASTER YÜCE ALLAH'IN aciz 1 kulu Kullanıcı
  • Üyelik 04.02.2020
  • Yaş/Cinsiyet 43 / E
  • Meslek Yazılım...
  • Konum Diğer
  • Ad Soyad O** B**
  • Mesajlar 597
  • Beğeniler 154 / 153
  • Ticaret 0, (%0)

emreyvz adlı üyeden alıntı

Merhaba, aşağıdaki HTML ve PHP koduyla forma bir kayıt yapıldığında COOKIE'ye bir değer setlenir ve 1 gün boyunca bir dahaki gelişte o değer göre form gösterilir veya gösterilmez.. 

 

   <?php 
      $formVisibility = "initial";
      $formFilledCookie= $_COOKIE["formFilled"];
      if (!empty($formFilledCookie)){
             $formVisibility = "none";
      }
      if ($_POST['name']) { 
          $name = $_POST['name']; 
          $currentUnixTime = strtotime("now");
          setcookie("formFilled", $currentUnixTime,  time() + (86400 * 30));  // 1 günlük cookie
      } 
   ?> 

<form style="display:<?php echo $formVisibility; ?>;" method="post" action= "#"> 
        İsim: <input type="text" name="name"> 
        <br><br> 
        <input type="submit"> 
</form> 

 

Ama bu metot 2 sebeple güvenilir değildir. 

 

1. COOKIE'ler kullanıcının bilgisayarında store edilirler. Dolayısıyla manipüle edilebilir ve süresi geçmemiş olmasına rağmen tekrar form gönderimi yapılabilir. Bunun önüne geçmek için de SESSION kullanılabilir. Kullanım olarak çok benzerdir. Kullanıcının bilgisayarında tutulmaz.

 

2. İlk probleme çözüm olarak verilen yöntem de ilk halinden güvenli olmasına rağmen en iyi çözüm değildir. En iyi çözüm ise kullanıcının formu gönderip göndermediğinin kaydını veritabanında tutup, request'in handle edildiği adımda bu kontrolün sağlanıp herhangi bir şekilde veritabanına insert yapılmasına izin vermemektedir. Böylecek kullanıcı ön yüzde ne yaparsa yapsın veritabanına istenmeyen veri sokamayacaktır.

 

Kolay gelsin.

Merhaba üstadım.
Aydınlatıcı cevabınız için çok teşekkür eerim.

Kodu deneyeceğim.

Aslındda ne session ne de cokie kullanmak istemiyorum fakat esas ihtiyacım olan algoritmayı çözemedim henüz ve şu aşamada denemeler yapıyorum.

Konu tam olarak şu;

* Yayınlanan yazılara ve yapılan yorumlara üye girişi yapılmadan yani her ziyaretçi tarafından 
   iyi - kötü - vs gibi gibi reaksiyonlar veriliyor.
   Fakat bunu 1 kere ile sınırlandırmak istiyorum.

* Ziyaretçinin ip adresini ve tepki verdiği yazının / yorumun id bilgisini  farklı bir veri tablosuna kaydediyorum.

Sonraki adımları  en sade ve mantıklı şekilde oluşturmaya çalışıyorum...

Ne önerirsiniz?

Mesaj 6 defa düzenlendi. Son düzenleyen: BEYAZMASTER (09.01.2024 00:38)

 

 

ÖNCE "İYİ,DOĞRU,GÜZEL BİR İNSAN" OLMAK (VEFA,TEVAZZU,NAİFLİK,SAYGI,...) GEREK!
Sonra wm oluruz.

emreyvz emreyvz .NET Core & Angular & PHP Kullanıcı
  • Üyelik 19.04.2016
  • Yaş/Cinsiyet 28 / E
  • Meslek Bilgisayar Mühendisi
  • Konum İstanbul Anadolu
  • Ad Soyad E** Y**
  • Mesajlar 691
  • Beğeniler 110 / 250
  • Ticaret 24, (%100)

BEYAZMASTER adlı üyeden alıntı

Merhaba üstadım.
Aydınlatıcı cevabınız için çok teşekkür eerim.

Kodu deneyeceğim.

Aslındda ne session ne de cokie kullanmak istemiyorum fakat esas ihtiyacım olan algoritmayı çözemedim henüz ve şu aşamada denemeler yapıyorum.

Konu tam olarak şu;

* Yayınlanan yazılara ve yapılan yorumlara üye girişi yapılmadan yani her ziyaretçi tarafından 
   iyi - kötü - vs gibi gibi reaksiyonlar veriliyor.
   Fakat bunu 1 kere ile sınırlandırmak istiyorum.

* Ziyaretçinin ip adresini ve tepki verdiği yazının / yorumun id bilgisini  farklı bir veri tablosuna kaydediyorum.

Sonraki adımları  en sade ve mantıklı şekilde oluşturmaya çalışıyorum...

Ne önerirsiniz?

Zaten elinizde, ip adresi, tepki verdiği yazının id'si mevcut. En sağlam metot olarak sayfa yüklendiği zaman tabloda kullanıcının ilgili gönderide tepkisi var ise reaksiyon widget'ının görünmemesi en mantıklısı görünüyor. Ek olarak reaksiyon ekleme fonksiyonuna da ufak bir kontrol eklerseniz gayet pratiğe uygun olacaktır. Eğer kullanıcı ilgili yazıya reaksiyon vermişse reaksiyonu eklemeden geçersiniz. 

BEYAZMASTER

kişi bu mesajı beğendi.

wmaraci
wmaraci

BEYAZMASTER BEYAZMASTER YÜCE ALLAH'IN aciz 1 kulu Kullanıcı
  • Üyelik 04.02.2020
  • Yaş/Cinsiyet 43 / E
  • Meslek Yazılım...
  • Konum Diğer
  • Ad Soyad O** B**
  • Mesajlar 597
  • Beğeniler 154 / 153
  • Ticaret 0, (%0)

emreyvz adlı üyeden alıntı

Zaten elinizde, ip adresi, tepki verdiği yazının id'si mevcut. En sağlam metot olarak sayfa yüklendiği zaman tabloda kullanıcının ilgili gönderide tepkisi var ise reaksiyon widget'ının görünmemesi en mantıklısı görünüyor. Ek olarak reaksiyon ekleme fonksiyonuna da ufak bir kontrol eklerseniz gayet pratiğe uygun olacaktır. Eğer kullanıcı ilgili yazıya reaksiyon vermişse reaksiyonu eklemeden geçersiniz. 


Ben bahsettiğim tabloyu gerek kalmaz umudu ile oluşturmuştum.
Yeni bir veri tablosu oluşturmadan daha pratik bir yöntem aramıştım.
Fakat ustalığınızla, en makul yöntemin veri tabanındam yararlanılan yöntem olduğunu hatırlatmanız faydalı oldu.
Teşekkür ediyorum.
O şekile halettim. 


Paykaştığınız kodu denedim, şöyle bir hata verdi;

Notice : Undefined index: formFilled in

Neden olabilir?


Son olarak şunu danışayım üstadım;
Ziyaretçinin verdiği reaksiyonu geri alabilmesi ve formu tekrar görünür kılması için yol veya yollar önerebilir misiniz?

Mesaj 1 defa düzenlendi. Son düzenleyen: BEYAZMASTER (09.01.2024 01:04)

 

 

ÖNCE "İYİ,DOĞRU,GÜZEL BİR İNSAN" OLMAK (VEFA,TEVAZZU,NAİFLİK,SAYGI,...) GEREK!
Sonra wm oluruz.

emreyvz emreyvz .NET Core & Angular & PHP Kullanıcı
  • Üyelik 19.04.2016
  • Yaş/Cinsiyet 28 / E
  • Meslek Bilgisayar Mühendisi
  • Konum İstanbul Anadolu
  • Ad Soyad E** Y**
  • Mesajlar 691
  • Beğeniler 110 / 250
  • Ticaret 24, (%100)

BEYAZMASTER adlı üyeden alıntı


Ben bahsettiğim tabloyu gerek kalmaz umudu ile oluşturmuştum.
Yeni bir veri tablosu oluşturmadan daha pratik bir yöntem aramıştım.
Fakat ustalığınızla, en makul yöntemin veri tabanındam yararlanılan yöntem olduğunu hatırlatmanız faydalı oldu.
Teşekkür ediyorum.
O şekile halettim. 


Paykaştığınız kodu denedim, şöyle bir hata verdi;

Notice : Undefined index: formFilled in

Neden olabilir?


Son olarak şunu danışayım üstadım;
Ziyaretçinin verdiği reaksiyonu geri alabilmesi ve formu tekrar görünür kılması için yol veya yollar önerebilir misiniz?

Aslında dönen mesaj bir hata değil. Bilgilendirme mesajı. Daha önce bir reaksiyon vermemiş kullanıcıda formFilled adında bir cookie yok. O sebeple uyarılıyorsunuz tanımsız index diye. Cookie'yi değişkene atmışım kodumda. Değişkene atama yapmadan önce isset() metodu ile cookie varlığını kontrol edip true ise değişkene atama yaparsanız bu bilgilendirme mesajı kalkacaktır.

 

İkinci sorunuz için ise yine aynı şekilde reaksiyonu geri aldığı zamanda DB'de ilgili ip, yazının id'si ve comment id'si ile ilişkili satırı silmeniz gerekiyor. Eğer cookie veya session kullanıyorsanız da unset() veya session_unset() metodu ile cookie'yi silebilirsiniz. 

 

  unset($_COOKIE['formFilled']); 

  unset($_SESSION['formFilled']);  

 

Kolay gelsin.

BEYAZMASTER

kişi bu mesajı beğendi.

BEYAZMASTER BEYAZMASTER YÜCE ALLAH'IN aciz 1 kulu Kullanıcı
  • Üyelik 04.02.2020
  • Yaş/Cinsiyet 43 / E
  • Meslek Yazılım...
  • Konum Diğer
  • Ad Soyad O** B**
  • Mesajlar 597
  • Beğeniler 154 / 153
  • Ticaret 0, (%0)

Teşekkür ederim bir kez daha 🖐.

 

 

ÖNCE "İYİ,DOĞRU,GÜZEL BİR İNSAN" OLMAK (VEFA,TEVAZZU,NAİFLİK,SAYGI,...) GEREK!
Sonra wm oluruz.
Site Ayarları
  • Tema Seçeneği
  • Site Sesleri
  • Bildirimler
  • Özel Mesaj Al