ورود

View Full Version : مشکل با تابع callback_ در فرم ولیدیشن



reza_101010
یک شنبه 03 آبان 1394, 10:52 صبح
سلام و خسه نباشید خدمت دوستان گرامی آقا من به یه مشکل خنده دار بر خورم هر کار هم میکنم حل نمیشه یعنی دونم جوابش کجاست:لبخندساده:

من یه فرم دارم با سه تا تکس باکس کد ملی و رمز عبور(دوبار) و کپچال

موقعی که می خوام فرم را بوسیله فرم ولیدیشن بررسی کنم تکس باکس کد ملی رو با یک callback_ فانشن برسی می کنم که کمتر یابیشتر از 10 رقم نباشه
اما تو دستور if وقتی پارامتر ورودی تابع کال بک رو برسی میکنم اول خالیه ! دوما وقتی میگم اگر طول پارامتر با تابع strlen برابر با 10 نبود تابع در هر صورتی یعنی اگر 9 زقم بود یا 12 رقم بود یا هرچی بود یا خود 10 رقم بود تابع false بر میگردونه و شرط برقرار نمی شه

جالبیش اینجاست کپچال کار می ده

ورژن کدایگنایتر: 3

کنترلر




<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Reg extends CI_Controller {

public function __construct()
{

parent::__construct();
$this->load->model('reg_model');

}


public function index()
{
$this->load->view('header');
$this->load->view('register/reg.php');
$this->load->view('footer');
}
public function aut()
{
$ruls=array(
array(
'field' => 'meli_code',
'label' => 'کد ملی احتیاج است ',
'rules' => 'required|callback_code_meli_check|callback_number iccheck'
),
array(
'field' => 'password',
'label' => 'فیلد پسورد مورد نیاز است ',
'rules' => 'required|matches[re_password]|max_length[10]|callback_passlengh_check'
),
array(
'field' => 're_password',
'label' => 'تکرار کلمه عبور نیاز است ',
'rules' => 'required'
),
array(
'field' => 'capt',
'label' => 'کد امنیتی نیاز است ',
'rules' => 'callback_capt_check|required'
)
);
// $this->form_validation->set_rules("password","مانند هم نیستند",'required|matches_array[input---conf_password]');

$this->form_validation->set_message('required','%s');
$this->form_validation->set_message('matches','پسوردها مانند هم نیستند');
$this->form_validation->set_rules($ruls);
$meli_code=intval($this->input->post('meli_code'));
$password=$this->input->post('password');
$re_password=$this->input->post('re_password');
$capt=$this->input->post('capt');


if ($this->form_validation->run() == false)
{

//var_dump($this->input->post());
$n=strlen($meli_code);
var_dump($meli_code);

$this->load->view('header');
$this->load->view('register/reg.php');
$this->load->view('footer');

}


else
{

$this->reg_model->insert_first_info($meli_code,$password);
$this->session->set_userdata(array('activepanel'=>1));
redirect(site_url('userpanel'), 'refresh');

}




}
function capt_check($str)
{
if ($str != $this->session->userdata('capt'))
{
$this->form_validation->set_message('capt_check', 'کلمه امنیتی اشتباه است');
return FALSE;
}
else
{
return TRUE;
}
}



public function code_meli_check($str='')
{
$str=intval($str);
if(isset($str))
{
$codemeli=$this->reg_model->user_codemeli($str);

if (isset($codemeli)&& $str==$codemeli)
{
$this->form_validation->set_message('code_meli_check', 'کد ملی شما تکراری است ');
return FALSE;
}
}
else
{
return TRUE;
}
}
public function passlengh_check($str='')
{
if (strlen($str)>10 && strlen($str)<4)
{
$this->form_validation->set_message('passlengh_check', 'کلمه عبور نباید کمتر از 4 کاراکتر و بزرکتر از 10 کاراکتر باشد"');
return FALSE;
}
else
{
return TRUE;
}
}

public function numbericcheck($str)
{

$n1=strlen($str);
//$n=var_dump($n);
if ($n1!=10)
{
$this->form_validation->set_message('numbericcheck', 'مقدار شماره ملی حتما باید عددی و حتما باید 10 رقم باشد'."$str");
return FALSE;
}
else
{
return TRUE;
}
}

ویو




<div class="container">
<div class="row">
<div class="col-xs-12 col-sm-12 col-md-12 col-lg-12 " id="alert" style="margin-top: 5px;">


<?php echo validation_errors('<p class="alert-danger">','</p>'); ?>

</div>


</div>

</div>




<div class="row">
<div class="col-xs-12 col-sm-12 col-md-12 col-lg-12" style="margin-top: 30px;">
<h1 id="reg_title">ثبت نام در سایت</h1>
</div>
<form class="form-horizontal form_register" action="<?php echo site_url('reg/aut'); ?>" method="post">
<div class="form-group">
<label for="inputEmail3" class="col-sm-2 control-label">شماره ملی </label>
<div class="col-sm-5">
<input type="text" name="meli_code" class="form-control" id="inputEmail3" placeholder="کد ملی خود را اینجا وارد کنید">
</div>
</div>
<div class="form-group">
<label for="inputPassword3" class="col-sm-2 control-label">رمزعبور</label>
<div class="col-sm-5">
<input type="password" name="password" class="form-control" id="inputPassword3" placeholder="رمزعبور">
</div>
</div>
<div class="form-group">
<label for="inputPassword3" class="col-sm-2 control-label">تکرار رمز عبور</label>
<div class="col-sm-5">
<input type="password" name="re_password" class="form-control" id="inputPassword3" placeholder="تکرار رمز عبور">
</div>
</div>
<div class="form-group">
<label for="inputPassword3" class="col-sm-2 control-label">کلمه امنیتی</label>
<div class="col-sm-5">
<input type="text" class="form-control" name="capt" id="capt" placeholder="کلمه امنیتی را اینجا وارد نمایید " name="capt"/>
<div id="capt_image"></div>
<a class="captch" onclick="return refresh_capt()" href="#">بازسازی کدامنیتی</a>
</div>
</div>

<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<button type="submit" class="btn btn-default">ثبت نام در سایت </button>
</div>
</div>

</form>

</div>
</div>

<script type="text/javascript">
function refresh_capt()
{
$.get("<?php echo site_url('captch/create'); ?>",'',function(data){
$('#capt_image').html(data);

});
}
$(document).ready(function(){
refresh_capt();


});

</script>

plague
یک شنبه 03 آبان 1394, 13:30 عصر
سلام
اول اینکه اون قسمتی که مشکل داره رو بزار نه همه کد رو ( یا حداقل با شماره خط راهنمای یکن که مشکل کدوم خطه ) وگرنه خیلی ها (یکیش من) وقت نمیکنن این همه کد رو بخونن
دوم اینکه این شرط هیچ وقت درست نخواهد بود !

if (strlen($str)>10 && strlen($str)<4)
باید بشه

if (strlen($str)>10 || strlen($str)<4)

مشکل خالی بودن رو هم وقت ندارم بخونم اینهمه کد رو
یه

var_dump($this->input->post())

بزن همون اول تابعت ببین اصلا پست میشن داده هخا یا نه

reza_101010
یک شنبه 03 آبان 1394, 14:32 عصر
ممنون از راهنماییتون

آقا خط شماره 130 کنترلر رو نگاه کن یه تابع هست این پارامتر اولش خالیه درصورتی که وقتی فرم سابمیت میشه مقدارش که مربوط به تکس باکس meli_code هست واسه این تابع ارسال می شه
مقدارش خالی هست که دستور if مورد برسی بشه اگر دستور if را نگاه کنید در این تابع چون مقدار متغیر str خالی میاد واسه تابع شرطی که در خط 135 همیشه false میشه بنابراین فرم ولیدیشن ران میشه !!!


لطفا راهنمایی کنید چرا پارامتر اول تابع خط 130 خالی واسه تابع ارسال میشه
ورژن فریم ورک :3
ممنون

beliefsavior
یک شنبه 03 آبان 1394, 22:38 عصر
سلام

اینو کجا تعریف کردی ؟ numbericcheck اصلا وارد این میشه ؟

plague
سه شنبه 05 آبان 1394, 22:29 عصر
به قول این رفیقمون من اصلا نمیبینم کجا استفادش کردی و جایی فراخوانی نمیشه این تابع numbericcheck !

reza_101010
دوشنبه 11 آبان 1394, 10:24 صبح
سلام خواهشا بخونین سوال من رو که چیه منظورم
من چی پرسیدم شما چی جواب می دین :متعجب:
:متعجب:
جواب سوال خودم : یه باگ جالب در کدایگنایتر اونم اینه که در فرم ولیدیشن شما فقط یک بار می تونین برای هر فیلد callback_ فانشن تعریف کرد اگه خواستین تابع اضافه تعربف کنین باید از کلاس فرم ولیدشن کد ایگنایتر کلاس جدید مشتق کنین اونجا تابع مجزا برای هر فیلد بنویسین


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

من و تو با هم می تونیم مملکت رو بسازیم بحث کل انداختن یا سنجش علمی هم که نیست آخه عجبا اگه بحث سنجش علمیه برید تو stackoverflow که ادم اونجا جرائت نمی کنه نفس بکشه لامصب هر سوالی می پرسی با چه احترامی جواب آدما می دن

محسن شامحمدی
شنبه 16 آبان 1394, 07:55 صبح
سلام خواهشا بخونین سوال من رو که چیه منظورم
من چی پرسیدم شما چی جواب می دین :متعجب:
:متعجب:
جواب سوال خودم : یه باگ جالب در کدایگنایتر اونم اینه که در فرم ولیدیشن شما فقط یک بار می تونین برای هر فیلد callback_ فانشن تعریف کرد اگه خواستین تابع اضافه تعربف کنین باید از کلاس فرم ولیدشن کد ایگنایتر کلاس جدید مشتق کنین اونجا تابع مجزا برای هر فیلد بنویسین


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

من و تو با هم می تونیم مملکت رو بسازیم بحث کل انداختن یا سنجش علمی هم که نیست آخه عجبا اگه بحث سنجش علمیه برید تو stackoverflow که ادم اونجا جرائت نمی کنه نفس بکشه لامصب هر سوالی می پرسی با چه احترامی جواب آدما می دن


شما خودتو ناراحت نکن.ضمنا codeigniter ۳ خیلی‌ باگ داره.من چندین بار به bug هاش برخورد کردم و در آخر به ۲.۲ downgrade کردم.