پنجشنبه ۰۴ اردیبهشت ۱۴۰۴

Thursday, April 24, 2025 GMT +3:30

ساخت قابلیت امتیازدهی با PHP و Ajax

ajax-php-voting

از جمله قابلیت ها و امکانات مورد نیاز در برخی صفحات وب مانند شبکه های اجتماعی، پایگاه های خبری، سایت های پرسش و پاسخ، انجمن ها و... قابلیت امتیازدهی به مطالب و نظرات کاربران است که امروزه کاربرد فراوان دارد، ویژگی خاص این قابلیت، یعنی نیاز به ارسال و دریافت درخواست در پس زمینه و بدون رفرش شدن صفحه باعث می شود که ناگزیر دست به دامن آژاکس (Ajax) یا فریم ورک های آن شویم، از طرفی بعد از ارسال درخواست آژاکسی، در سمت سرور نیز باید با php و mysql آن را پردازش کرده و متناسب با اتفاقاتی که روی می دهد، خروجی ارسال کنیم، البته مبحث اصلی یادگیری ایجاد و مدیریت این امکان است و جزئیات آن به برنامه نویس بستگی دارد، لذا در این آموزش تنها به قسمت آژاکس و php آن خواهیم پرداخت و قسمت mysql را خودتان می توانید با توجه به نیازتان اضافه کنید.

کد جاوا اسکریپت سیستم امتیازدهی


قبل از هر چیز ما به واسطه ای نیاز داریم که بتواند بدون رفرش شدن صفحه، درخواست کاربر را به سرور منتقل کرده و پاسخ سرور را دریافت، پردازش و در صورت نیاز خروجی دهد، این واسطه در اکثر موارد چیزی نیست به جزء آژاکس و جاوا اسکریپت (یا فریم ورک های مبتنی بر آن مانند جی کئوری) که در زیر یک نمونه از آن را ملاحظه می کنید.
<script type="text/javascript">
//<![CDATA[
function voting(action,id){
    var up_point_id = "up_point_" + id;
    var down_point_id = "down_point_" + id;    
    var loading_id = "loading_img_" + id;        
    var loading = '<img src="loading.gif" alt="loading" height="16" width="16" border="0" />';
    if (action == 'up'){
        var user_point = document.getElementById(up_point_id).innerHTML;
    }
    else if (action == 'down'){
        var user_point = document.getElementById(down_point_id).innerHTML;
    }
    var xmlhttp;
    if (window.XMLHttpRequest){
        xmlhttp=new XMLHttpRequest();
    }
    else{
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange=function(){
    if (xmlhttp.readyState > 0 && xmlhttp.readyState < 4){
        document.getElementById(loading_id).innerHTML=loading;
    }
    if (xmlhttp.readyState==4 && xmlhttp.status==200){
        document.getElementById(loading_id).innerHTML='';
        var response = xmlhttp.responseText;
        var splited_response = response.split("||");
        var status = splited_response[0];        
        var new_point = splited_response[1];
        if (action == 'up' && status == 'ok'){
            document.getElementById(up_point_id).innerHTML=new_point;
        }
        else if (action == 'down' && status == 'ok'){
            document.getElementById(down_point_id).innerHTML=new_point;
        }
    }
  }
  var req = "vote.php?do=" + action + "&user=" + id + "&point=" + user_point;
  xmlhttp.open("GET",req,true);
  xmlhttp.send();
}
//]]>
</script>
توضیح:
- در کد بالا ما صرفا از برنامه نویسی ساده جاوا اسکریپت و آژاکس استفاده کرده ایم که این کار موجب کاهش چشمگیر حجم نهایی صفحات وب می شود.
- تابعی که از آن استفاده کرده ایم، voting نام دارد که البته یک نام دلخواه و فرضی است، این تابع از دو آرگومان استفاده می کند، آرگومان اول (action) مشخص می کند که آیا کاربر قصد دادن امتیاز منفی را دارد یا اینکه می خواهد امتیاز مثبت بدهد، مقادیر آرگومان در هنگام فراخوانی تابع با عبارات up یا down مشخص می شوند.
- آرگومان دوم برای این است که کاربران مختلف را در صفحه از هم متمایز کنیم، در اینجا می توان از تکنیک های زیادی بسته به سلیقه استفاده کرد، به طور مثال ما از نام کاربران برای آرگومان دوم استفاده کرده ایم و برای هر کاربر نیز، نام او را به انتهای عنوان آی دی بلاک ها اضافه نموده ایم، به این ترتیب سیستم ما قادر خواهد بود که هر کاربر را به طور مجزا شناسایی کند، البته در عمل برای ایجاد چنین مواردی می توان در هنگام خروجی گرفتن، لیست کاربران را از دیتابیس استخراج و در حلقه foreach یا for به صورت داینامیک چاپ کرد.
- در قسمت اول تابع  voting چند متغیر تعریف می کنیم که در ادامه به آنها نیاز خواهیم داشت، به فرض متغیر up_point_id از پیوستن پیش عبارت _up_point به آرگومان id برای هر کاربر به صورت داینامیک، آی دی اختصاصی بلاک او را برای امتیازات مثبت تعریف می کند، یا متغیر loading_id به همین ترتیب مشخص می کند که تصویر کوچک نمایش در حال بارگذاری باید برای کدام کاربر به نمایش درآید.
- در گام بعدی چون در اینجا ما از دیتابیس استفاده نمی کنیم، ناچاریم امتیازات فعلی را از صفحه حاضر دریافت کنیم، لذا یک متغیر با نام user_point تعریف می کنیم که وظیفه اش گرفتن محتوای درون بلاک up_point_id یا down_point_id است، این مقدار به سرور ارسال شده و (در این مثال) با عدد 1 جمع می شود، نهایتا نیز حاصل با xmlhttp.responseText بازگشت داده می شود.
- همان طور که در آموزش های مقدماتی آژاکس (Ajax) گفته ایم، پس از ارسال درخواست آژاکسی، xmlhttp.readyState در چند وضعیت قرار می گیرد که با اعداد 0 تا 4 دریافت می شوند، بدین شرح:
عدد 0 به معنی حالت عادی و عدم درخواست آژاکس است.
عدد 1 به معنی شروع درخواست آژاکس است.
عدد 2 به معنی دریافت درخواست آژاکس توسط سرور است.
عدد 3 به معنی در حال پردازش بودن درخواست آژاکس است.
عدد 4 به معنی تکمیل درخواست و آماده بودن پاسخ آن است.
لذا بین عدد 0 تا 4 می توان یک تصویر کوچک به عنوان در حال بارگذاری نمایش داد.
- برای اینکه بتوانیم پاسخ سرور را به درستی مدیریت کنیم، آن را با split به آرایه هایی تجزیه می کنیم، در اینجا از علامت || به عنوان جدا کننده، برای قسمت کردن پاسخ و تجزیه آن در چند متغیر مجزا استفاده کرده ایم، حال متغیر status بخش اول پاسخ سرور و متغیر new_point قسمت دوم آن را در خود دارد.
- ملاحظه می کنید که از متد GET برای ارسال و دریافت متغیرها و مقادیر آنها به سرور استفاده شده است.

فراخوانی تابع voting


برای فراخوانی تابع کافی است آن را به صورت a و href به همراه رویداد onclick تعریف کنید، این کار را در نمونه زیر برای دو کاربر انجام داده ایم.
<div class="user">
<a href="#" onclick="voting('up','user1');"><img src="plus.png" height="16" width="16" alt="up" title="امتیاز مثبت" border="0" /></a>
<span id="up_point_user1">0</span>
<a href="#" onclick="voting('down','user1');"><img src="minus.png" height="16" width="16" alt="down" title="امتیاز منفی" border="0" /></a>
<span id="down_point_user1" dir="ltr">0</span>
<span id="loading_img_user1"></span>
</div>
<div class="user">
<a href="#" onclick="voting('up','user2');"><img src="plus.png" height="16" width="16" alt="up" title="امتیاز مثبت" border="0" /></a>
<span id="up_point_user2">0</span>
<a href="#" onclick="voting('down','user2');"><img src="minus.png" height="16" width="16" alt="down" title="امتیاز منفی" border="0" /></a>
<span id="down_point_user2" dir="ltr">0</span>
<span id="loading_img_user2"></span>
</div>
توضیح:
- در مثال بالا برای هر کاربر یک بلاک با کلاس فرضی user در نظر گرفته ایم.
- اگر به آی دی به کار رفته شده برای تگ های span دقت کنید، ملاحظه می کنید که نام هر کاربر برای تفکیک، به انتهای آنها اضافه شده است.

کد php برای سیستم امتیازدهی


برنامه هنوز تکمیل نشده است، گذشته از سمت کاربر و اسکریپت نویسی آن، بخش عمده کار مربوط می شود به سمت سرور و پردازش های آن، به طور مثال پس از ارسال درخواست، ابتدا باید ببینیم کاربر به چه کسی قصد امتیاز دادن دارد  و امتیاز فعلی آن فرد چقدر است، اگر قصد کاربر امتیاز مثبت بود، امتیازات فعلی را به اضافه مقادیر جدید کنیم، یا برعکس اگر کاربر امتیاز منفی داد، امتیازات فرد را از مقادیر جدید کم و سپس نتایج جدید را هم در دیتابیس به روز کرده و هم به صفحه مرورگر ارسال کنیم، لذا بخش اصلی کار ما در کنار کدها و برنامه نویسی php کار با دیتابیس و پرس و جوهای mysql خواهد بود، اما به جهت اینکه آموزش حاضر صرفا برای این است که یک نمونه باشد، از مباحث مربوط به mysql آن می گذریم و برای درک مطلب با یک تکه کد php ساده کار را ادامه می دهیم.
<?php
$do = $_GET['do'];
$point = $_GET['point'];
if ($do == 'up'){
    $new_point = $point + 1;
}
elseif($do == 'down'){
    $new_point = $point - 1;    
}
echo 'ok'.'||'.$new_point;
?>
توضیح:
- این کد را با نام vote.php در یک فایل ذخیره کنید، فایل حاضر و صفحه html که کد آژاکس را در آن قرار داده ایم باید در یک فولدر قرار گیرند یا اینکه آدرس قسمت var req به درستی تنظیم شود.
- در کد بالا تنها با یک دستور شرطی ساده امتیاز فعلی کاربر را یک واحد افزایش یا کاهش می دهیم.
- خروجی ما با علامت || از هم تفکیک شده است، همان طور که پیش تر گفتیم، در سمت کاربر و در کد آژاکس، پاسخ سرور را با این علامت و دستور split تجزیه می کنیم.

کد نهایی و پیش نمایش آنلاین


برای ملاحظه یک نمونه آزمایشی و اولیه از سیستم امتیازدهی می توانید از کد و پیش نمایش آنلاین زیر استفاده کنید.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>وبگو | ایجاد امکان امتیازدهی در سایت</title>
<!-- https://webgoo.ir -->
<style type="text/css">
body{
    font-family:Tahoma, Geneva, sans-serif;
    font-size:12px;
    direction:rtl;
}
.user{
    display:block;
    border:#666 1px dashed;
    height:30px;
    width:120px;
    padding:4px;
    margin:4px;
}
</style>
<script type="text/javascript">
//<![CDATA[
function voting(action,id){
    var up_point_id = "up_point_" + id;
    var down_point_id = "down_point_" + id;    
    var loading_id = "loading_img_" + id;        
    var loading = '<img src="loading.gif" alt="loading" height="16" width="16" border="0" />';
    if (action == 'up'){
        var user_point = document.getElementById(up_point_id).innerHTML;
    }
    else if (action == 'down'){
        var user_point = document.getElementById(down_point_id).innerHTML;
    }
    var xmlhttp;
    if (window.XMLHttpRequest){
        xmlhttp=new XMLHttpRequest();
    }
    else{
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange=function(){
    if (xmlhttp.readyState > 0 && xmlhttp.readyState < 4){
        document.getElementById(loading_id).innerHTML=loading;
    }
    if (xmlhttp.readyState==4 && xmlhttp.status==200){
        document.getElementById(loading_id).innerHTML='';
        var response = xmlhttp.responseText;
        var splited_response = response.split("||");
        var status = splited_response[0];        
        var new_point = splited_response[1];
        if (action == 'up' && status == 'ok'){
            document.getElementById(up_point_id).innerHTML=new_point;
        }
        else if (action == 'down' && status == 'ok'){
            document.getElementById(down_point_id).innerHTML=new_point;
        }
    }
  }
  var req = "vote.php?do=" + action + "&user=" + id + "&point=" + user_point;
  xmlhttp.open("GET",req,true);
  xmlhttp.send();
}
//]]>
</script>
</head>
<body>
<noscript>
جاوا اسکریپت در مرورگر شما غیر فعال است یا پشتیبانی نمی شود! <br />
</noscript>

<div class="user">
<a href="#" onclick="voting('up','user1');"><img src="plus.png" height="16" width="16" alt="up" title="امتیاز مثبت" border="0" /></a>
<span id="up_point_user1">0</span>
<a href="#" onclick="voting('down','user1');"><img src="minus.png" height="16" width="16" alt="down" title="امتیاز منفی" border="0" /></a>
<span id="down_point_user1" dir="ltr">0</span>
<span id="loading_img_user1"></span>
</div>
<div class="user">
<a href="#" onclick="voting('up','user2');"><img src="plus.png" height="16" width="16" alt="up" title="امتیاز مثبت" border="0" /></a>
<span id="up_point_user2">0</span>
<a href="#" onclick="voting('down','user2');"><img src="minus.png" height="16" width="16" alt="down" title="امتیاز منفی" border="0" /></a>
<span id="down_point_user2" dir="ltr">0</span>
<span id="loading_img_user2"></span>
</div>
<hr />
سیستم امتیازدهی بالا جهت تست و بدون استفاده از دیتابیس کار می کند؛ لذا امتیازات بعد از بستن یا رفرش صفحه به حالت پیش فرض بر می گردند، برای ساخت یک سیستم امتیازدهی کامل باید علاوه بر آژاکس و php از mysql نیز استفاده کنید.
</body>
</html>
پیش نمایش
دسته بندی: آموزش کاربردی » Ajax
related مطالب بیشتر:
ارسال اطلاعات فرم با ای جکس (Ajax) و نمایش پیام در حال پردازش
آموزش نحوه آپلود فایل با PHP و ای جکس (Ajax)
اعتبارسنجی همزمان فرم با ای جکس (Ajax) و PHP
نمایش نتایج پایگاه داده MySQL با PHP و ای جکس (Ajax)
نمایش داینامیک و صفحه به صفحه مطالب با ای جکس (Ajax)
دیدگاه
more ۱۹ دیدگاه برای این مطلب ارسال شده است.
more چینش دیدگاه ها به ترتیب از جدیدترین به قدیمی ترین است.
۱۸:۱۸ ۱۳۹۹/۱۲/۱۴
مطالب عالی
قدردان شما هستیم.
اسماعیل
۱۶:۰۶ ۱۳۹۸/۱۰/۰۸
ممنون از سایت بسیار عالیتون من الان مسلط به html و php و css هستم و برنامه های java و ajax رو هم تا 50 درصد یاد گرفتم تمام اینها رو مدیون سایت خوب شما هستم.
خواستم بپرسم در جایی چت آنلاین کاربر با سایت رو هم آموزش دادید ؟؟؟
مرسی و سپاس
متاسفانه خیر، در حال حاضر به صورت مستقل آموزشی برای این موضوع در سایت منتشر نشده است.
۱۰:۱۹ ۱۳۹۵/۰۳/۱۵
سلام خیلی عالی بود
۱۳:۵۱ ۱۳۹۴/۰۱/۳۱
سلام
ایا اموزش مربوطه (یعنی کسب امتیاز با فعالیت کاربران) را در سایت قرار می دهید؟
با سپاس
سلام
به دنبال این نوع آموزش ها در وب نباشید! چون اصولا چنین مواردی به دلیل گسترده و پیوسته بودن موضوع قابل طرح در یک مطلب نیست (به عبارتی شما باید برنامه نویس باشید و متناسب با برنامه و نیاز خودتان کدهای سفارشی تعریف کنید!).
۲۲:۲۸ ۱۳۹۴/۰۱/۲۸
سلام
از شما ممنون که وقت گذاشتین و پاسخ دادین
من بر برنامه نویسی html , css در حد 80 درصد تسلط دارم و با برنامه نویسی php هم 40 درصدی آشنا هستم
آیا این مقدار برای درک روال کار کافی نیست؟
و اینکه آیا خود شما این برنامه نویسی را انجام می دهید اگر انجام می دهید هزینه آن چقدر است؟
با سپاس
سلام
- در صورتی که با بررسی سورس کدهای برنامه می توانید ساختار و روال کار را درک کنید، قاعدتا تسلط شما در حد کافی است یا لااقل برای شروع مناسب است.
- متاسفانه سفارشات برنامه نویسی پذیرفته نمی شود!
۱۶:۵۰ ۱۳۹۴/۰۱/۲۸
سلام
آیا در سایت آموزش مربوط به (امتیاز دادن به کاربر با هر فعالیت "لایک , پست , نظر و ...") قرار دارد؟
یک سوال هم ارسال کردم ولی هنوز پاسخی به آن نداده اید
با سپاس
سلام
ساختار برنامه ها عموما با هم متفاوت است و لذا نمی توان نسخه واحدی برای همه آنها پیچید! آنچه مهم است اینکه با اصول کلی کار آشنا باشید، در این صورت با بررسی ساختار برنامه خود می توانید متناسب با نیازتان امکانات دلخواه را اضافه کنید (البته همان طور که در سوال قبل گفته شد، آشنایی با برنامه نویسی PHP اجتناب ناپذیر است!).
۰۹:۱۸ ۱۳۹۴/۰۱/۲۸
سلام
از شما بخاطر اینکه مطالب و آموزش هاتون رو به صورت رایگان در اختیار کاربرا قرار می دهید ممنونم من یک شبکه اجتماعی دارم که به صورت php کدهاش نوشته شده من می خوام قابلیتی بهش اضافه کنم که وقتی کاربر عضو میشه بعد از عضویت برای هر عمل و فعالیتی که انجام میدن امتیاز کسب کنند به عنوان مثال
1- وقتی تصویر آواتار رو انتخاب میکنه 5 امتیاز بگیره
2- و برای انتخاب کاور هم 5 امتیاز کسب کنه
3- با هر لایک و کامنت 2 امتیاز
3- با دعوت دوستان به سایت 25 امتیاز
4- برای هر پستی که قرار میده 6 امتیاز
همچنین اگر یک نفر دیگر پست او را لایک کرد 1 امتیاز بگیرد امیدوارم که شما بتونید من رو راهنمایی کنید
قابل ذکر است که رشته من برق می باشد و برنامه نویسی مربوط به رشته من avr هستش و برنامه نویسی هایی مانند php , html , css رو در حد نیاز فرا گرفته ام
با سپاس فراوان
سلام
ویرایش برنامه های کاربردی نوشته شده با PHP نیازمند حداقل تسلط و تجربه در حد متوسط بر این زبان است، متاسفانه در غیر اینصورت ایجاد تغییرات سفارشی آنطور که مد نظر شما است خیلی متصور نیست، چون ابتدا باید ساختار برنامه بررسی، روال کار درک و متناسب با آن کدهای جدیدی با اهدافی که شمارش کرده اید، اضافه شوند که این تنها از عهده یک برنامه نویس حداقل نیمه حرفه ای برمی آید.
پرویز
۰۴:۰۱ ۱۳۹۳/۰۹/۱۷
سلام من این خطوط را متوجه نشدم تقاضا می کنم مرحله به مرحله توضیح دهید یا اینکه لپ مطلب را برسانید
حذف شد
سلام
آموزش های کاربردی با فرض آشنایی قبلی کاربران با موارد مقدماتی تهیه می شوند، اگر در درک کدها مشکل وجود دارد باید به مباحث مقدماتی Ajax + JavaScript مراجعه کتید!
محمد
۱۶:۲۰ ۱۳۹۲/۰۴/۳۰
سلام .. ممنون از مطلبتون ...
ببخشید میشه لطفا قابلیت امتیاز دهی با ثبت در دیتابیس رو توضیح بدید .. ممنون آیا باید جدول جدید بسازیم ؟
میشه لطفا همراه با کد توضیح بدید ... تشکر
سلام
هدف این آموزش صرفا آشنایی با استفاده از جاوا اسکریپت و آژاکس در طراحی برنامه های وب مانند سیستم امتیازدهی و... است، بخش سمت سرور را باید خودتان تعریف کنید (اگر تجربه کار با PHP و MySQL را ندارید، باید از آموزش های مقدماتی مطالب را فرا بگیرید)، البته جهت راهنمایی بیشتر، در آموزش یک نمونه کد ساده PHP قرار داده شده، کافی است برنامه سمت سرور خود را با الگو گرفتن از چارچوب همین ساختار ایجاد کنید.
به طور مثال یک جدول برای امتیازات داشته باشید که اطلاعات هر امتیاز در آن ثبت شود (شماره آی دی مطلب، اطلاعات کاربر، آی پی، مثبت یا منفی بودن امتیاز و...)، با این اطلاعات ثبت شده می توانید هر نوع محاسبه دلخواهی انجام دهید (بستگی به میزان آشنایی و تسلط شما به کدنویسی PHP و MySQL دارد) و سپس خروجی را در بستر آژاکس به مرورگر ارسال نمائید.
۰۳:۲۰ ۱۳۹۲/۰۴/۰۲
خسته نباشید ای کاش فایل هم می گذاشتید
در ویرایش های بعدی انجام خواهد شد.
محمد
۲۲:۳۶ ۱۳۹۲/۰۲/۲۳
سلام سایتتون فوق العاده است توضیحات ساده و روان باعث میشه تا خیلی راحت بدون دردسر به جواب برسم هر وقت برای مطلبی که سرچ میکنم به این سایت هدایت میشم خیالم از بابت جواب سوالم راحت میشه (ممنون)
سلام
نظر لطف شما است.
۱۹:۴۹ ۱۳۹۲/۰۱/۳۰
سلام
من یک سایت جامعه ی مجازی دارم ؛ میخواهم کاری کنم که به هر گروهی بطور جداگانه امتیاز داده شود.
باید چه کار کرد که بصورت جدا به هر گروهی امتیار دهند؟
نام فایل ها را چه بگذارم؟
دیتاباس را از کدام فایل ست کنم؟
کاش مانند اسکریپت این ها را در یک زیپ قرار میدادین!
سلام
این یک اسکریپت آماده نیست، هدف آموزش این است که برنامه نویسان را در طراحی سیستم امتیازدهی راهنمایی کند، نه اینکه به صورت مستقیم قابل استفاده باشد.
برای افزودن این قابلیت به اسکریپت خود باید برنامه و دیتابیس آن را بررسی کنید و این امکان را با توجه به ساختار آن اضافه نمائید (که قاعدتا انجام صحیح این کار به دانش و تجربه بالای برنامه نویسی وب احتیاج دارد).
۲۲:۴۳ ۱۳۹۱/۱۱/۰۳
سلام دوست عزیز امکانش هست برنامه کامل برام میل کنید شرمنده
سلام
خیر، متاسفانه نسخه ای به عنوان اسکریپت آماده از این آموزش ساخته نشده است.
محمد
۱۰:۵۱ ۱۳۹۱/۰۹/۲۸
ممنون از راهنماییتون. من قابلیت امتیازدهی رو به پایگاه داده ام متصل کردم. به این صورت است که وقتی کاربر در سایت ثبت نام می کند می تواند امتیاز بدهد. وقتی هم که امتیاز می دهد اگر صفحه را رفرش کند یا بعدا باز هم وارد شود دیگر نمی تواند به آن قسمت امتیاز بدهد و علامت مثبت و منفی غیر فعال می شوند. ولی مشکل اینجاست که تا وقتی صفحه را رفرش نکرده هر چقدر می خواهد می تواند امتیاز بدهد. ممکن است کدهایی که بتوان بلافاصبه بعد از امتیاز دادن لینک غیر فعال شود را بفرمایید.
برای کنترل اینکه کاربر امتیاز داده یا خیر، نکته اول ثبت امتیازات او در دیتابیس با جزئیات (نام، ip، سشن و...) است، سپس وقتی به صورت آژاکسی مجددا امتیاز می دهد، می توانید در سمت سرور (با کدهای php) وضعیت امتیازدهی او را بررسی کنید، اگر از دید سیستم مجاز بود، امتیاز او را ثبت کنید، در غیر این صورت پیامی مبنی بر شما قبلا به این مطلب امتیاز داده اید، به عنوان پاسخ درخواست آژاکسی ارسال نمائید (بدین ترتیب راهی برای دور زدن سیستم وجود ندارد).
لذا برای این موارد از php و اعتبارسنجی سمت سرور استفاده کنید (چون مطمئن است و دست خود شما است) نه از روش های دیگر که سمت کاربر هستند مانند جاوا اسکریپت و... کد خاصی برای این مورد وجود ندارد، باید با توجه به سیستمی که نوشته اید گام به گام با توجه به هدفی که دارید، برنامه نویسی کنید.
محمد
۱۱:۴۵ ۱۳۹۱/۰۹/۰۶
سلام. سایتتون واقعا بی نظیره. من جواب خیلی از سوالاتم رو تو سایت شما پیدا کردم. ممنونم. یه سوال هم دارم. من این روش امتیازدهی رو انتهای صفحه استفاده کردم ولی با هر بار امتیازدهی توسط کاربر، صفحه با اینکه رفرش نمی شود ولی به ابتدای صفحه برمی گردد. اگر امکان دارد نحوه نمایش صفحه از همان قسمت را توضیح بدهید.
سلام
ممنون از نظر لطف شما، این مشکل مربوط به عبارت # درون تگ های href است، برای تغییر رفتار مرورگر چند راه وجود دارد:
- به جای علامت # از عبارت javascript:void استفاده کنید، به صورت نمونه زیر:
<a href="javascript:void(0)" onclick="voting('up','user1');">
- یا در انتهای فراخوانی تابع، عبارت return false را اضافه کنید:
<a href="#" onclick="voting('up','user1'); return false;">
- یا آی دی بلاک هر کاربر را به انتهای علامت # اضافه کنید:
<a href="#up_point_user1" onclick="voting('up','user1');">
البته روش های بالا تفاوت هایی نیز با هم دارند، در روش اول در همه حال (چه جاوا اسکریپت فعال باشد یا خیر)، مرورگر موقعیت صفحه را تغییر نمی دهد، اما در روش دوم تنها زمانی موقعیت صفحه ثابت می ماند که جاوا اسکریپت در مرورگر کاربر فعال باشد و نهایتا در روش سوم مرورگر کاربر را به بلاکی که آی دی آن را مشخص کرده ایم هدایت می کند؛ در حالت عادی بهتر است روش اول را انتخاب کنید.
more لطفا پیش از ارسال دیدگاه نکات زیر را مد نظر داشته باشید:
- به سوالات کلی، زمانبر، مبهم و مشکلاتی که تلاشی برای رفع آنها نکرده باشید پاسخ مختصر داده شده یا به بخش برنامه نویسی اختصاصی ارجاع داده می شوند.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین یا به صورت حساب موقت و آزمایشی قرار دهید تا امکان بررسی دقیق مشکل و خطایابی میسر باشد.
- تمام دیدگاه های ارسالی خوانده شده و برای هر کاربر مدت زمان لازم جهت پاسخگویی در نظر گرفته می شود، لطفا از طرح سوالات متعدد در بازه زمانی کوتاه خودداری کنید.



 refresh
10 × 10
3 × 6
20 × 20
=