article

اعتبار سنجی همزمان فرم با آژاکس (Ajax) و PHP

ajax-php-validation

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

کد آژاکس برای ارسال اطلاعات فرم


قبل از هر چیز باید موتور پایه ی کارمان را برنامه نویسی کنیم، در اینجا کد ما مبتنی بر آژاکس (ajax) و XMLHttpRequest (برای تمام مرورگرها به جزء نسخه های قدیمی اینترنت اکسپلورر) یا ActiveXObject (برای اینترنت اکسپلورر نسخه 7 و ماقبل) خواهد بود، در مجموع ما به کدی نیاز داریم که اطلاعات فیلدهای فرم را دریافت کرده، به سرور ارسال کند و تا هنگام دریافت پاسخ سرور، یک پیام یا تصویر مبنی بر درحال پردازش بودن درخواست نشان و در نهایت نیز پاسخ سرور را در یک بلاک div خروجی دهد؛ از این رو از کد زیر استفاده می کنیم.
<script type="text/javascript">
//<![CDATA[
function AjaxRequest(inputname,divid,inputvalue){
var formvalue = inputname+"="+inputvalue.value;    
var loadingmessage = '<img src="loading.gif" alt="loading" height="16" width="16" />';    
var xmlhttp;
if (window.XMLHttpRequest){
    // code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp=new XMLHttpRequest();
    }
    else{
        // code for IE6, IE5
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
        }
        xmlhttp.onreadystatechange=function(){
            if (xmlhttp.readyState<4){
                document.getElementById(divid).innerHTML=loadingmessage;
                }            
                else if (xmlhttp.readyState==4 && xmlhttp.status==200){
                    document.getElementById(divid).innerHTML=xmlhttp.responseText;
                }
        }
        xmlhttp.open("POST","validate.php",true);
        xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
        xmlhttp.send(formvalue);
}
//]]>
</script>
توضیح:
- تابع اصلی کد، AjaxRequest نام دارد که یک عنوان دلخواه و فرضی است، این تابع از سه آرگومان استفاده می کند که به ترتیب، نام فیلد مورد نظر، آی دی فیلد و مقادیر آن را در خود نگهداری می کنند.
- در متغیر formvalue، مقادیر را برای ارسال از طریق xmlhttp.send آماده می کنیم، به طور مثال اگر inputname برابر usertext باشد و inputvalue برابر 1، مقادیر متغیر formvalue به صورت usertext=1 خواهد بود، به این صورت در سمت سرور می توان به صورت زیر اطلاعات را دریافت کرد.
<?php
$usertext = $_POST['usertext'];
?>
- متغیر loadingmessage برای نمایش یک تصویر، در حالتی که xmlhttp.readyState<4 است استفاده می شود.
- اطلاعات فیلدهای فرم با متد POST به فایل validate.php ارسال می شوند.
- در نهایت نیز پاسخ سرور با innerHTML و responseText در بلاک div خروجی داده می شود.

نحوه استفاده و فراخوانی تابع آژاکسی


برای اینکه موتور آژاکسی ما به کار بیفتد، لازم است که با استفاده از رویدادهای جاوا اسکریپت نظیر onkeyup یا onchange این کار را انجام دهیم، در نمونه زیر از onchange استفاده کرده ایم.
<form action="validate.php" method="post">
اعتبار سنجی عدد بودن مقادیر:<br /><br />
<input type="text" name="usertext" id="usertext" onchange="AjaxRequest('usertext','showresult-1',this);" />
<div class="inline" id="showresult-1"></div><br />
اعتبار سنجی معتبر بودن ایمیل:<br /><br />
<input type="text" name="usermail" id="usermail" onchange="AjaxRequest('usermail','showresult-2',this);" />
<div class="inline" id="showresult-2"></div><br />
اعتبار سنجی معتبر بودن آدرس سایت:<br /><br />
<input type="text" name="usersite" id="usersite" onchange="AjaxRequest('usersite','showresult-3',this);" />
<div class="inline" id="showresult-3"></div><br />
</form>
توضیح:
- اگر دقت کرده باشید، برای هر فیلد، تابع AjaxRequest را با سه آرگومان فراخوانی کرده ایم، آرگومان اول نام فیلد، آرگومان دوم آی دی بلاک div و آرگومان سوم مقادیر فرم را برمی گرداند؛ به این صورت مواد اولیه به تابع داده شده و تابع درخواست را به سرور ارسال می کند، در نهایت پاسخ سرور در آن بلاک div خروجی داده می شود.
- همان طور که گفتیم، در این مثال از رویداد onchange استفاده کرده ایم که بنا به نیاز خود می توانید از سایر رویدادها مانند onkeyup، onblur، onfocus و... نیز استفاده کنید.

کد php برای پردازش اطلاعات ارسالی


با توجه به هدف شما از اعتبار سنجی، برنامه نویسی شما نیز در سمت سرور متفاوت خواهد بود، برای نمونه در مثال زیر، سه فیلد را از لحاظ اینکه مقادیر ارسال شده یک عدد، یک آدرس ایمیل معتبر و یا آدرس یک وبسایت یا وبلاگ باشد، بررسی می کنیم.
<?php
@$usertext = $_POST['usertext'];
@$usermail = $_POST['usermail'];
@$usersite = $_POST['usersite'];

if(isset($usertext) && is_numeric($usertext)){
    echo "<div class=\"result-true\">عبارت وارد شده یک عدد است!</div>";
}
elseif(isset($usertext) && !is_numeric($usertext)){
    echo "<div class=\"result-false\">عبارت وارد شده یک عدد نیست!</div>";    
}

if(isset($usermail) && preg_match("|^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$|i", $usermail) > 0){
    echo "<div class=\"result-true\">ایمیل وارد شده معتبر است!</div>";
}
elseif(isset($usermail) && preg_match("|^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$|i", $usermail) == 0){
    echo "<div class=\"result-false\">ایمیل وارد شده معتبر نیست!</div>";    
}

if(isset($usersite) && preg_match("|^\S+\.\S+.+$|", $usersite) > 0){
    echo "<div class=\"result-true\">آدرس سایت وارد شده معتبر است!</div>";
}
elseif(isset($usersite) && preg_match("|^\S+\.\S+.+$|", $usersite) == 0){
    echo "<div class=\"result-false\">آدرس سایت وارد شده معتبر نیست!</div>";    
}
?>
توضیح:
- متغیر usertext به لحاظ اینکه یک مقدار عددی باشد یا خیر، بررسی می شود، در این بررسی از تابع is_numeric در php استفاده کرده ایم.
- متغیر usermail به لحاظ اینکه یک آدرس ایمیل معتبر باشد، بررسی می شود، در اینجا از تابع preg_match و یک الگو بر اساس عبارات باقاعده یا Regular Expression استفاده کرده ایم.
- متغیر usersite نیز به لحاظ پیروی کردن از الگوی صحیح یک آدرس وب بررسی می شود، در اینجا نیز از تابع preg_match و یک الگو بر اساس عبارات باقاعده یا Regular Expression استفاده کرده ایم.
نکته 1: تابع preg_match با توجه به الگو، رشته ارسالی را بررسی می کند، اگر مقادیر ارسال شده برابر با الگو باشد، مقادیر 1 و در غیر این صورت مقادیر صفر را برمی گرداند.
نکته 2: علامت @ در ابتدای متغیرها برای جلوگیری از نمایش خطاها و نادیده گرفته شدن آنها در php است.

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


در زیر کد نهایی و پیش نمایش آنلاین اعتبار سنجی با آژاکس (ajax) و php را ملاحظه می کنید.
<!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;
}
.inline{
    display:inline-block;
}
.result-true{
    color:#090;
}
.result-false{
    color:#C00;
}
</style>
<script type="text/javascript">
//<![CDATA[
function AjaxRequest(inputname,divid,inputvalue){
var formvalue = inputname+"="+inputvalue.value;    
var loadingmessage = '<img src="loading.gif" alt="loading" height="16" width="16" />';    
var xmlhttp;
if (window.XMLHttpRequest){
    // code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp=new XMLHttpRequest();
    }
    else{
        // code for IE6, IE5
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
        }
        xmlhttp.onreadystatechange=function(){
            if (xmlhttp.readyState<4){
                document.getElementById(divid).innerHTML=loadingmessage;
                }            
                else if (xmlhttp.readyState==4 && xmlhttp.status==200){
                    document.getElementById(divid).innerHTML=xmlhttp.responseText;
                }
        }
        xmlhttp.open("POST","validate.php",true);
        xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
        xmlhttp.send(formvalue);
}
//]]>
</script>
</head>
<body>
<noscript>
جاوا اسکریپت در مرورگر شما غیرفعال است یا پشتیبانی نمی شود!<br />
</noscript>

<form action="validate.php" method="post">
اعتبار سنجی عدد بودن مقادیر:<br /><br />
<input type="text" name="usertext" id="usertext" onchange="AjaxRequest('usertext','showresult-1',this);" />
<div class="inline" id="showresult-1"></div><br />
اعتبار سنجی معتبر بودن ایمیل:<br /><br />
<input type="text" name="usermail" id="usermail" onchange="AjaxRequest('usermail','showresult-2',this);" />
<div class="inline" id="showresult-2"></div><br />
اعتبار سنجی معتبر بودن آدرس سایت:<br /><br />
<input type="text" name="usersite" id="usersite" onchange="AjaxRequest('usersite','showresult-3',this);" />
<div class="inline" id="showresult-3"></div><br />
</form>
<hr />
پس از تایپ یک عبارت در هر فیلد، در فیلد بعدی کلیک کنید تا رویداد onchange اجرا شود.
</body>
</html>
پیش نمایش
sectionدسته بندی: آموزش کاربردی » Ajax
related مطالب بیشتر:
» آموزش نحوه آپلود فایل با PHP و ای جکس (Ajax)
» نمایش داینامیک و صفحه به صفحه مطالب با ای جکس (Ajax)
» لیست داینامیک پیشنهاد کلمات، مبتنی بر ای جکس، PHP و MySQL
» ارسال اطلاعات فرم با ای جکس (Ajax) و نمایش پیام در حال پردازش
» نمایش نتایج پایگاه داده MySQL با PHP و ای جکس (Ajax)
commentنظرات (۳۴ یادداشت برای این مطلب ارسال شده است)
more یادداشت های جدید بر اساس تاریخ ارسال در انتهای یادداشت های موجود نمایش داده می شوند.
نویسنده: تازه کار
۱۹:۳۷ ۱۳۹۱/۰۶/۲۷
سلام با تشکر از آموزش خوبتون
اگه ممکنه مرحله بعدی که درج در دیتابیس هست هم توضیح بدین
من این کد نوشتم اما به ازای هر تکست فیلد که اعتبار سنجی میشد، در صورت صحت یک رکورد به اون فیلد در جدول اضافه میکنه و یکبار هم در انتها.
اگه ممکنه کمک کنید
require("config/config.php");
$insert = "INSERT INTO `table` (name,email)
VALUES ('$name','$email'')";
mysql_query($insert) or die(mysql_error());
if(mysql_affected_rows()>0)
{
print(" ثبت نام با موفقیت انجام شد ");
exit();
}
else{
print(" ثبت نام ناموفق بود ");
exit();
}
mysql_close();
پاسخ: 
سلام
بهتر است ابتدا از معتبر بودن تمام فیلدها اطمینان حاصل کنید، سپس اگر مشکلی وجود نداشت مقادیر را در یک پرس و جو در دیتابیس ذخیره کنید، در این مورد در مطالب بخش آموزش کاربردی mysql مثال های زیادی وجود دارد.
نویسنده: reza
۰۸:۳۹ ۱۳۹۱/۰۷/۲۵
با سلام
تو این نوع اعتبار سنجی ها وقتی که جاوا اسکریپت سیستم را غیر فعال کنیم کار نمی کنند. حال راه حلی داره بجز سمت سرور یعنی php که همون لحظه اخطار نمایش داده بشه ؟
پاسخ: 
سلام
خیر، تقریبا اکثر زبان ها و روش های اعتبارسنجی سمت کاربر و وابسته به مرورگر نیاز به فعال بودن جاوا اسکریپت دارند، البته بدون جاوا اسکریپت هم در حد خیلی محدود می توان این کار را انجام داد، به طور مثال maxlength در فرم های وب خود یک نوع اعتبارسنجی است، اما در کل پاسخ پرسش شما خیر است؛ شاید بهترین گزینه استفاده از تگ noscript باشد تا کاربر جاوا اسکریپت را در مرورگر فعال کند.
نویسنده: reza
۰۹:۲۴ ۱۳۹۱/۰۷/۲۵
خیلی ممنون از پاسختون
فکر نمیکردم اینقدر زود جوابمو بدین
-------------------------------------------
بنظر شما از اسکریپت استفاده کنم امنیت رو پایین نمیاره یا با همون php بنویسم .
منظور شما این بود که وقتی که کاربر جاوااسکریپتش غیر فعال بود اخطار بده ؟
پاسخ: 
بله منظور از تگ noscript همان است؛ در مورد سوال دیگر، اعتبار سنجی آژاکس با جاوا اسکریپت خالی فرق می کند، چون در اینجا در واقع در سرور اعتبارسنجی انجام می شود و صرفا پاسخ آن به طور همزمان به مرورگر ارسال می شود، اما نکته مهم این است برنامه خود را طوری بنویسید که چه با آژاکس و چه بدون آن، اطلاعات قبل از پردازش از یک فیلتر سمت سرور بگذرند، به این ترتیب حتی با غیر فعال بودن جاوا اسکریپت هم صرفا اعتبارسنجی آژاکس غیر فعال می شود، در حالی که اعتبارسنجی php همچنان کار می کند.
نویسنده: reza
۱۱:۳۶ ۱۳۹۱/۰۸/۰۸
سلام خسته نباشید
من برای فرمی اعتبار سنجی توسط آژاکس ایجاد کردم
حال توسط تابع responseText مقدار دستوراتی که در php نوشتم مثلا اگر نام کاربری خالی بود = 1 و رمز عبور خالی بود = 2 و ... برمی گردونه که مرتبط با اون هم اخطار میده
و کاملا هم درست است.
اما مشکلم انجاست وقتی تو دستورات php به بانک وصل میشم و می خوام وقتی که نام کاربری یا رمز عبور درست نبود یک مقداری رو چاپ کنه مثلا 3 که تو آژاکس فراخوانی کنه و اخطار بده کار نمی کنه یا اصلا وقتی که نام کاربری و رمز عبور رو درست وارد می کنم به اون صفحه ای که می خوام بره نمیره یعنی کار نمی کنه
خواهش می کنم در صورت امکان راهنماییم کنید
یا گر میشه مثالی برای ارتباط آژاکس با php که با بانک سر و کار داشته باشه بزنید
ممنون از زحماتتون
پاسخ: 
سلام
اگر خروجی کد php شما توسط آژاکس و در سمت کاربر به درستی قابل تجزیه است، کار سختی برای پایگاه داده ندارید، در واقع باید برای عدد 3 که در مشکل اشاره کردید روندی مشابه تعریف کنید، به عبارت دیگر آنچه برای آژاکس مهم است عددی است که کد php برمی گرداند، حال این عدد می تواند بر اثر تجزیه تحلیل پرس و جوهای دیتابیس باشد یا اینکه خود php و به فرض با توابع و دستورات ساده خروجی داده شود، نتیجه اینکه ابتدا باید ببینید خروجی کد php شما چیست و در ثانی در سمت کاربر (کد آژاکس) چگونه آن خروجی را مدیریت می کنید.
به هر صورت رفع دقیق مشکل بدون دیدن سورس کدها و آزمایش و خطا امکان پذیر نیست.
نویسنده: مهران
۱۸:۱۷ ۱۳۹۱/۰۸/۳۰
سلام.
اگه بخوایم اطلاعاتی که کاربر مثلا تو فیلد کد ملی وارد می کنه رو بره و تو پایگاه داده بگرده و اگه تکراری بود نگذاره فرم submit بشه ولی اگه تکراری نبود فرم submit بشه. ممنون میشم کمکم کنید.
پاسخ: 
سلام
این کار در تئوری چندان پیچیده نیست، باید پس از ارسال فرم با آژاکس در سرور با php و mysql بررسی کنید و با توابعی مثل mysql_num_rows تعداد ردیف های موجود متشابه را به دست آورید، اگر ردیف مشابه وجود داشت، یک عبارت به عنوان خطا برای خروجی ارسال کنید و در سمت کاربر در آژاکس خطا را به کاربر نشان دهید، اگر کد ملی وجود نداشت ابتدا در سمت سرور کد جدید را ذخیره کنید و سپس در پاسخ عبارتی مبنی بر ثبت شدن کد ملی ارسال کنید.
نوشتن این کد در این قسمت امکان پذیر نیست، باید خودتان نمونه کدی بنویسید و اگر مشکل داشتید مطرح کنید.
نویسنده: حبیب
۰۱:۲۵ ۱۳۹۱/۰۹/۰۴
با سلام
من اعتبار سنجی رو طبق دستور درست کردم همچیش درسته ولی وقتی می خوام که روی گزینه بعد کلیک کنم فرم ها دو تا میشن یعنی عین 3 تا تکست دیگه رو صفحه کپی میشه
پاسخ: 
سلام
به احتمال زیاد قسمتی را اشتباه انجام داده اید، دقت کنید که نام گذاری فیلد ها و فراخوانی آنها درست و مطابق الگو انجام شده باشد، در واقع مرورگر هیچ کاری را بی علت انجام نمی دهد، باید ببینید کجای کد ایراد دارد، در صورت تمایل می توانید آن را به ایمیل ما بفرستید تا بررسی کنیم.
نویسنده: حبیب
۰۲:۳۲ ۱۳۹۱/۰۹/۰۶
با سلام
میشه کد اعتبار سنجی اینکه فقط استفاده از عدد و حروف مجاز باشه و چیزه دیگه ای مجاز نباشه مثلا ( ' " @ $ % # ) مثلا من یه فرم لوگین می خوام طراحی کنم و از این کد تو اون استفاده کنم اگه میشه برام میل کنین یا تو سایت آموزش بدین
با تشکر
پاسخ: 
سلام
برای این کار کافی است از تابع preg_match مطابق الگوی زیر استفاده کنید:
preg_match("/^[a-zA-Z0-9]+$/", $username)
اگر رشته ارسالی دارای کاراکتری خارج از 0-9 a-z یا A-Z باشد تابع عدد 0 و در غیر این صورت عدد 1 را برمی گرداند، به طور مثال:
if(isset($username) && preg_match("/^[a-zA-Z0-9]+$/", $username) == 1){
echo "<div class=\"result-true\">نام کاربری وارد شده معتبر است!</div>";
}
elseif(isset($username) && preg_match("/^[a-zA-Z0-9]+$/", $username) == 0){
echo "<div class=\"result-false\">نام کاربری وارد شده معتبر نیست!</div>";
}
البته دقت کنید که در قسمت دریافت متغیرها در php (قسمت POST) و همچنین فرم html موارد مربوط به نام فیلد و آی دی و... را متناسب با نام متغیر جدید (username) تعریف کرده باشید.
نویسنده: خالدیان
۲۲:۲۳ ۱۳۹۱/۰۹/۲۰
از سایت عالی و بی نظیر شما تشکر می کنم و از زحمات شما بی نهایت تشکر دارم
نویسنده: محمد
۱۲:۲۶ ۱۳۹۱/۱۰/۰۹
لطفا کد اعتبارسنجی حروف فارسی رو هم بنویسید چون وقتی مثلا نام کاریری رو به فارسی وارد کنیم مینویسه که نامعتبر است.
پاسخ: 
برای نام کاربری بهتر است تنها از کاراکترهای انگلیسی استفاده شود، با این حال دو روش زیر می توانند کمک کنند، در روش اول که طولانی تر است می توانیم یک تابع دلخواه برای حروف فارسی بنویسیم:
<?php
function strSplitUTF8($str) {
$split = 1;
@$array = array();
for($i = 0; $i < strlen($str);) {
$value = ord($str[$i]);
if($value > 127) {
if($value >= 192 && $value <= 223)
$split = 2;
elseif($value >= 224 && $value <= 239)
$split = 3;
elseif($value >= 240 && $value <= 247)
$split = 4;
} else {
$split = 1;
}
$key = null;
for($j = 0; $j < $split; $j++, $i++) {
$key .= $str[$i];
}
array_push($array, $key);
}
return $array;
}

function isPersian($str) {
/* function by: http://webgoo.ir */
$persian_status = true;
$str_to_array = strSplitUTF8($str);
foreach($str_to_array as $key => $value) {
if($value == ' ') {
unset($str_to_array[$key]);
}
}
$persian_alphabet = array('ا', 'ب', 'پ', 'ت', 'ث', 'ج', 'چ', 'ح', 'خ', 'د', 'ذ', 'ر', 'ز', 'ژ', 'س', 'ش', 'ص', 'ض', 'ط', 'ظ', 'ع', 'غ', 'ف', 'ق', 'ک', 'گ', 'ل', 'م', 'ن', 'و', 'ه', 'ی', 'ء', 'آ', 'اً', 'َ', 'ِ', 'ًُ', 'ي');
foreach($str_to_array as $key => $value) {
if(!in_array($value, $persian_alphabet)) {
$persian_status = false;
}
}
return $persian_status;
}

//نحوه استفاده
$username = 'نام کاربری';
if(isPersian($username) == true) {
echo 'Valid: این نام کاربری فارسی و قابل ثبت است';
} else {
echo 'Invalid: این نام کاربری فارسی نیست یا دارای کاراکترهای غیر مجاز است';
}
?>
تابع اول برای تجزیه حرف به حرف کلمات فارسی است و در تابع دوم حروف بررسی می شوند، اگر حرفی جزء حروف الفبای فارسی نبود، تابع isPersian مقادیر false را برمی گرداند و اگر کلمه فارسی بود، true را برمی گرداند، به این ترتیب می توانید به کاربران اجازه ثبت نام کاربری فارسی را بدهید.
نکته: برای اینکه کاربران بتوانند هم کاراکترهای انگلیسی و هم فارسی را استفاده کنند، باید از این تابع در کنار سایر روش های اعتبار سنجی استفاده کنید، یعنی کاربر هم مجاز به استفاده از کاراکترهای مجاز انگلیسی باشد و هم فارسی (استفاده ترکیبی مجاز نیست)، به فرض:
if(isset($username) && (preg_match("/^[a-zA-Z0-9]+$/", $username) > 0) || isPersian($username) == true){
echo 'Valid: این نام کاربری قابل ثبت است';
}
روش دوم ساده است و در آن از modifier u استفاده می کنیم:
<?php
$str = 'متن فارسی';
if(preg_match('/^[آ-ی\s]+$/u', $str)){
echo 'Valid' . '<br>';
}
else{
echo 'Invalid' . '<br>';
}
?>
نویسنده: حیاتی
۱۴:۵۸ ۱۳۹۱/۱۰/۰۹
- اگر بخواهیم همزمان دو فیلد پسورد و تکرار پسورد با هم مقایسه شوند باید چه کدی بنویسیم؟ - اگر بخواهیم پسورد کمتر از مثلا شش کاراکتر نباشد چطور؟
پاسخ: 
برای مقایسه مقادیر دو فیلد، آنها را در دو متغیر بریزید و با یک دستور شرطی if بررسی کنید، به فرض:
if($pass === $pass_confirm){
echo 'کلمه عبور با تکرار آن همخوانی دارد';
}
برای بررسی میزان کاراکتر یک رشته نیز از strlen و نمونه کد زیر استفاده کنید:
$strlen = strlen($pass);
if($strlen <= 5){
echo 'کلمه عبور نباید کمتر از 6 کاراکتر باشد';
}
نویسنده: حیاتی
۱۰:۰۲ ۱۳۹۱/۱۰/۱۰
ممنون از پاسختون. ولی در مورد سوال اول منظورم فرستادن مقدار فیلد پسورد هنگام تغییر فیلد تکرار پسورد است. یعنی بعد از عبارت onchange در فیلد تکرار پسورد چه عبارتی بنویسیم که علاوه بر مقدار همین فیلد مقدار فیلد پسورد رو هم به تابع بفرسته؟ بازم ممنون از لطفتون.
پاسخ: 
برای این کار باید هم زمان مقادیر دو فیلد را ارسال کنید، این کار چندان سخت نیست، کافی است به فرض در تابع AjaxRequest با دستورات شرطی if بررسی کنید، اگر inputname برابر نام فیلد تکرار کلمه عبور بود، یک پارامتر دیگر به متغیر formvalue اضافه کنید (که این پارامتر مقادیر فیلد کلمه عبور را هم به سرور ارسال کنید) و در غیر این صورت پارامتر دوم خالی باشد، مثال:
	if(inputname == 'userpass_confirm'){
var userpass = "&userpass="+document.getElementById('userpass').value;
}
else{
var userpass = '';
}
var formvalue = inputname+"="+inputvalue.value+userpass;
به این ترتیب هر زمان بر روی فیلد userpass_confirm رویداد onchange اجرا شود، تابع مقادیر فیلد userpass را هم به سرور ارسال می کند.
نویسنده: مهسا
۱۶:۱۵ ۱۳۹۱/۱۰/۳۰
با تشکر از سایت مختصر و مفیدتون
نویسنده: مهرداد
۲۱:۲۲ ۱۳۹۱/۱۱/۰۹
سلام مرسی عالی بود
فقط با این مثال اگه فرممون submit داشته باشه میره به صفحه validate و همون متن های اون صفحه مثل " عبارت وارد شده یک عدد نیست! " چاپ میشه! اما من نمیخوام به هیچ صفحه ای بره باید چی کار کنم! تشکر
پاسخ: 
سلام
آژاکس به تنهایی نمی تواند مانع ارسال فرم شود، باید از جاوا اسکریپت و رویداد onsubmit نیز استفاده کنید، جهت آشنایی بیشتر به مطلبی با عنوان "اعتبار سنجی فرم های وب با جاوا اسکریپت" در قسمت آموزش های کاربردی جاوا اسکریپت مراجعه کنید.
نویسنده: علی
۱۱:۳۵ ۱۳۹۱/۱۱/۱۱
سلام اگه بخوایم وقتی رو دکمه ارسال کلیک کردیم مثلآ بگه فیلد نام کاربری نباید خالی باشد. باید چی کار کنیم؟ مرسی
پاسخ: 
سلام
برای این موارد باید از اعتبار سنجی جاوا اسکریپت استفاده کنید که در بخش آموزش های کاربردی توضیح داده شده است.
نویسنده: ابوالفضل
۰۲:۱۵ ۱۳۹۲/۰۴/۰۳
بابا دمتون گرم خیلی واضح و مفید توضیح میدین
more لطفا پیش از ارسال یادداشت نکات زیر را مد نظر داشته باشید:
- موارد غیرمرتبط با مباحث آموزش ها را در فرم منوی "تماس با ما" مطرح و پاسخ را از طریق ایمیل دریافت کنید.
- به سوالات کلی، مبهم و مشکلاتی که تلاشی برای رفع آن نکرده باشید پاسخ مختصر داده خواهد شد.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین قرار دهید تا امکان تست و بررسی وجود داشته باشد.
- از درج عناوین تبلیغاتی در فیلدها خودداری کنید، در صورتی که یادداشت تبلیغاتی تشخیص داده شود حذف خواهد شد.
- تمام یادداشت ها بررسی و زمانی جهت پاسخگویی در نظر گرفته می شود، لطفا از طرح سوالات متعدد خودداری کنید.





5 × 9
 refresh

آخرین دیدگاه ها
more برای دسترسی سریع به یادداشت مربوطه می توانید از لینک مطلب در کادر زیر استفاده کنید.
form کوثر رحیمی
در:
سلام ا ز راهنماییتون ممنونم من تازه وبلاگم رو درست کردم ۱۲ سالمه هر کاری می کنم فیلم در اون قرار نمیگیره همش این خطا...
۱۳۹۹/۱۰/۲۹

form متین
در:
سلام و خسته نباشید من بخوام داده ای که از قبل موجوده رو با متد پست به یک فایل ارسال کنم چجور میشه؟ یعنی...
۱۳۹۹/۱۰/۲۷

form روشنا
در:
سلام ما یه وبلاگ گروهی داریم مختص املاک فایل های جدید و حتی قالب جدید اصلا اعمال نمیشه . حتی راهنمایی که کرده...
۱۳۹۹/۱۰/۲۷

form علی
در:
من در یک سایت سازی سایت ساختم یه بخش داره به نام اسکریپت دلخواه می خوام یه اسکریپتی بذارم که مثلا یه موسیقی وقتی کاربر...
۱۳۹۹/۱۰/۲۷

form امیرحسین
در:
بله استاد خیلی ممنون، نمیدونستم خودش Optimize رو انجام میده در کل من بعد از ایندکس گذاری ها همیشه سعی کردم جوری که با...
۱۳۹۹/۱۰/۲۶

form امیرحسین
در:
ُسلام وقت بخیر این کووری هم چون اول قسمت WHERE انجام میشه بعد قسمت ON پس این کووری هم با حالت کووری قبلی برابره
۱۳۹۹/۱۰/۲۶

form امیرحسین
در:
سلام استاد وقت بخیر ممنون از پاسخ گویی های قبلی یه سوال دیگه داشتم: این هم هیچ مشکلی نداره و کار میکنه، ایا...
۱۳۹۹/۱۰/۲۵

form محمد بیدل بازه
در:
سلام خسته نباشید ببخشید من توی یک قسمت سایتم تصویری دارم و میخوام سمت راست اون تصویر متن بنویسم ولی نمیشه تا متن رو...
۱۳۹۹/۱۰/۲۵

form سلام
در:
و اینکه یه تگ خوب برای فونت معرفی کنید و یه تگ دیگه که متن رو (تیتر مطلب (تست)) در ادامش بنویسه نه اینکه...
۱۳۹۹/۱۰/۲۴

form سلام
در:
سلام وبسایتم را نگاه کنید از چه تگی استفاده کنم تا فاصله بین تیتر مطلب جدید را کاهش دهم؟ (از خطی به خط...
۱۳۹۹/۱۰/۲۴

form وطن
در:
سلام. خسته نباشید. خیلی گشتم درباره یک خطا یا ایراد فنی که چند روز هست در سایت نوشته شده با پی اچ پی (اسکریپت اولوشن)...
۱۳۹۹/۱۰/۲۴

form حورارمی
در:
سلام. من هنوز نمیدونم تو تنظیمات باید کجا رو بگردم تا قالب وبلاگم رو با عکس مورد علاقه ام تغییر بدم. یا نمیتونم...
۱۳۹۹/۱۰/۲۳

form راشد
در:
این روش خیلی طولانیه در فروشگاه من یک برنامه گرفتم که یه عکس توش اپلود کن بهت یک لینک میده در ظرف چند ثانیه و...
۱۳۹۹/۱۰/۲۱

form باسلام
در:
باسلام خدمت شما عزیز زحمت کش، من مطلب را تا آخر مطالعه کردم. من وبلاگم بازدیدای زیادی داره چون تمام مطالبش رو خودم مینویسم و...
۱۳۹۹/۱۰/۲۱

form محمود
در:
سلام و عرض ادب من در سایتم یک قسمت تب ایجاد کردم، متن ها را که در تب می نویسم پاراگراف بندی نمی شوند....
۱۳۹۹/۱۰/۲۱
form علی آقابیگی
در:
سلام خسته نباشید ببخشید من می خواستم کد جدید در وبلاگم بزارم بعد اشتباهی رفتم در قسمت ویرایش کدها و بعد بیشتر کدها را پاک...
۱۳۹۹/۱۰/۲۰
form محمد
در:
سلام. من میخوام با جاوا اسکریپت یک کدی بنویسم که وقتی کاربر روی یک دکمه ‏ای کلیک کرد، یک کد تصادفی برای شمارش ارسال...
۱۳۹۹/۱۰/۲۰
form پوریا
در:
سلام خسته نباشید، ممنونم بابت توضیحات خوبتون، یه مشکلی داشتم میخواستم ببینم امکانش هست راهنمایی کنید؟ فرض کنید یه اینطور متنی داریم: ...
۱۳۹۹/۱۰/۱۹
form seyedsobhanmansouri
در:
سلام خسته نباشید من سایتمو طراحی کردم اما به این مشکلات بر میخورم اول اینکه هدر سایتم نمایش داده نمیشه اصلا و بعد...
۱۳۹۹/۱۰/۱۹
form رضا
در:
سلام. ممنون بابت مطالب مفیدتون. این نوع جستجو به سئو سایت لطمه نمیزنه؟؟؟ چون در این مدل جستجو، مقدار impression میره بالا ولی...
۱۳۹۹/۱۰/۱۹
form mahdi
در:
سلام استاد عزیز ، پس بنظرتون بجای وقت گذاشتن برای یادگیری لاراول و وردپرس ، وقت بزارم که عمیق تر php و ساختار mvc...
۱۳۹۹/۱۰/۱۹
form علی
در:
سلام و ممنون بابت وبسایت عالیتون داخل بعضی سایت ها دیدید مثلا یه متنی شروع به تایپ شدن می کنه و وقتی کامل شد...
۱۳۹۹/۱۰/۱۸
form محمد
در:
سلام خدمت شما دوست عزیز سوالم این بود میخاستم چندتا مثال از این تابع و چند تابع دیگه از خودتون رو برام مثال بزنید...
۱۳۹۹/۱۰/۱۸
form محمود رنجبر
در:
سلام برادر مشکل من تو همین سایتی هست که فرستادم وقتی گزینه خانه رو کلیک میکنم و بعد دکمه بک گوشی رو میزنم بالای صفحه...
۱۳۹۹/۱۰/۱۷
form mahdi
در:
سلام استاد عزیز ، بعد از آموزس php با لاراول کار کنیم بهتره ؟
۱۳۹۹/۱۰/۱۶
form رضا
در:
آدرس رو براتون گذاشتم دامنه قبلا روی یه وبلاگ میهن بلاگ بود چند ماه میشه که از میهن بلاگ خداحافظی کردم ولی هنوز که هنوزه...
۱۳۹۹/۱۰/۱۴
form نیلو
در:
سلام... ببخشید بعد طراحی قالب قالب شیشه ایم هست یا نه؟؟؟
۱۳۹۹/۱۰/۱۳
form مجتهدزاده
در:
سلام من یه فرمی طراحی کردم که توش قراره تعداد زیاد (حدود 10 الی 50) فیلد رو تو دیتابیس اینسرت کنم. آیا باید...
۱۳۹۹/۱۰/۰۸
form مجتهدزاده
در:
سلام لطفا راهنمایی بفرمایید که چه زمانی قبل از متغیر @ استفاده می شه و کاربردش چیه؟ با تشکر
۱۳۹۹/۱۰/۰۶
form ali
در:
سلام چجوری میشه با php بازی هوب رو طراحی کرد
۱۳۹۹/۱۰/۰۶
form رضا
در:
سلام ممنون از سایت خوبتون ایکون سایتم رو توی دسکتاپ درست نشون میده ولی تو گوشی مشکل داره طبق اموزش شما هم انجام دادم...
۱۳۹۹/۱۰/۰۶
form فرانک دستان
در:
سلام من خیلی دوست دارم روی وبلاگم کد اهنگ بزارم ولی هیچ کدوم نمی یاد بهم گفتن از این کدها دیگه پشتیبانی نمی شه شما...
۱۳۹۹/۱۰/۰۵
form مصطفی
در:
سلام. عملگر @ چه زمانی قبل از یک متغییر میاد؟
۱۳۹۹/۱۰/۰۵
form سما
در:
سلام من وقتی میزنم روی مشاهده وبلاگ صفحه فیلتر برام میاد و نمیتونم وبلاگمو ببینم
۱۳۹۹/۱۰/۰۵
form مجتبی
در:
سلام من وبلاگ بلاگفا دارم کدها و جاوا استیکرها رو میزارم تو قسمتشون ولی همه ی کدها رو یکطرف وبلاگ نشون میده چطوری سمت...
۱۳۹۹/۱۰/۰۵
form matin asadi
در:
سلام ممنون بابت سایت خوبتو من یه مشکلی دارم می خواستم کدی برای این مثال زیر بنویسم ولی بلد نیستم ممنون میشم کمک کنید. ...
۱۳۹۹/۱۰/۰۲
form sahar1999
در:
سلام وقت بخیر چطور میتونم در برنامه نویسی سی شارپ هنگام ایجاد پایگاه داده ی MySql نام پایگاه داده رو از txetbox دریافت کنم؟
۱۳۹۹/۱۰/۰۱
  در انتظار بررسی: ۰
 پاسخگویی به سوالات ممکن است تا 24 ساعت زمان ببرد.