mojtabapordel

راهنمایی در مورد اعتبارسنجی خاص در فرم ها (RS Form یا Breezing Forms)

13 پست در این موضوع

سلام دوستان

میخوام توی یک سایت دو نوع ثبت نام داشته باشم: ثبت نام معمولی و ویژه. با استفاده از فرم سازهای RS Form یا Breezing Forms میشه دوتا فرم ثبت نام مختلف ایجاد کرد که هردوتا به ثبت نام خود جوملا متصل باشن؟ (یعنی کاربر با پر کردن هرکدوم از اون ها که دارای فیلدهای متفاوتی هستند، توی جوملا ثبت نام بشه)؟

اما در مورد فرم ثبت نام ویژه و اعتبارسنجی موردنظر:

یک فرم ثبت نام میخوام طراحی کنم که یکی از فیلدهاش یک نوع اعتبار سنجی به خصوص لازم داره.

ما 1000 تا کارشناس داریم که هرکدوم یک کد کارشناسی مخصوص به خودشون دارن (ما کل کدها رو توی یک فایل اکسل داریم). میخوایم این 1000 تا کارشناس که در سراسر کشور پراکنده اند، بیان و توی سایت ثبت نام کنن. موقع ثبت نام باید توی یکی از فیلدها کد کارشناسیشون رو وارد کنن و فرم باید کد وارد شده رو با کدهای توی بانکمون مقایسه کنه، اگر چنین کدی وجود داشت کاربر بتونه ثبت نام رو ادامه بده. درواقع میخوایم برای عضویت ویژه سایت، فقط کارشناس ها بتونن ثبت نام کنن و فرم با این کار بتونه از ثبت نام بقیه افراد به عنوان کارشناس جلوگیری کنه.

با RS Form یا Breezing Forms میشه این کار رو کرد؟ چجوری باید بانک کدها رو به فرم معرفی کرد؟

ممنون

Share this post


Link to post
Share on other sites
آموزش ووکامرس قالب جوملا قالب وردپرس قالب رایگان وردپرس قالب رایگان جوملا هاست نامحدود هاست جوملا هاست لاراول هاست وردپرس هاست ارزان هاست ربات تلگرام خرید دامنه آموزش ساخت ربات تلگرام با php آموزش لاراول آموزش cPanel آموزش php آموزش فرم ساز RSform آموزش ساخت ربات جذب ممبر آموزش ساخت ربات دوستیابی آموزش ساخت ربات فروشگاهی برای ووکامرس آموزش طراحی سایت داینامیک با php آموزش بخش پشتیبانی با rsticket

با rsform راحت تر هست تا breezing

rsform یک پلاگین داره که با فعال کردن ان می تونید با پر شدن فرم هم زمان کاربر هم در جوملا ثبت نام بشه ولی نمی شه به گروه خاصی ارتقا پیدا کنه . همان گروه پیش فرض جوملا خواهد بود (البته یکم روی این پلاگین تغییرات بدید شدنی هست.)

برای قسمت اعتبار سنجی . راه راحتر ان این هست یک table توی دیتابیس ایجاد کنید. بعد دستی فایل exel را از طریق phpmyadmin وارد ان جدول کنید و یک validation rule با این راهنما ایجاد کنید:

Unique email address validation rule

فقط این خط را ببنید:

// This query checks the #__rsform_submission_values table if the current field

بجای چک کردن جدول rsform_submission_values به جدول خودتان تغییر بدید

این چند خط هم نیاز نیست:

// The following will check if the current value is indeed an email

if (!self::email($value, $extra, $data)) {

return false;

}

Share this post


Link to post
Share on other sites

سلام

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

سناریوی من اینه:

من یک table توی دیتابیس ساختم به اسم _karshenasi_codes

توی این جدول یک Column ایجاد کردم به اسم codes

توی این ستون کدهام رو قرار دادم

حالا میخوام یک کد اعتبارسنجی بنویسم که وقتی کاربر یک عدد توی فیلد کد کارشناسی نوشت، فرم این عدد رو با اون جدول _karshenasi_codes توی دیتابیس مقایسه کنه و اگر عدد وجود داشت اجازه ثبت نام بده و گرنه اجازه نده.

توی سایت سازنده این کد برای اعتبار سنجی اومده:

public static function registrationCode($value, $extra = null, $data = null) {
 // Define an array of valid codes
 $validCodes = array('AAA', 'BBB', 'CCC', 'DDD');

 // If we find the $value in our array of $validCodes, the code is correct.
 // Please note that this is case sensitive, eg. if the user submitted "AAA" it will work, but "aaa" will not.
 if (in_array($value, $validCodes)) {
   return true;
 } else {
   return false;
 }
}

این کد به دیتابیس وصل نمیشه و فقط مقادیر AAA, BBB, CCC, DDD رو چک میکنه.

توی فرومشون این کد رو برای یکی از کاربرا اینجوری تغییر دادن تا به دیتابیس متصل بشه:

public static function registrationCode($value, $extra = null, $data = null) {

   $validCodes = array('AAA', 'BBB', 'CCC');   // Define the codes in the array here, Please use the correct syntax!
   $db = JFactory::getDBO();
   $db->setQuery("SELECT COUNT(`FieldValue`) FROM #__rsform_submission_values WHERE `FieldValue`='".$value."'");
   $tmp = $db->loadResult();    
   foreach ($validCodes as $code) {
       if (strtolower($value) == strtolower($code) && $tmp == 0) {
       return true;
       }
   }
       // When all of the above fails, the supplied code is incorrect, so we have to return false.
       return false;
} 

حالا من این کد رو باید چجوری تغییر بدم تا با سناریوی من جور دربیاد؟ آخه باز هم توی این کد همون مقادیر AAA, BBB, CCC, DDD اومده.

ممنون

Share this post


Link to post
Share on other sites

این کار رو براحتی با ایجاد یک اعتبارسنجی جدید میتونید انجام بدید با توجه به توضیحاتی که دادید با کد زیر که نوشتم میتونید انجام بدید

به مسیر components/com_rsform/helpers/validation.php برید و متد زیر رو داخل فایل validation.php قرار بدید

  function arasjoomla($value,$extra=null,$data=null)
   {
       $db = JFactory::getDbo();
       $sql = "SELECT codes FROM #__karshenasi_codes WHERE codes=$value";
       $db->setQuery($sql);
       $result = $db->loadResult(); 
       if($result){
           return true;
       }else{
           return false;
       }

   } 

با اینکار یه اعتبارسنجی جدید با نام arasjoomla به بخش اعتبارسنجیهای شما اضافه میشه و برای فیلد مورد نظر میتونید اون اعتبارسنجی رو اعمال کنید

Share this post


Link to post
Share on other sites

آقا صابر یک دنیا ممنونم

مشکلم حل شد

فقط یک سوال دیگه اگر لطف کنی جواب بدی

من چجوری میتونم کل کدهام رو (که توی یک فایل اکسل هست) توی همون جدولی که گفتم ایمپورت کنم؟

بازهم ممنونم

Share this post


Link to post
Share on other sites

برای ایمپورت یا باید فایل اکسل رو به sql تبدیل کنید و از همون phpmyadmin استفاده کنید و یا از افزونه هایی که برای اینکار هست استفاده کنید با کدنویسی php هم میشه

Share this post


Link to post
Share on other sites
این کار رو براحتی با ایجاد یک اعتبارسنجی جدید میتونید انجام بدید با توجه به توضیحاتی که دادید با کد زیر که نوشتم میتونید انجام بدید

به مسیر components/com_rsform/helpers/validation.php برید و متد زیر رو داخل فایل validation.php قرار بدید

  function arasjoomla($value,$extra=null,$data=null)
   {
       $db = JFactory::getDbo();
       $sql = "SELECT codes FROM #__karshenasi_codes WHERE codes=$value";
       $db->setQuery($sql);
       $result = $db->loadResult(); 
       if($result){
           return true;
       }else{
           return false;
       }

   } 

با اینکار یه اعتبارسنجی جدید با نام arasjoomla به بخش اعتبارسنجیهای شما اضافه میشه و برای فیلد مورد نظر میتونید اون اعتبارسنجی رو اعمال کنید

سلام این مطلبی که گذاشتید یکی از مشکلات من رو حل کرد ممنونم. می خواستم لطف کنید بهم بگید اگر بخواهم اون فیلد علاوه بر اینکه با ستون یک جدول (مشابه همین جدول کد کارشناسی)

مقایسه بشه،چک کنم که این کد فقط یک بار ثبت بشه و یکتا باشه،میشه بگید چه کدی به کد بالا اضافه کنم که هر دو همزمان چک بشه.

یعنی می خوام کد کارشناسی که کاربر وارد میکنه اولا حتما توی اون جدول کد ها موجود باشه و دوم اینکه قبلا کسی با این کد ثبت نام نکرده باشه.

ممنونم

Share this post


Link to post
Share on other sites
سلام این مطلبی که گذاشتید یکی از مشکلات من رو حل کرد ممنونم. می خواستم لطف کنید بهم بگید اگر بخواهم اون فیلد علاوه بر اینکه با ستون یک جدول (مشابه همین جدول کد کارشناسی)

مقایسه بشه،چک کنم که این کد فقط یک بار ثبت بشه و یکتا باشه،میشه بگید چه کدی به کد بالا اضافه کنم که هر دو همزمان چک بشه.

یعنی می خوام کد کارشناسی که کاربر وارد میکنه اولا حتما توی اون جدول کد ها موجود باشه و دوم اینکه قبلا کسی با این کد ثبت نام نکرده باشه.

ممنونم

برای اینکه کد یکتا باشه باید چک کنید ببینید که قبلا در دیتابیستون اگر ثبت شده باشه اجازه ثبت مجدد رو ندید که در واقع در کد بالا جای true و false رو عوض کنید همون میشه

    function arasjoomla($value,$extra=null,$data=null)
   {
       $db = JFactory::getDbo();
       $sql = "SELECT codes FROM #__karshenasi_codes WHERE codes=$value";
       $db->setQuery($sql);
       $result = $db->loadResult(); 
       if($result){
           return false;
       }else{
           return true;
       }

   }

Share this post


Link to post
Share on other sites
برای اینکه کد یکتا باشه باید چک کنید ببینید که قبلا در دیتابیستون اگر ثبت شده باشه اجازه ثبت مجدد رو ندید که در واقع در کد بالا جای true و false رو عوض کنید همون میشه

    function arasjoomla($value,$extra=null,$data=null)
   {
       $db = JFactory::getDbo();
       $sql = "SELECT codes FROM #__karshenasi_codes WHERE codes=$value";
       $db->setQuery($sql);
       $result = $db->loadResult(); 
       if($result){
           return false;
       }else{
           return true;
       }

   }

ممنونم از پاسختون اما این راهی که گفتید داره یکتا بودن تو جدولی که کدها قرار داره رو چک میکنه،درسته؟

من می خوام کسی داره ثبت نام میکنه،کدش رو اول توی جدول karshenasi_codes (جدولی که فقط یه ستون داره حاوی کدهای معتبر کارشناسی)چک کنم بینم اصلا همچین کدی معتبر هست و وجود داره(که تا اینجا اوکی هست و مشکلی ندارم)

بعد از اون می خوام چک کنم توی جدولی که اطلاعات فرم ثبت نام قراره ثبت بشه کس دیگه ای با این کد ثبت نام نشده باشه.یعنی این کد توی جدول مربوط به rsform یکتا باشه.

ولی نمی دونم باید کدش رو چطور به کد قبلی اضافه کنم.

ممنون میشم راهنمایی کنید

Share this post


Link to post
Share on other sites

از کد زیر اسفاده کنید

     function arasjoomla($value,$extra=null,$data=null)
   {
       $db = JFactory::getDbo();
       $sql = "SELECT codes FROM #__karshenasi_codes WHERE codes=$value";
       $db->setQuery($sql);
       $result = $db->loadResult(); 
       if($result){
           $query = "SELECT FormId FROM #__rsform_submission_values WHERE FieldValue=$value";
           $db->setQuery($query);
           $result = $db->loadResult();
           if($result){
               return false;
           }else{
               return true;
           }  

       }else{
           return false;
       }

   }

Share this post


Link to post
Share on other sites
از کد زیر اسفاده کنید

     function arasjoomla($value,$extra=null,$data=null)
   {
       $db = JFactory::getDbo();
       $sql = "SELECT codes FROM #__karshenasi_codes WHERE codes=$value";
       $db->setQuery($sql);
       $result = $db->loadResult(); 
       if($result){
           $query = "SELECT FormId FROM #__rsform_submission_values WHERE FieldValue=$value";
           $db->setQuery($query);
           $result = $db->loadResult();
           if($result){
               return false;
           }else{
               return true;
           }  

       }else{
           return false;
       }

   }

خیلی خیلی ممنون از راهنمایی دقیقتون

Share this post


Link to post
Share on other sites

سلام . وقت بخیر

من از کد validation زیر تو RSform وارد میکنم ولی متاسفانه این خطا رو میده . ممنون میشم راهنمایی بفرمایید

خطا : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

 

کدی که من وارد validation کردم

     function arasjoomla($value,$extra=null,$data=null)
   {
       $db = JFactory::getDbo();
       $sql = "SELECT codes FROM #__karshenasi_codes WHERE codes=$value";
       $db->setQuery($sql);
       $result = $db->loadResult(); 
       if($result){
           $query = "SELECT FormId FROM #__rsform_submission_values WHERE FieldValue=$value";
           $db->setQuery($query);
           $result = $db->loadResult();
           if($result){
               return false;
           }else{
               return true;
           }  

       }else{
           return false;
       }

   }

Share this post


Link to post
Share on other sites

سلام دوستان بنده هم همین مشکل رو دارم اگر میشه کمک کنید

سناریو بنده به این شکل هست :

کاربر ابتدا در فرم اول پرداخت انجام میده و کد رو یاداشت میکنه

در فرم دوم در مرحله اول باید کد پرداخت رو وار کنه با کد ملیش

میخوام فرم برای ثبت شدن بتونه بخونه که :

1- کاربر پرداختش بدرستی انجام شده

2- کاربر فقط یکبار بتونه از اون کد استفاده کنه و برای ثبت نام بعدی اون کد قابل استفاده نباشه

ممنون میشم کمک کنید

Share this post


Link to post
Share on other sites

برای ارسال نظر یک حساب کاربری ایجاد کنید یا وارد حساب خود شوید

برای اینکه بتوانید نظر ارسال کنید نیاز دارید که کاربر سایت شوید

ایجاد یک حساب کاربری

برای حساب کاربری جدید در انجمن ما ثبت نام کنید. عضویت خیلی ساده است !


ثبت نام یک حساب کاربری جدید

ورود به حساب کاربری

دارای حساب کاربری هستید؟ از اینجا وارد شوید


ورود به حساب کاربری