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...
PHP form gonderiminden sonra cookie oluşturmak ve bu cookie yi kullanarak formu gizlemek! |
7 Mesajlar | 781 Okunma |
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...
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, 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)
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.
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)
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.
Teşekkür ederim bir kez daha 🖐.