Tarih: 2010-02-08, 01:52:28 Mesaj konusu: ankete 1 defa oy kullanmak
arkadaslar ankete nasil bir defa oy kullanma yapabilirim pc den bir defa oy kullansin ip kayit etsin cok arastirdim am tam bi sonuc yok yardimci olursaniz cok sevinirim
Kayıt: Dec 21, 2004 Mesajlar: 901 Konum: yozgat/yerköy
Tarih: 2010-02-08, 11:57:15 Mesaj konusu:
biraz farklı bir çalışmayla olabilir aslında öncelikle sadece üyelerin oy vermesi sağlanması lazım bence daha sonrada yeni bir sorgu yapıp oy verenleri kayıt ettirip bir daha oy kullanılması engellenebilir ama bu şekilde yapılsa bile sadece üyelerin oy kullanması sağlanacağı içinde kullanışlı olur mu bilmem
Kayıt: Jul 20, 2002 Mesajlar: 3836 Konum: Balıkesir
Tarih: 2010-02-08, 12:45:07 Mesaj konusu:
Mevcut olarak bu tür çalışma mevcut değil.
Ancak şöyle bir işlem yapabiliriz.
modules/Surveys/index.php dosyasını açın.
Kod:
function pollCollector($pollID, $voteID) {
bölümünü bulun. Bu bölümde aşağıdaki kodları bulun.
Kod:
$past = time()-1800;
$db->sql_query("DELETE FROM ".$prefix."_poll_check WHERE time < '$past'");
$row = $db->sql_fetchrow($db->sql_query("SELECT ip FROM ".$prefix."_poll_check WHERE (ip='$ip') AND (pollID='$pollID')"));
$ips = $row['ip'];
$ctime = time();
if ($ip == $ips) {
O kodları aşağıdaki ile değiştirin.
Kod:
$past = time()-5400;
setc o o k i e("btsid","$pollID",time()+604800); //setc o o k i e arasında boşluk yok
$row = $db->sql_fetchrow($db->sql_query("SELECT ip FROM ".$prefix."_poll_check WHERE (ip='$ip') AND (pollID='$pollID')"));
$ips = $row['ip'];
$ctime = time();
$cokid=intval($_REQUEST[btsid]);
if ($ip == $ips OR $cokid==$pollID) {
Kayıt: Jul 20, 2002 Mesajlar: 3836 Konum: Balıkesir
Tarih: 2010-02-10, 10:34:22 Mesaj konusu:
PHP-Nuke sürümüyle çok alakası yok. İstediğiniz sürüme entegre edebilirsiniz ve kesinlikle çalışacaktır. Mantığını açıklayayım.
Kod:
01: $past = time()-1800;
02: $db->sql_query("DELETE FROM ".$prefix."_poll_check WHERE time < '$past'");
03: $row = $db->sql_fetchrow($db->sql_query("SELECT ip FROM ".$prefix."_poll_check WHERE (ip='$ip') AND (pollID='$pollID')"));
04: $ips = $row['ip'];
05: $ctime = time();
06: if ($ip == $ips) {
1. satır ile 2. satır arasına;
setc o o k i e("btsid","$pollID",time()+604800); //setc o o k i e arasında boşluk yok
kodunu ekleyerek btsid (siz istediğiniz ismi verebilirsiniz, ancak okuma kısmında düzeltmeniz lazım.) adında bir çerez tanımlayıp içeriğine anket numarasını kaydediyor ve uzun bir süre boyunca çerezin kalmasını sağlayan süreyi tanımlıyoruz.
2. satırı siliyoruz. Veritabanına kayıt edilen ip kaydını silmeyeceğimizden silinmesi lazım.
5. satırın altına
$cokid=intval($_REQUEST[btsid]);
diyerek yazdığımız btsid adlı çerezi okuyoruz ve $cokid adlı değişkene atıyoruz.. intval ile onun bir sayı olmasını sağlıyoruz. Birisi fark edip o çerezin içine acayip kodlar eklerse işimizi bozmasını istemeyiz.
6. satırı ise değiştiriyorum. Normal kodda
if ($ip == $ips) {
diyerek sadece mevcut ip adresiniz ile kayıtlı ip adresini karşılaştırıyordu. Biz oraya ekstra olarak çerez adını da anket numarasıyla karşılaştıran kodu ilave ediyoruz. Yani satırımıza;
OR $cokid==$pollID
ekleyince
if ($ip == $ips OR $cokid==$pollID) {
haline geliyor.
Böylece ankete oy veren kişi aynı ankete çerezi silmediği ve ipsini değiştirmediği sürece oy veremez.
İşte bitmiş kod;
Kod:
setc o o k i e("btsid","$pollID",time()+604800); //setc o o k i e arasında boşluk yok
$row = $db->sql_fetchrow($db->sql_query("SELECT ip FROM ".$prefix."_poll_check WHERE (ip='$ip') AND (pollID='$pollID')"));
$ips = $row['ip'];
$ctime = time();
$cokid=intval($_REQUEST[btsid]);
if ($ip == $ips OR $cokid==$pollID) {
Kodu soruyu görünce 2 dk içinde hazırladım. Sadece biraz mantık yürütmeniz yeterli.
Unutmayın ben size balık tutmasını öğretirim. Balığı çok nadir olarak tutup tavanıza yada mangalınıza koyarım.
Bu forumda yeni başlıklar açamazsınız Bu forumdaki başlıklara cevap veremezsiniz Bu forumdaki mesajlarınızı değiştiremezsiniz Bu forumdaki mesajlarınızı silemezsiniz Bu forumdaki anketlerde oy kullanamazsınız