ورود

View Full Version : رفرش شدن کد کپچا با pjax



mohamadali1374
چهارشنبه 22 اردیبهشت 1395, 21:30 عصر
سلام
کدی رو نوشتم که یه کد امنیتی captcha رو نمایش میده.
عملیات ذخیره سازی داده ها در دیتابیس با pjax انجام میدم .
مشکل اینجاست که میخوام در سمت سرور چک کنم اگه کد کپچا درست نبود کد کپچا refresh بشه (بدون اینکه صفحه دوباره لود بشه).
لطفا کمک کنید:افسرده:

mohamadali1374
یک شنبه 03 مرداد 1395, 21:52 عصر
سلام
خوب مثل اینکه کسی جواب رو نمیدونه ...
خوب راهی پیدا کردم میذارم اینجا اگه کسی به این مورد برخورد کرد:

در ویو با کد زیر کپچا رو نشون بدید :


<?=$form->field($model,'verifyCode')->widget(Captcha::className(),[
'captchaAction' =>'captcha',
'template' => '{input} {image} <a href="javascript:;" id="refresh-cap">بارگذاری مجدد تصویر</a></div>',
]) ; ?>




در کنترولری که میخواهید صحت کپچا رو بررسی کنید:


public function actions()
{
return array(
'captcha' => array(
'class' => 'yii\captcha\CaptchaAction',
'fixedVerifyCode' => YII_ENV === 'test5' ? 'testme5' : null,
),
);
}

و با کد زیر صحت کپچا چک میشه :



$cv=$this->createAction('captcha');
if(empty($captcha)){
echo "کد امنیتی را وارد نمایید".'</br>';
$chekcap=0;
exit();
}elseif(!$cv->validate($captcha,true)){
echo "کد امنیتی اشتباه است";
echo "<script>recaptcha();</script>";
exit();
}

خوب $captcha مقدار تکست باکسی هست که دراون کپچا وارد شده
و جواب پرسش دومم یعنی اینکه کپچا بصورت ایجاکس لود بشه اینکه یه کد جاوا اسکریپت رو echo کردم .
این کد جاوااسکریپت رو میتونید در ویو قرار بدید:

function recaptcha(){
$("img[id$='verifycode-image']").trigger('click');
}
البته id تصویر امنیتی رو با Inspect-Element بدست بیارید و به جای verifycode-image جایگزین کنید.
البته چک کردن کپچا در کنترلر و لود تصویر امنیتی بصورت خودکار زمانی کاربرد داره که اطلاعات رو بصورت ajax دریافت و پردازش میکنید