جمعه ۲۸ اردیبهشت ۱۴۰۳

Friday, May 17, 2024 GMT +3:30

اعتبارسنجی فرم های وب با جاوا اسکریپت (JavaScript)

javascript-form-validation

یکی از موارد کاربردی استفاده از زبان برنامه نویسی جاوا اسکریپت (JavaScript) در صفحات وب اجرای توابع دلخواه مبتنی بر رویداد در هنگام کار با عناصر مختلف فرم های وب در سمت مرورگر است، به فرض هنگامی که کاربر در حال تکمیل اطلاعاتی در فیلدهای متنی باشد می توانیم همزمان با تایپ یا بعد از اینکه بر روی دکمه ارسال فرم کلیک کرد با اجرای رویداد onkeyup یا onsubmit توابع جاوا اسکریپتی را فراخوانی و از معتبر بودن اطلاعات فیلدهای فرم تا حدود زیادی اطمینان حاصل نمائیم و در صورت غیر معتبر بودن مقادیر یکی از فیلدها از ارسال فرم جلوگیری و به شیوه های مختلف کاربر را جهت تکمیل موارد مورد نیاز راهنمایی کنیم، به این نوع بررسی در اصطلاح اعتبارسنجی (Validation) می گوئیم و در این آموزش هدف این است که چند روش کاربردی و در عین حال خلاقانه اعتبارسنجی فرم های وب با جاوا اسکریپت را با هم بررسی کنیم.

منظور از اعتبارسنجی (Validation) چیست؟


قبل از پرداختن به ادامه آموزش ذکر این نکته ضروری است که منظور از اعتبارسنجی (Validation) در فرم های وب یعنی مقایسه و بررسی معتبر بودن اطلاعاتی که کاربر در آنها وارد کرده با مقادیر مورد انتظار برنامه نویس، به طور مثال هنگامی که کاربر بدون تکمیل فیلدهای مورد نیاز و ضروری قصد ارسال فرم را دارد یا به فرض اگر در فیلد ایمیل آدرس خود را بدون علامت @ درج کند می توانیم ضمن جلوگیری از ارسال فرم پیغام هشداری نیز نمایش دهیم تا این موضوع قبل از ارسال فرم به اطلاع او برسد.
به طور کلی اعتبارسنجی در وب می تواند در دو مرحله صورت گیرد:
در سمت کاربر (در مرورگر - Client Side با برنامه نویسی زبان هایی مانند JavaScript) و همچنین در سمت سرور (Server Side و با برنامه نویسی سمت سرور مانند زبان های PHP, ASP.NET و...) ترکیب این روش ها نیز با استفاده از فناوری ای جکس (Ajax) امکان پذیر است که پیش از این در این رابطه در بخش آموزش های  ای جکس (Ajax) صحبت کرده ایم.

اعتبارسنجی سمت کاربر بهتر است یا سمت سرور؟


شاید در ذهنمان این سوال باشد که کدام شیوه اعتبارسنجی در وب بهتر است؟ اعتبارسنجی سمت کاربر و در مرورگر یا اعتبار سنجی سمت سرور؟
واقعیت این است هر کدام از انواع اعتبارسنجی ها در جای خود و در مرحله ای از تکمیل تا ارسال فرم های وب کاربرد دارند اما از نظر میزان اطمینان بخشی مسلما اعتبارسنجی سمت سرور گزینه بهتری است چون اعتبارسنجی سمت کاربر صرفا متکی بر امکانات مرورگر بوده و در دسترس بودن این امکانات از کنترل برنامه نویس خارج است، به فرض اگر به هر دلیل جاوا اسکریپت پشتیبانی نشود یا غیر فعال باشد این نوع اعتبارسنجی عمل نخواهد کرد، اما اعتبارسنجی سمت سرور تقریبا در هر شرایطی در دسترس است مگر اینکه سرور دچار اشکالی باشد که در این شرایط به طور کلی برنامه قادر به اجرای فرایندها نبوده یا عملکرد آن مختل می شود که در این صورت با نمایش پیام به کاربران می توانیم خطاها را مدیریت کنیم.
با این تفاسیر شاید این سوال به ذهن خطور کند که پس لزوم استفاده از اعتبارسنجی با جاوا اسکریپت چیست؟
اگرچه پیش از این گفتیم که به دلایل مختلف ممکن است جاوا اسکریپت در مرورگر کاربران در دسترس نباشد (به طور مثال جاوا اسکریپت غیرفعال شده باشد یا به فرض در مورد ارسال خودکار فرم های وب توسط ربات های خزنده با هدف انتشار هرزنامه ها یا دیدگاه های تبلیغاتی جاوا اسکریپت نادیده گرفته می شود) اما در عمل با توجه به فعال بودن پیش فرض این امکان در مرورگرهای مختلف می توانیم از امکانات این زبان در اکثر مواقع استفاده کنیم، لذا برای بهبود قابلیت های تعاملی برنامه ها یا راهنمایی کاربران در هنگام پر کردن فیلدهای مختلف صفحات وب همچنان می توانیم و توصیه می شود که علاوه بر اعتبارسنجی سمت سرور از جاوا اسکریپت نیز در ترکیب با آن استفاده کنیم، به این صورت هم رابط کاربری (User Interface) بهتری خواهیم داشت و ضمن صرفه جویی در وقت و زمان کاربران، تعداد درخواست های خام اعتبارسنجی نشده به سرور کاهش یافته و در نتیجه فشار به منابع آن کمتر می شود، خلاصه مطلب اینکه هیچگاه نباید صرفا متکی بر اعتبارسنجی سمت کاربر باشیم بلکه می توانیم در کنار اعتبارسنجی سمت سرور از امکانات جاوا اسکریپت نیز استفاده کنیم.

بررسی خالی نبودن فیلدهای فرم در هنگام ارسال


معمولا اولین موردی که در کار با فرم های وب و بررسی اعتبار محتوای فیلدها مورد نیاز است اطمینان از خالی نبودن مقادیر ارسالی از تگ های input است، بدین منظور ابتدا لازم است که یک تابع در جاوا اسکریپت داشته باشیم که در هنگام ارسال فرم خالی نبودن مقادیر value فیلدها را بررسی کند که در نمونه کد زیر تابع فرضی با نام دلخواه checkFormValidation را نوشته ایم:
<script>
function checkFormValidation(form_name, input_name){
    var input = document.forms[form_name][input_name].value;
    
    if(input === null || input === ""){
        alert("فیلد نام نباید خالی باشد");
        return false;
    }
}
</script>
توضیح:
- با فراخوانی تابع در رویداد onsubmit (زمانی که بر روی دکمه ارسال کلیک می شود) ابتدا با متد document.forms و value مقادیر فیلد فرضی با نام (پارامتر name) input-1 را از فرمی با نام form-1 دریافت می کنیم.
- سپس با دستور شرطی if بررسی می کنیم متغیر input که شامل مقادیر (پارامتر value) فیلد input-1 است خالی یا null نباشد.
- اگر فیلد خالی باشد نتیجه بررسی ما true شده و با دستور alert پیام هشداری به کاربر نمایش داده می شود، با return false نیز حالت پیش فرض مرورگر نادیده گرفته شده و از ارسال فرم جلوگیری می شود.
نکته: برای فیلد input-1 در حالت عادی پارامتر value در نظر نگرفته ایم (مقدار آن null است) اما با شروع تایپ در این فیلد پارامتر value به صورت خودکار در HTML DOM (مخفف Document Object Model)  مقداردهی شده و در دسترس قرار می گیرد، برای اطلاعات بیشتر می توانیم دکمه F12 را در مرورگرهای مختلف فشرده و از قسمت Inspector سورس کد زنده صفحه را بررسی کنیم، هرچند این پارامتر با این شیوه قابل روئیت نیست اما در سورس ریشه صفحه وجود دارد.
تابع بالا را می توانیم در هنگام ارسال فرم های صفحات HTML به شکل نمونه زیر فراخوانی کنیم:
<form name="form-1" action="#" method="post" onsubmit="return checkFormValidation('form-1', 'input-1');">
<label for="input-1">نام:</label>
<input name="input-1" id="input-1" type="text" dir="rtl" placeholder="نام خود را وارد کنید">
<input type="submit" value="ارسال">
</form>
پیش نمایش مثال ها را می توانیم در انتهای این صفحه به صورت آنلاین بررسی کنیم.
توضیح:
- همانطور که گفتیم عبارت form-1 در واقع نام فرم و input-1 عنوان فیلد متنی مورد نظر است که از پارامتر name آنها بدست می آید.
- برای ارسال پارامترهای مورد نیاز تابع آنها را به صورت آرگیومنت تنظیم و در هنگام فراخوانی ارسال می کنیم که این کار در نمونه کد بالا با دو آرگیومنت form_name, input_name انجام شده است.
- رویدادی که برای فراخوانی تابع جاوا اسکریپتی استفاده کرده ایم onsubmit است که آن را به تگ form نسبت داده ایم.
- این نوع اعتبارسنجی تنها در صورتی عمل می کند که در فرم HTML از دکمه با نوع submit برای ارسال فرم استفاده شود که در غالب موارد همین طور است.

بررسی خالی نبودن فیلدها در زمان تکمیل فرم


یک شیوه دیگر اعتبارسنجی فرم های وب که می توانیم همزمان با پر کردن فیلدها و تکمیل فرم توسط کاربر از آن استفاده کنیم فراخوانی تابع جاوا اسکریپتی با رویدادهایی مانند onblur است، رویداد onblur زمانی اتفاق می افتد که کاربر ابتدا در فیلد کلیک یا به اصطلاح focus کرده سپس در فیلدی دیگر یا در فضای خالی صفحه کلیک می کند و در این حالت رویداد onblur رخ می دهد، از متد innerHTML نیز برای مقداردهی یک پیام در بلاک div با id مشخص یا دریافت مقادیر از آن استفاده می کنیم، برای نمونه
تابع جاوا اسکریپتی checkEmpty را به همراه فرم HTML شامل دو فیلد فرضی نام و نام خانوادگی کدنویسی کرده ایم:
<script>
function checkEmpty(input_id, div_id){
    if(input_id === 'input-2' && document.getElementById('input-2').value === ''){
        document.getElementById(div_id).innerHTML = 'لطفا نام خود را وارد کنید!';
        return false;
    } else {
        document.getElementById(div_id).innerHTML = '';
    }
    
    if(input_id === 'input-3' && document.getElementById('input-3').value === ''){
        document.getElementById(div_id).innerHTML = 'لطفا نام خانوادگی خود را وارد کنید!';
        return false;
    } else {
        document.getElementById(div_id).innerHTML = '';
    }
    
    return true;
}
</script>
<form name="form-2" action="#" method="post">
<label for="input-2">نام:</label>
<input name="input-2" id="input-2" type="text" dir="rtl" placeholder="نام خود را وارد کنید" onblur="checkEmpty(this.id, 'name-error');">
<div id="name-error" class="error"></div>
<br>
<label for="input-3">نام خانوادگی:</label>
<input name="input-3" id="input-3" type="text" dir="rtl" placeholder="نام خانوادگی خود را وارد کنید" onblur="checkEmpty(this.id, 'family-error');">
<div id="family-error" class="error"></div>
</form>
توضیح:
- در فرم فرضی بالا دو فیلد با نام های (پارامتر name) input-2 و input-3 داریم که برای هر کدام از آنها با اجرای رویداد onblur تابع checkEmpty را فراخوانی می کنیم.
- تابع checkEmpty با دو آرگیومنت input_id, div_id تعریف شده است که به ترتیب آی دی فیلد متنی input و آی دی بلاک div نمایش دهنده پیام خطا را شامل می شود.
- عبارت this.id آی دی تگ input (فیلد متنی) را به عنوان آرگیومنت تابع دریافت و تنظیم می کند، this در برنامه نویسی شی گراء به عنوان کلیدواژه آبجکت کاربرد داشته و در اینجا اشاره به آبجکت فیلد متنی دارد.
- دو بلاک div با id فرضی name-error و family-error را برای نمایش پیام خطا در کدها تنظیم کرده ایم که به هنگام فراخوانی تابع checkEmpty اگر مقادیر فیلدها خالی باشد، پیام مورد نظرمان را در بلاک ها نمایش می دهند، برای سفارشی سازی نحوه نمایش خطاها می توانیم در استایل CSS برای کلاس error خاصیت های دلخواه تعریف کنیم، به طور مثال:
<style>
.error {
    width: 300px;
    color: #FF0600;
}
</style>
- قسمت های return در تابع checkEmpty ضروری نیست و صرفا جهت اطلاع و استفاده های بعدی درج شده است.

اعتبارسنجی فیلد آدرس ایمیل با عبارات باقاعده


قدرت زبان جاوا اسکریپت این اجازه را به ما می دهد که تقریبا هر آنچه بخواهیم در سمت کاربر اعتبارسنجی کنیم، یکی از پرکاربردترین این موارد اعتبارسنجی فیلد مربوط به آدرس ایمیل است که معمولا برخی کاربران این فیلد را به طور صحیح تکمیل نمی کنند، تابع زیر در زمان ارسال فرم مقادیر موجود در فیلد ایمیل را با الگوی از پیش تعریف شده که با دستورات عبارات باقاعده (Regular Expressions) نوشته شده است تطبیق داده و در صورت مغایرت پیام هشدار نمایش می دهد:
<script>
function emailValidator(form_name, input_name) {
    var pattern = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
    var address = document.forms[form_name].elements[input_name].value;
    
    if(pattern.test(address) === false) {
        alert('آدرس ایمیل وارد شده نامعتبر است');
        return false;
    }
    
    return true;
}
</script>
<form name="form-3" action="#" method="post" onsubmit="return emailValidator('form-3', 'input-4');">
<label for="input-4">آدرس ایمیل:</label>
<input name="input-4" id="input-4" type="text" dir="ltr" placeholder="ایمیل خود را وارد کنید">
<input type="submit" value="ارسال">
</form>
پیش نمایش آنلاین کد در انتهای این مطلب درج شده است.
توضیح:
- تابع بالا مبتنی بر دو عنصر کلیدی است، یکی استفاده از عبارات با قاعده (Regular Expressions) و دوم استفاده از متد test در جاوا اسکریپت.
- با استفاده از عبارات با قاعده الگوی مورد انتظارمان را برای آدرس های ایمیل در متغیر فرضی pattern تعریف می کنیم، در اینجا الگوی آدرس ایمیل در حالت معمول به صورت زیر است:
شروع رشته باید با حروف انگلیسی یا کاراکترهای (- _ .) باشد، در ادامه علامت @ بیاید سپس حروف انگلیسی و کاراکترهای (- _ .) مجاز است، در ادامه کاراکتر نقطه (.) درج شده باشد و در نهایت حروف انگلیسی به تعداد حداقل 2 و حداکثر 4 کاراکتر داشته باشیم (بزرگ و کوچک بودن حروف در الگو مهم نیست).
سپس با متد test بررسی می کنیم که آیا مقادیر فیلد ایمیل با الگوی مورد انتظارمان تطابق دارد یا خیر، اگر جواب منفی باشد متد test مقادیر false را برمی گرداند و در نتیجه قسمت داخل دستور شرطی if اجرا شده و پیام هشدار نمایش داده می شود، همانطور که قبلا گفتیم return false نیز مانع رفتار پیش فرض مرورگر شده و فرم ارسال نخواهد شد.
- نکته حائز اهمیت نحوه تنظیم و فراخوانی صحیح تابع emailValidator است، باید به یاد داشته باشیم که در هنگام فراخوانی تابع مقادیر پارامتر name فرم و فیلد مورد نظر را داخل علامت های '' یا "" قرار دهیم در غیر اینصورت کد به درستی عمل نخواهد کرد.

اعتبارسنجی وجود حروف و اعداد خاص با متد indexOf


روش دیگر اعتبارسنجی مقادیر وارد شده توسط کاربر در فیلدها بررسی وجود حروف و کاراکترهای خاص است، به فرض اگر قرار باشد که در فیلدهای فرم تنها از اعداد یا تنها از حروف خاصی استفاده شود این نوع اعتبارسنجی کاربرد خواهد داشت، به طور مثال در نمونه کد زیر تنها استفاده از حروف ABCDEF مجاز است:
<script>
function checkChar(form_name, input_name){
    var chars = 'ABCDEF';
    var string = document.forms[form_name].elements[input_name].value;
    var strlen = string.length;
    
    if(strlen < 1){
        alert('لطفا یک عبارت وارد کنید');
        return false;
    }
    
    string = string.toUpperCase();
    for(i = 0; i < strlen; i++){
        if(chars.indexOf(string.charAt(i)) < 0){
            alert("تنها کارکترهای A, B, C, D, E, F مجاز هستند");
            return false;
        }
    }
    
    alert('فرم شما ارسال شد');
    return true;
}
</script>
<form name="form-4" action="#" method="post" onsubmit="return checkChar('form-4', 'input-5');">
<label for="input-5">کاراکترها:</label>
<input name="input-5" id="input-5" type="text" dir="ltr" placeholder="چند کاراکتر وارد کنید">
<input type="submit" value="ارسال">
</form>
توضیح:
- در تابع checkChar ابتدا کاراکترهای مجاز را در متغیر chars تعریف می کنیم.
- سپس با متد document.forms مقادیر (value) فیلد تنظیم شده از آرگیومنت input_name را دریافت می کنیم.
- در متغیر strlen با استفاده از خاصیت length طول مقادیر وارد شده در فیلد را بدست می آوریم، اگر این اندازه کوچکتر از 1 باشد یعنی کاربر قصد ارسال فرم خالی را دارد و در نتیجه به همراه تنظیم return false (جلوگیری از ارسال فرم) با alert پیام هشداری نمایش می دهیم.
- در غیر این صورت مقادیر متغیر string که در واقع همان محتوای دریافتی از فیلد input-5 فرم است را با تابع درونی toUpperCase به حروف بزرگ تبدیل می کنیم (این کار برای نادیده گرفتن حساسیت بررسی های بعدی به بزرگ و کوچک بودن حروف انگلیسی است).
- بخش پایانی تابع نقش کلیدی در عملکرد آن دارد، با حلقه for به تعداد اندازه طول رشته ورودی کاربر تک تک حروف ارسالی رشته را با مقادیر chars مقایسه می کنیم، اگر حرف جاری در الگوی ما وجود نداشته باشد پیام هشداری به کاربر نمایش داده خواهد شد.
- تطبیق وجود کاراکترهای ارسالی با الگوی تعریف شده با متد indexOf و charAt انجام می شود، indexOf در واقع یک عدد را با توجه به جستجوی وجود موقعیت کاراکتر یا عبارت در الگوی مد نظر برمی گرداند، منظور از موقعیت این است که ببینیم کاراکتر یا عبارت مورد نظر ما چندمین کاراکتر یا حرف از الگوی تعیین شده است (شمارش indexOf از صفر شروع شده و شامل فواصل خالی هم می شود)، در صورتی که کاراکتر در الگو وجود نداشته باشد نتیجه 1- خواهد بود، به طور مثال:
<script>
var string = "welcome to javascript learning.";
var check = string.indexOf("javascript");
document.write(check);
</script>
نمونه کد بالا عدد 11 را در خروجی چاپ می کند چون عبارت javascript را جهت بررسی برای متغیر check و متد string.indexOf در نظر گرفته ایم، با دقت در رشته welcome to javascript learning نتیجه می گیریم که پیش از عبارت javascript با احتساب فواصل خالی و شمارش از صفر 10 کاراکتر وجود دارد، اگر به فرض در رشته ارسالی دو عبارت هم تحت عنوان javascript باشد متد indexOf با تطبیق اولین الگو نتیجه را برمی گرداند و به ادامه رشته ترتیب اثر نمی دهد، اگر هیچ کاراکتری تطبیق داده نشود indexOf عدد 1- را برمی گرداند.
متد charAt نیز با توجه به عددی که به عنوان آرگیومنت آن در نظر می گیریم از ابتدای رشته شمارش را به تعداد مقادیر شروع کرده و کاراکتر نهایی را به عنوان نتیجه برمی گرداند، شمارش charAt نیز از صفر شروع شده و شامل فواصل خالی نیز می شود به فرض مثال زیر حرف j را در خروجی چاپ می کند:
<script>
var string = "welcome to javascript learning.";
var check = string.charAt(11);
document.write(check);
</script>
حرف j یازدهمین کاراکتر در رشته مورد بررسی است.

اعتبارسنجی وجود حروف فارسی با عبارات باقاعده


معمولا در زبان های برنامه نویسی برای رسیدن به یک هدف و تبدیل ایده ذهنی به برنامه قابل اجرا متدها و روش های مختلفی در دسترس است، اینکه از بین این روش ها کدام حالت را انتخاب کنیم عموما بستگی به میزان سازگاری متدها با پلتفرم ها و نسخه های مختلف، هر چه کوتاهتر بودن راه حل ها، پیچیدگی الگوریتم مد نظر و حتی گاهی سلیقه برنامه نویس دارد، در خصوص اعتبارسنجی وجود حروف و اعداد خاص در رشته ارسالی نیز این مبحث صدق می کند و همان طور که ملاحظه شد با متد indexOf می توانیم این کار را به سادگی انجام دهیم، در حالت پیشرفته تر مشابه آنچه در خصوص آدرس های ایمیل دیدیم این نوع اعتبارسنجی با دستورات عبارات با قاعده (Regular Expressions) نیز ممکن است که در ادامه با ذکر یک مثال این روش را بررسی می کنیم:
<script>
function checkChar(form_name, input_name){
    var pattern = /^([آ-ی])+$/u;
    var string = document.forms[form_name].elements[input_name].value;
    
    if(pattern.test(string) === false) {
        alert('مقادیر وارد شده نامعتبر است');
        return false;
    }
    
    return true;
}
</script>
<form name="form-5" action="#" method="post" onsubmit="return checkChar('form-5', 'input-6');">
<label for="input-6">عبارت فارسی:</label>
<input name="input-6" id="input-6" type="text" dir="rtl" placeholder="یک عبارت فارسی وارد کنید">
<input type="submit" value="ارسال">
</form>
در نمونه کد بالا صرفا اجازه درج حروف فارسی در فیلد input-6 به کاربر داده شده است، مبنای این کد دستورات عبارات باقاعده و Modifier u است، از u برای سازگاری کاراکترهای UTF-8 Unicode در دستورات Regex استفاده می شود.
برای حروف انگلیسی کافی است قسمت pattern را به شکل زیر تغییر دهیم:
var pattern = /^([A-Za-z])+$/u;
درج u در این حالت اختیاری است.

اعتبارسنجی تعداد حروف مجاز در هنگام پر کردن فیلد


تابع دیگری که در پایان این مطلب قصد بررسی آن را داریم ساده اما کاربردی است، در این روش اعتبارسنجی حین تایپ کاربر تعداد حروف مجاز باقیمانده در قسمتی از صفحه نمایش داده می شود، به فرض اگر حداکثر کاراکتر مجاز در یک فیلد 100 مورد باشد با افزودن هر کاراکتر به فیلد مورد نظر به صورت معکوس مقدار کاراکتر باقیمانده در بلاک div یا هر عنصر مورد نظر دیگری چاپ می شود، به طور مثال این شیوه اعتبارسنجی فیلدها در هنگام پر کردن فیلد textarea در نمونه کد زیر استفاده شده است:
<script>
function countChars(textarea_id, div_id) {
    var max = 10;
    var count = max - document.getElementById(textarea_id).value.length;
    var text = 'تعداد کاراکتر باقیمانده: ';
    
    if(count < 0) {
        document.getElementById(div_id).innerHTML = text + '<span style="color: red;">' + count + '</span>';
    } else {
        document.getElementById(div_id).innerHTML = text + count;
    }
}
</script>
<form id="form-6" action="#" method="post">
<textarea name="usertext" id="usertext" rows="6" cols="50" onfocus="countChars('usertext', 'result')" onkeydown="countChars('usertext', 'result')" onkeyup="countChars('usertext', 'result')">
</textarea>
<div id="result"></div>
</form>
توضیح:
- در این نمونه کد در تابع countChars از متدهای پرکاربرد getElementById، length و innerHTML استفاده شده است.
- با هر بار فراخوانی تابع (با رویدادهای onfocus, onkeyup و onkeydown) مقادیر از فیلد فرضی usertext دریافت و طول رشته کاراکترها با متد length سنجیده می شود، اگر مقدار متغیر max که حداکثر سقف مجاز کاراکترها است را از میزان کاراکتر فعلی که کاربر در فیلد وارد کرده است کم کنیم و حاصل کوچکتر از صفر باشد، نتیجه به رنگ قرمز در بلاک div نمایش داده می شود (با استفاده از تگ span و style خطی).
- در مثال بالا فیلد از نوع textarea است و با سه رویداد onfocus, onkeyup و onkeydown تابع را فراخوانی می کنیم، یعنی هنگامی که کاربر جهت تایپ یا ویرایش نوشته ها در فیلد کلیک می کند، هنگامی که دکمه ای از صفحه کلید را فشار داده یا دکمه را رها می کند.

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


کد و پیش نمایش آنلاین مثال هایی که در این آموزش بررسی کردیم را می توانیم در ادامه جهت تجمیع مبحث و یادآوری مرور کنیم:
<!DOCTYPE html>
<html lang="fa">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>وبگو | اعتبارسنجی فرم های HTML با JavaScript</title>
<!-- Webgoo.ir -->
<style>
body {
    font-family: Tahoma, Geneva, sans-serif;
    direction: rtl;
    font-size: 12px;
}
.error {
    display: block;
    padding: 4px;
    color: #C00;
}
</style>
</head>
<body>
<noscript>
جاوا اسکریپت در مرورگر شما غیر فعال است!<br>
</noscript>

بررسی خالی نبودن فیلدهای فرم در هنگام ارسال (بدون پر کردن فیلد زیر بر روی دکمه ارسال کلیک کنید).
<br>
<br>
<script>
function checkFormValidation(form_name, input_name){
    var input = document.forms[form_name][input_name].value;
    
    if(input === null || input === ""){
        alert("فیلد نام نباید خالی باشد");
        return false;
    }
}
</script>
<form name="form-1" action="#" method="post" onsubmit="return checkFormValidation('form-1', 'input-1');">
<label for="input-1">نام:</label>
<input name="input-1" id="input-1" type="text" dir="rtl" placeholder="نام خود را وارد کنید">
<input type="submit" value="ارسال">
</form>
<hr>
<br>
بررسی خالی نبودن فیلدها در زمان تکمیل فرم (ابتدا در یک فیلد کلیک کرده و بدون پر کردن آن در فیلد بعدی کلیک کنید).
<br>
<br>
<script>
function checkEmpty(input_id, div_id){
    if(input_id === 'input-2' && document.getElementById('input-2').value === ''){
        document.getElementById(div_id).innerHTML = 'لطفا نام خود را وارد کنید!';
        return false;
    } else {
        document.getElementById(div_id).innerHTML = '';
    }
    
    if(input_id === 'input-3' && document.getElementById('input-3').value === ''){
        document.getElementById(div_id).innerHTML = 'لطفا نام خانوادگی خود را وارد کنید!';
        return false;
    } else {
        document.getElementById(div_id).innerHTML = '';
    }
    
    return true;
}
</script>
<form name="form-2" action="#" method="post">
<label for="input-2">نام:</label>
<input name="input-2" id="input-2" type="text" dir="rtl" placeholder="نام خود را وارد کنید" onblur="checkEmpty(this.id, 'name-error');">
<div id="name-error" class="error"></div>
<br>
<label for="input-3">نام خانوادگی:</label>
<input name="input-3" id="input-3" type="text" dir="rtl" placeholder="نام خانوادگی خود را وارد کنید" onblur="checkEmpty(this.id, 'family-error');">
<div id="family-error" class="error"></div>
</form>
<hr>
<br>
اعتبارسنجی فیلد آدرس ایمیل با عبارات باقاعده (یک ایمیل نامعتبر در فیلد زیر وارد کرده و سپس بر روی دکمه ارسال کلیک کنید).
<br>
<br>
<script>
function emailValidator(form_name, input_name) {
    var pattern = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
    var address = document.forms[form_name].elements[input_name].value;
    
    if(pattern.test(address) === false) {
        alert('آدرس ایمیل وارد شده نامعتبر است');
        return false;
    }
    
    return true;
}
</script>
<form name="form-3" action="#" method="post" onsubmit="return emailValidator('form-3', 'input-4');">
<label for="input-4">آدرس ایمیل:</label>
<input name="input-4" id="input-4" type="text" dir="ltr" placeholder="ایمیل خود را وارد کنید">
<input type="submit" value="ارسال">
</form>
<hr>
<br>
اعتبارسنجی وجود حروف و اعداد خاص با متد indexOf (برای بررسی مثال زیر یک عبارت با استفاده از کاراکترهایی به جز حروف A, B, C, D, E, F در فیلد مورد نظر وارد کنید).
<br>
<br>
<script>
function checkChar(form_name, input_name){
    var chars = 'ABCDEF';
    var string = document.forms[form_name].elements[input_name].value;
    var strlen = string.length;
    
    if(strlen < 1){
        alert('لطفا یک عبارت وارد کنید');
        return false;
    }
    
    string = string.toUpperCase();
    for(i = 0; i < strlen; i++){
        if(chars.indexOf(string.charAt(i)) < 0){
            alert("تنها کارکترهای A, B, C, D, E, F مجاز هستند");
            return false;
        }
    }
    
    alert('فرم شما ارسال شد');
    return true;
}
</script>
<form name="form-4" action="#" method="post" onsubmit="return checkChar('form-4', 'input-5');">
<label for="input-5">کاراکترها:</label>
<input name="input-5" id="input-5" type="text" dir="ltr" placeholder="چند کاراکتر وارد کنید">
<input type="submit" value="ارسال">
</form>
<hr>
<br>
اعتبارسنجی وجود حروف فارسی با عبارات باقاعده (برای بررسی مثال زیر یک عبارت با استفاده از کاراکترهایی به جز حروف زبان فارسی در فیلد مورد نظر وارد کنید).
<br>
<br>
<script>
function checkChar(form_name, input_name){
    var pattern = /^([آ-ی])+$/u;
    var string = document.forms[form_name].elements[input_name].value;
    
    if(pattern.test(string) === false) {
        alert('مقادیر وارد شده نامعتبر است');
        return false;
    }
    
    return true;
}
</script>
<form name="form-5" action="#" method="post" onsubmit="return checkChar('form-5', 'input-6');">
<label for="input-6">عبارت فارسی:</label>
<input name="input-6" id="input-6" type="text" dir="rtl" placeholder="یک عبارت فارسی وارد کنید">
<input type="submit" value="ارسال">
</form>
<hr>
<br>
اعتبارسنجی تعداد حروف مجاز در هنگام پر کردن فیلد (برای بررسی مثال زیر عبارتی دلخواه را در محدوده textarea بنویسید).
<br>
<br>
<script>
function countChars(textarea_id, div_id) {
    var max = 10;
    var count = max - document.getElementById(textarea_id).value.length;
    var text = 'تعداد کاراکتر باقیمانده: ';
    
    if(count < 0) {
        document.getElementById(div_id).innerHTML = text + '<span style="color: red;">' + count + '</span>';
    } else {
        document.getElementById(div_id).innerHTML = text + count;
    }
}
</script>
<form id="form-6" action="#" method="post">
<textarea name="usertext" id="usertext" rows="6" cols="50" onfocus="countChars('usertext', 'result')" onkeydown="countChars('usertext', 'result')" onkeyup="countChars('usertext', 'result')">
</textarea>
<div id="result"></div>
</form>
</body>
</html>
پیش نمایش آنلاین
دسته بندی: آموزش کاربردی » JavaScript
related مطالب بیشتر:
چگونه لوگوی حمایتی برای نمایش در سایت یا وبلاگ بسازیم؟
ساخت پنل چند سربرگی (Tabbed Panel) با جاوا اسکریپت و CSS
استفاده ترکیبی از جاوا اسکریپت (JavaScript) و PHP
نمایش پیام در حال بارگذاری با جاوا اسکریپت (JavaScript)
نمایش کادر پیام شناور در سایت و وبلاگ با جاوا اسکریپت
دیدگاه
more ۱۲۴ دیدگاه برای این مطلب ارسال شده است.
more دیدگاه جدید بر اساس تاریخ ارسال در انتهای دیدگاه های موجود نمایش داده می شود.
mahsa
۱۵:۳۰ ۱۳۹۱/۰۵/۲۱
سلام
من یه فرم عضویت دارم که یکی از فیلداش نام کاربری است و میخوام وقتی از حالت فوکوس در میاد چک کنه که این نام کاربری تکراری هست یا نه و در div پیغام خطا را چاپ کند.
انجام این کار با استفاده از کدهای جاوا اسکریپت امکان پذیر نیست، چون اعتبارسنجی در سمت کاربر انجام می شود، باید از ای جکس (Ajax) و PHP برای این منظور استفاده کنید.
لطفا به آموزش های ای جکس مراجعه کنید.
ramezani
۱۸:۴۹ ۱۳۹۱/۰۷/۲۶
با عرض سلام و خسته نباشد
من واسه اعتبار سنجی فرم آموزش هاتون رو مطالعه کردم و واقعا در حد بسیار بالا بود
اما واسه اعتبار سنجی این که کاربر اطلاعاتش رو درست وارد کرده یا نه به مشکل خوردم. چون باید با دستورات دیتابیس و php کار کنم. البته این دستورات رو بلدم ولی نمیدونم توی آجاکس چطوری پیاده سازی کنم.
حال از شما درخواست داشتم تا در صورت امکان یک مثال مطرح کنید ؟ ممنون میشم
در آموزش زیر این موضوع به طور کامل مطرح شده است:
اعتبار سنجی همزمان فرم با ای جکس (Ajax) و PHP
اگر همچنان مشکلی بود عنوان کنید.
۱۳:۰۴ ۱۳۹۱/۰۸/۰۱
بسیار عالی بود و بجا
متشکرم
ansherli
۲۱:۲۱ ۱۳۹۱/۱۰/۱۹
سلام بازم من اومدم با چند تا سوال :)
اول کدهام رو ببینید
http://uplod.ir/y8hk4yl1sg02/webgoo.zip.htm
سوال 1:
برای پیام خالی نبودن فیلد باید بعد از اینکه میریم روی فیلد بعدی پیغام بده در صورتی برای نام کاربری فقط این طوری هستش و برای پسورد و نام به محض اینکه روی فیلدش کلیک میکنم پیام میده! همچنین من می خوام اگر هر کدوم از این سه گزینه رو کامل نکرد فرم ارسال نشه یا اینکه نتونه گزینه بعدی رو پر کنه.
سوال 2:
کد بررسی معتبر بودن ایمیلم کار نمیکنه! :(
سوال 3:
صفحه d-modir رو من قبلا با آموزش هاتون نوشته بودم به نظرتون لازمه که این قسمت از کد رو توی این صفحه قرار بدم یا فقط توی صفحه modir1.php بررسی بشه ؟
//بررسی معتبر بودن اطلاعات ارسالی کاربر
//نام کاربری
if (!isset($username) || $username == ''){
echo "فیلد نام کاربری نباید خالی باشد!";
$check_error = 1;
}
//کلمه عبور
elseif (!isset($password) || $password == ''){
echo "فیلد کلمه عبور نباید خالی باشد!";
$check_error = 1;
}
//مجاز بودن انتخاب حروف انگلیسی به عنوان نام کاربری
elseif (preg_match('/^[a-zA-Z0-9 _-]+$/', $username) === 0){
echo "نام کاربری دارای کاراکترهای غیر مجاز است!";
$check_error = 1;
}
ممنون میشم مثل همیشه راهنماییم کنید.
در مورد سوال اول:
رویداد onblur زمانی اجرا می شود که کاربر از حالت focus خارج شود (یعنی بعد از کلیک داخل فیلد، در خارج از آن کلیک کند)، در اینجا چون تمام فیلدها در یک تابع و همزمان بررسی می شوند، فیلدی که خالی باشد خطا برایش نشان داده می شود، پس وقتی فیلد اول پر باشد، خطا برای فیلد دوم نشان داده می شود و اگر فیلد دوم پر باشد خطا برای فیلد سوم و...
اما راه حل مشکل اول این است که برای هر فیلد از یک تابع خاص استفاده کنید تا فیلدها تک تک بررسی شوند، برای عدم ارسال هم در مطلب از تابع validateForm و رویداد onsubmit استفاده کنید (البته برای اجرای چند تابع در یک رویداد پاسخ سوال دوم را مطالعه کنید).
نکته: از کد زیر هم می توانید برای فعال یا غیر فعال کردن فیلدها استفاده کنید.
document.getElementById('id').disabled = true;
اگر مقادیر false باشد، فرم از حالت غیر فعال خارج می شود.
در مورد سوال دوم:
در یک فرم نمی توانید از دو رویداد onsubmit استفاده کنید، اما می توانید در یک رویداد چند تابع را اجرا کنید، به طور مثال:
<form action="d-modir.php" name="f-ertebat" id="f-ertebat" method="post" target="_blank" onsubmit="return confirm('اطلاعات ارسال شود؟') && emailValidate('f-ertebat','email');"  onreset="return confirm('اطلاعات پاک شود؟');" >
علامت && بین توابع فراموش نشود! علامت ; در پایان آخرین تابع!
در مورد سوال آخر هم بستگی به خودتان دارد، مهم این است که اطلاعات قبل از ثبت در دیتابیس، اعتبار سنجی شوند، با این حال به نظر تفکیک کردن کدها از هم روش بهتری در برنامه نویسی است.
ansherli
۱۱:۴۴ ۱۳۹۱/۱۰/۲۰
خیلی ممنونم از راهنمایی خوبتون
شرمنده فقط من نتونستم یه قسمت رو درست متوجه بشم
من می خوام علاوه بر اینکه برای سه فیلد اول پیام خالی بودن رو میده (مشکل این قسمتم با راهنمایی شما حل شد) بعد از ارسال در صورت خالی و نامعتبر بودن فرم ارسال نشه. یه چیزی شبیه فرم سایت خودتون.
می خوام یه کادر بالای فرمم قرار بگیره و بگه گزینه های اجباری که 4 تاست (نام کاربری ، پسورد، نام و ایمیل) رو پر کنم در صورت خالی بودن .
http://uplod.ir/u13b238wplux/modir1.zip.htm
با استفاده از بررسی های ساده شرطی با if و else این کار به راحتی امکان پذیر است، پس از اینکه متغیر check_error برابر 1 بود یک پیام به خروجی بدهید (که ظاهرا این کار را انجام داده اید)، اما اگر می خواهید فرم هم به خروجی ارسال شود دو راه وجود دارد:
- کدها را در یک فایل ترکیب کنید و قسمت اعتبارسنجی php بالاتر از فرم باشد.
- فرم را در انتهای پیام (در فایل دوم) به همراه آن به خروجی ارسال کنید.
انتخاب هر کدام بستگی به خودتان دارد.
ansherli
۱۴:۵۹ ۱۳۹۱/۱۰/۲۰
خیلی ممنون از راهنمایی های خوب و سریعتون
حسین
۱۷:۰۸ ۱۳۹۱/۱۰/۲۳
سلام خسته نباشید مثلا اگه بخوایم برای ثبت شماره موبایل که فقط عدد باشه ، از 11 رقم کمتر و بیشتر نباشه و با 09 شروع بشه باید چیکار کرد ؟ ممنون
تابع زیر این کار را انجام می دهد، متناسب با نیازتان آن را فراخوانی کنید:
<script>
function checkPhone(number){
if(number.length != 11) {
alert("شماره شما باید 11 رقم باشد");
return false;
}
else if(isNaN(number) || number.indexOf(" ") != -1){
alert("یک مقدار عددی وارد کنید");
return false;
}
else if((number.charAt(0) + number.charAt(1)) != "09"){
alert("شماره شما باید با 09 شروع شود");
return false;
}
alert("شماره شما: " + number);
return true;
}
</script>
امیر
۰۳:۰۹ ۱۳۹۱/۱۲/۲۰
آقا خیلی خیلی دمت گرم اساسی به دردم خورد
ابوالفضل روشن ضمیر
۲۲:۲۸ ۱۳۹۲/۰۱/۲۶
سلام
خیلی خیلی دست درد نکنه ..بخدا اینقدر گرفتار این راه بودم که نگو ...واقعا دمت گرم ..خیلی به دردم خورد ..ان شالله که موفق باشی
بانو
۱۵:۵۶ ۱۳۹۲/۰۱/۳۱
سلام . وقتی چند تا تابع رو در رویداد onsubmit فرم قرار میدم فقط برا یکی کار میکنه و برای خروجی بقیه تابع ها تاثیری نداره چطور میتونم این مشکل رو رفع کنم؟
برای این کار بین توابع از علامت && استفاده کنید و تنها برای آخرین تابع علامت ; را قرار دهید، مثال:
<form action="index.php" name="form" method="post" onsubmit="func_1(arg) && func_2(arg);">
بانو
۱۷:۲۲ ۱۳۹۲/۰۱/۳۱
ممنون از پاسختون
یه سئوال دیگه:
بعد اینکه کاربر فرم رو ارسال کرد برا اینکه به ایمیلش کد فعال سازی ارسال بشه که حساب کاربری اش فعال بشه میشه یه راهنمایی در این رابطه بفرمایید که مراحل این کار چطوریه؟؟
توضیح کامل مطلب در اینجا مقدور نیست اما به طور خلاصه و تئوری کار سختی نیست، لازمه اول آشنایی با نحوه ارسال ایمیل در PHP است که آموزش های آن چه در وب و چه در سایت وجود دارد، سپس وقتی کاربر ثبت نام می کند یک کد اختصاصی برای او در دیتابیس ذخیره کنید (این کد اختصاصی بستگی به خود شما دارد، می تواند آی دی کاربر، hash نام کاربری او یا یک رمز رندوم و... باشد)، یک ستون (در دیتابیس) هم به عنوان به فرض حالت فعال یا غیر فعال (پیش فرض) در نظر بگیرید، سپس در ایمیل ارسالی رمز اختصاصی کاربر را در یک لینک به عنوان پارامتر قرار دهید، به طور مثال:
http://example.com/register.php?do=active&hash=3kdi8s65ysha0eptic9463hdh
این لینک می تواند به مقصد یک فایل در سرور شما باشد که رمز کاربر را با دیتابیس چک می کند و اگر درست بود وضعیت او را به حالت فعال تغییر می دهد.
بانو
۱۰:۰۸ ۱۳۹۲/۰۲/۰۱
واقعا ممنون که به سئوالات جواب میدین
یه سئوال دیگه:
اگه بخوام تو صفحه ارسال اطلاعات کاربر کد امنیتی رو از لحاظ معتبر بودن چک کنم که در صورت نامعتبر بودن فرم ارسال نشه باید چیکار کنم.
انجام این کار بسته به نوع اعتبار سنجی و سیستم ایجاد کد امنیتی متفاوت است، به طور مثال در بیشتر موارد این کار در سمت سرور و پس از ارسال فرم انجام می شود، صرفا در سمت کاربر خالی نبودن فیلد امنیتی می تواند بررسی شود، این شیوه معمول است، اما اگر اصرار دارید پیش از ارسال فرم صحیح بودن کد امنیتی را چک کنید، باید در هنگام ارسال با رویداد onclick یک تابع جاوا اسکریپتی را فراخوانی کنید که مقادیر فیلد امنیتی را به سرور و در قالب درخواست آژاکسی (Ajax) ارسال و برآورد سرور (به فرض برای کد صحیح عدد 1 و برای کد نادرست عدد 0) را بررسی کند، اگر موارد مد نظر شما بود، تابع فرم را ارسال می کند، در غیر این صورت تابع false را برمی گرداند و در عین حال به فرض در یک بلاک div یا با دستور alert یک پیغام خطا نیز نشان می دهد.
البته همه موارد گفته شده در حد تئوری است و برای به عمل در آوردن آن نیازمند حداقل تسلط نسبی بر جاوا اسکریپت و آژاکس است.
مثال:
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>وبگو | اعتبارسنجی کد امنیتی پیش از ارسال</title>
<!-- http://webgoo.ir -->
<style type="text/css">
body{
font-family:Tahoma, Geneva, sans-serif;
font-size:12px;
direction:rtl;
}
</style>
<script type="text/javascript">
var url = 'captcha.php?code=';
var status = 2;

function getHTTPObject(){
try{
req = new XMLHttpRequest();
}
catch(e){
try{
req = new ActiveXObject("Msxml12.XMLHTTP");
}
catch(e){
try{
req = new ActiveXObject("Microsoft.XMLHTTP");
}
catch(e){
req = false;
}
}
}
return req;
}
var http = getHTTPObject();

function handleHttpResponse(){
if (http.readyState == 4){
//دریافت پاسخ سرور
status = http.responseText;
//بررسی پاسخ
if(status != 1){
//خطا
alert('کد امنیتی وارد شده صحیح نیست');
document.form.code.value='';
document.form.code.focus();
return false;
}
//ارسال فرم
document.form.submit();
}
}

function CheckCode(value){
//ارسال درخواست به سرور
http.open("GET", url + escape(value), true);
http.onreadystatechange = handleHttpResponse;
http.send(null);
}

function CheckCaptcha(){
//بررسی خالی نبودن فیلد امنیتی
if(document.form.code.value==''){
alert('لطفا کد امنیتی را وارد کنید');
document.form.code.focus();
return false;
}
//بررسی صحیح بودن کد امنیتی
CheckCode(document.form.code.value);
return false;
}
</script>
</head>
<body>
<noscript>جاوا اسکریپت در مرورگر شما غیر فعال است یا پشتیبانی نمی شود!</noscript>
<form action="index.php" method="post" name="form">
<input type="text" name="code" maxlength="4"><br>
<input type="submit" value="ارسال" onclick="return CheckCaptcha();">
</form>
</body>
</html>
بانو
۱۲:۲۶ ۱۳۹۲/۰۲/۰۱
واقعا مررررررررررررررررررررررررررررررسی
بانو
۲۱:۲۶ ۱۳۹۲/۰۲/۰۴
سلامی دوباره
امکانش هست من کدم رو براتون بفرستم شما این تیکه کد امنیت رو واسم توش قرار بدید. واسه من خطا میده منم چون تازه کارم نتونستم رفعش کنم
سلام
تنها رفع ایرادات جزئی و مشکلاتی که نیاز به کدنویسی زیاد ندارند امکان پذیر است (کد را از طریق ایمیلی که در بخش تماس با ما وجود دارد ارسال کنید).
۱۸:۵۳ ۱۳۹۲/۰۲/۱۰
سلام من کد ajax رو میخوام برای مثال زیر .
میخوام وقتی کاربر یک منو باز شو رو انتخاب کرد منوی بازشوی بعدی فال و با توجه به منوی بازشوی اول بیاد مثلا کمپانی رو bmw قرار داد در لیست بازشوی بعدی مدل های bmw را نمایش دهد و...
سلام
معمولا کدی کامل و آماده برای این گونه موارد وجود ندارد، باید بر جاوا اسکریپت تا حدودی مسلط باشید تا بتوانید آن را مطابق نیاز خود بنویسید.
more لطفا پیش از ارسال دیدگاه نکات زیر را مد نظر داشته باشید:
- به سوالات کلی، زمانبر، مبهم و مشکلاتی که تلاشی برای رفع آنها نکرده باشید پاسخ مختصر داده شده یا به بخش برنامه نویسی اختصاصی ارجاع داده می شوند.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین یا به صورت حساب موقت و آزمایشی قرار دهید تا امکان بررسی دقیق مشکل و خطایابی میسر باشد.
- تمام دیدگاه های ارسالی خوانده شده و برای هر کاربر مدت زمان لازم جهت پاسخگویی در نظر گرفته می شود، لطفا از طرح سوالات متعدد در بازه زمانی کوتاه خودداری کنید.



 refresh
10 × 10
4 × 3
20 × 20
=
آخرین دیدگاه ها
more برای دسترسی سریع به یادداشت مربوطه می توانید از لینک مطلب در کادر زیر استفاده کنید.
سعیدی
سلام می تونید اینو اصلاح کنید؟ چون من با توضیحات شما یاد نگرفتم خیلی ممنون اگه یکبار اصلاح کنید واسه بعد یاد...
۱۴۰۳/۰۲/۲۲

سعیدی
دست شما درد نکنه وقتی اینطوری تغییر میدم و به class می نویسم کار نمی کنه و ارور میده
۱۴۰۳/۰۲/۲۱

سعیدی
دست شما درد نکنه خیلی خوب بود این یکی رو چطوری فراخوانی کنم؟ این واسه مناسبت هاست خیلی ممنون
۱۴۰۳/۰۲/۱۹

سعیدی
با سلام آیا می شه این تابع رو بصورت class نوشت؟ میخوام وقتی کد ملی میدم با این تابع فراخوانی بشه و شهر...
۱۴۰۳/۰۲/۱۹

پرتو
مگه شما دارین اموزشش رو؟ آدرسش رو میزارید؟ یا اگر سایتی رو میشناسید که آموزش داده باشه معرفی کنید ممنون میشم من خیلی گشتم توی...
۱۴۰۳/۰۲/۱۸

پــرتو
سلام خوبید ؟ خسته نباشید گوشی پدرم شیاومی هست ایمیلمو ثبت کردم داخلش بعد می خواستم حذفش کنم نمیشد می گفت همه داده های توی...
۱۴۰۳/۰۲/۱۶

vip
خیلی ممنونم از شما خیلی عالی شد میشه مثل تبلیغ بلاگفا باشه یعنی زیر صفحه نمایش داده بشه و صفحه رو سیاه نکنه که تا...
۱۴۰۳/۰۲/۰۵

vip
با سلام و خسته نباشید استاد چند وقت پیش این کد رو از شما گرفتم این کد خیلی خوبه و کاربر رو هم...
۱۴۰۳/۰۲/۰۴

پـــرتو
سلام خسته نباشید شرمنده مزاحم میشم یه سوال داشتم می خواستم بپرسم که چرا بلاگفا باز نمیشه برام؟ کلا هر وبلاگی که مربوط به بلاگفا...
۱۴۰۳/۰۲/۰۲

هادی عبداله زاده
با تشکر از شما دوست عزیز با order_id درستش کردم موقع برگشت order_id رو بر می گردونه اینطوری کردم که از طریق اون شناسه...
۱۴۰۳/۰۱/۲۲

هادی عبداله زاده
با تشکر از شما برای ارسال درخواست درست بود و به بانک هم وصل شد فقط برای وریفای چیکارش کنم؟
۱۴۰۳/۰۱/۲۲

هادی عبداله زاده
با سلام و خسته نباشید سال نو شما مبارک من یه کد واسه انتقال به درگاه دارم واسه زرین پال هست ...
۱۴۰۳/۰۱/۲۰

پـــرتو
ببخشید ممنون از جوابتون ولی یه سوال اگر بخوام همون شماره رو با حساب کاربری جدید با همون شماره رو داشته باشم داده های قبلی...
۱۴۰۳/۰۱/۱۹

حسین بلاگ
من یه صفحه ارسال متن دارم میخوام کاربرها وقتی واسه م پیام میدن وقتی روی اون دکمه کلیک می کنن بهشون بگه لطفا صبر...
۱۴۰۳/۰۱/۱۹

شریفی
سلام و عرض احترام سال نو رو بهتون تبریک میگم انشالله سال خوبی داشته باشین یه سرویس وبلاگدهی داریم که قصد داریم به...
۱۴۰۳/۰۱/۱۵

فرهادی
سلام ببخشید یه مشکل دارم این صفحه رو نگاه کنید چند بار توی سورس تکرار شده نمی تونم الگوی توضیحاتش رو استخراج...
۱۴۰۳/۰۱/۱۰

فرهادی
با تشکر از شما یه مشکل دیگه برام پیش اومده واسه این کد وقتی echo می گیرم تومان باهاش میاد وقتی میخوام فقط...
۱۴۰۳/۰۱/۰۹

سید صالح
با سلام و خسته نباشید من یک فرم ساده دارم که کاربر باید پر کنه چون سوال امنیتی و اینا نداره ربات ها همه...
۱۴۰۳/۰۱/۰۷

فرهادی
با تشکر از شما یه سوال دیگه هم دارم توی تعدادی از سایتهای فروشگاهی صفحات سایت مپ به جای لینک صفحات حاوی لینکهایی هستند...
۱۴۰۳/۰۱/۰۶

فرهادی
با سلام و درود سال نو رو بهتون تبریک میگم یه سوال من میخوام لینکهای داخل صفحه sitemap.xml سایتها رو دربیارم کدش رو هم...
۱۴۰۳/۰۱/۰۲
  در انتظار بررسی: ۰
 پاسخگویی به سوالات ممکن است تا ۲۴ ساعت زمان ببرد.