الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيفية عمل نظام تصويت Rating

بدأه anonymous_programmer في 8 يناير 2011 · 9 رد · 2,514 مشاهدة · في ASP.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم،

عندي سؤال قد لا يكون مرتبط بالـ ASP.NET خصوصاً، وهو: كيف يمكن عمل نظام تصويت، لا أسأل عن التطبيق، بل مجرد فكرة بحيث أن يمنع هذا النظام للمستخدم الواحد بالتصويت أكثر من مرة،

هل يوجد طريقة غير فرض التسجيل على الزوار،

حاولت عملها عن طريق الكوكيز، ولكن بمجرد عمل مسح لملفات الكوكيز يستطيع المستخدم التصويت مرة أخرى،

السؤال الثاني، كيف يمكن عمل نظام comments في الصفحة مع التقييم rating لكل comment، هل يوجد web control جاهزة لهذه الخاصية؟

شكرا

#2
anonymous_programmer كتب:

هل يوجد طريقة غير فرض التسجيل على الزوار،

يوجد لكن لها سلبياتها أيضاً.

الأكثر شيوعاً هو استخدام الـ Cookies وتسجيل IP الشخص الذي قام بالتصويت، بالطبع من الواضح أن هذه الطريقة يمكن تجاوزها من خلال حذف الكوكيز وتغيير الـ IP باستخدام proxy.

الطريقة الثالثة والتي تستطيع استخدامها بمفردها أو مع باقي الطرق، هي من خلال تسجيل الـ MAC address الخاص بالزائر.

الـ MAC address هو العنوان الفيزيائي الخاص بكرت الشبكة الموجود لدى الزائر، وقيمته unique لا يمكن أن تتشابه مع MAC address آخر في العالم أجمع.

السلبية في هذه الطريقة هو أنك ستمنع التصويت عن جهاز بالكامل، والذي قد يكون جهاز عمومي مستخدم في مقهى انترنت (مثلاً).

لتفادي هذه المشكلة، تستطيع مثلاً أن تقوم بإعادة إتاحة التصويت باستخدام هذا الجهاز بعد مضي عدة ساعات مثلاً.

سلبية ثانوية أخرى هي أن المستخدم ذاته الذي قام بالتصويت للمرة الأولى، يمكنه ببساطة استخدام جهاز آخر للتصويت.. الطريقة الوحيدة لمنع هذا المستخدم هي من خلال إرغامهم على استخدام حسابات، لكن هذه الطريقة لن تمنعهم من إنشاء حسابات أخرى للتصويت لكنها على الأقل ستكون مزعجة كفاية لدرجة يضجر بعدها من إنشاء حسابات إضافية.

راجع هذا الموضوع لمعرفة الطريقة التي يتم من خلالها الحصول على الـ MAC address الخاص بالزائر:

http://www.aspfree.c...and-VBScript/2/

هذا ما لدي لأفيدك به.

2

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#3

شكرا أستاذي xacker على سرعة الرد،

لم أكن أعرف أنه من الممكن قراءة الـ MAC address باستخدام الـ ASP.NET

ظننت أن الـ MAC Address لا يمكن معرفته إلا في الشبكة المحلية،

أشكرك على المعلومة الجديدة :)

#4

العفو.

بالنسبة للسؤال الثاني، يوجد أداة Rating جاهزة, لكني لم أستخدمها من قبل لذلك لا أعرف حسناتها ومساوئها أو ما تقدمه من تسهيلات.

بكل الأحوال تستطيع مراجعة المواضيع التالية:

http://www.codeproject.com/KB/ajax/AjaxRating.aspx

http://aspalliance.com/1042_Video_Using_the_ASPNET_AJAX_Rating_Control.2

إنشاء نظام خاص بالتعليقات وأخذ تقييمات لكل تعليق ليس بالأمر الصعب على الإطلاق.

لم لا تجرب بنفسك؟ ستتعلم الكثير دون أن تشعر :)

2

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#5

شكرا لك، لقد استفدت من درس الـ codeproject، ويبدوا أن هذه الأداة مثالية لما احتاجه،

لم أكن اريد البدء بتصميم نظام خاص بي بسبب خوفي من الخطأ في التصميم، أول فكرة فكرت بها أن أقوم بعمل قاعدة بيانات لتخزين التعليقات بالإضافة لكل تقييم من كل مستخدم، لكن المشكلة أنه إذا قام كل مستخدم بإضافة تقييم ستصبح قاعدة البيانات ضخمة، قد تصل إلى عدد المستخدمين × عدد التعليقات، فهل هذه هي الطريقة الصحيحة؟ موقع بحجم اليوتيوب، هل يستخدم هذه الطريقة؟ (عدد الفيديوهات×عدد التعليقات×عدد المستخدمين)

#6

جدول التعليقات يحوي على الحقول التالية (مثلاً):

رقم التعليق - رقم الموضوع - التعليق - مجموع التقييمات - عدد مرات التقييم - حالة التعليق (ظاهر/مخفي)

عند إضافة تقييم، من المجال 1-5 مثلاً، تجمع هذه القيمة مع قيمة الحقل "مجموع التقييمات" وتزاد عدد مرات التقييم بمقدار 1.

لعرض تقييم تعليق بالنسبة المئوية تستخدم المعادلة: {NumberOfRates}

1

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#7

لكن بهذه الطريقة، سيستطيع المستخدم التقييم أكثر من مرة،

أنا قصدت أنه يجب إضافة جدول آخر فيه التقييمات لكل تعليق، بالإضافة لإسم المستخدم الذي قام بالتقييم، حتى أتأكد من أنه لن يقوم بالتقييم أكثر من مرة، ولكن المشكلة أن عدد المدخلات في هذا الجدول سيكون ضخم.

هل يوجد طريقة أخرى؟

#8

جدول فيه: رقم (ID) المستخدم و رقم التعليق و قيمة التقييم.

جدول آخر (الذي ذكرته في المشاركة السابقة): رقم الموضوع - رقم التعليق - التعليق - حالة التعليق (ظاهر/مخفي)

عند إضافة تقييم، يتم تخزين ID المستخدم ورقم التعليق وقيمة التقييم.

insert into rates (mID,cID,rate) values (105,326,5)

عند عرض التقييم بالنسبة المئوية، يتم جمع قيم التقييم للتعليق رقم X ويتم تقسيم المجموع على عدد السجلات.

select (sum(rate)/count(*)) from rates where cID = 326

للتأكد من أن المستخدم لم يقم بتقييم تعليق من قبل

select count(*) from rates where mID = 105 and cID = 200
1

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#9

شكرا استاذي Xacker، إذا سأعمل على الطريقة التي قمت بوضعها :)

#10

get mac address

http://www.myaspnet.com/codedisplay.aspx?id=540

mylogo.gif

صدق من قال: ("الله في عون العبد مادام العبد في عون اخيه")

مواضيع مشابهة