هذا مثال سريع :
vote.php
كود PHP:
<?php
//جلب اي بي الزائر وتحويله لصيغة ارقام فقط حتى يسهل التحكم به بدون النقاط وسرعة التعامل
$ip = ip2long($_SESERVER['REMOTE_ADDR']);
//رقم الآي دي للتصويت هذا
$votid = (int) $_GET['id'];
$query = mysql_query("select count(ip) AS N from ips where ip='$ip' AND votid='$votid'");
$row = mysql_fetch_assoc($query);
if ($row['N'] > 0){
echo "لقد قمت بالتصويت من قبل";
}else{
// تقوم بعملية التصويت بشكل طبيعي
// تقوم باخذ الاي تبعه على شكل ارقام ايضا ووضعه في الداتا بيز مع رقم الآي دي الخاص بالتصويت
}
الفكرة بشكل عام :
- يوجد لديك جدول في القاعدة يحتوي على الآي بي + رقم اي دي التصويت ( ip , votid )
الآي بي لتخزين آي بي الزائر .. وهو من نوع int ، و votid لتخزين رقم الآي دي الخاص بالتصويت .. حتى تقوم بمنعه من المشاركة على تصويت معين .. وليس كل التصويتات !
- عند دخوله الصفحة تقوم بالتحقق اذا كان الاي بي تبعه .. موجود في الداتا بيز ام لا .. لو موجود يعني صوت من قبل .. لو مش موجود يبقى دي اول مرة
ملاحظة :
لو اردت التخلي عن votid في الجدول .. يمكنك ان تقوم بوضع الآي بي فقط .. وعند كل اضافة تصويت جديد .. يتم مسح جميع الrows التي في الجدول .. وهذه افضل .. لأنها تسرع من عملية الاستعلام + تقوم بتفريغ الجدول لك بشكل مستمر ..
لو استخدمت الطريقة التي ذكرتها بالاعلى انا .. فيجب وضع في حسبانك عملية تفريغ الجدول .. لأنه بعد اضافة مثلا 5 او 8 تصويتات .. في موقع زواره كثير .. ستصبح كارثة !
بالنسبة للطرق الأخرى :
كوكيز : من الممكن مسحه بسهولة شديدة .. او حتى التحويل من الانترنت اكسبلورر إلى فاير فوكس .. والتصويت .. ثم إلى اوبرا والتصويت .. ثم إلى متصفح آخر والتصويت ..
السيشن : يتم اغلاقها بمجرد اغلاق الصفحة .. ولو طولت مدتها ( وهذا غير مستحب ) فلن تدوم كثير ..
وعموما ، لا توجد طريقة واحدة مضمونة 100% للتأكد .. ولكن الآي بي هو اقواهم .. لأنه ليس من السهل تغيير الآي بي ..
تحياتي