Zend and ajax form leading to "not found in haystak"

I have a project with zend framework usign zend_form

I have 3 location fields in my registration form (country [named as $ ostan in code] city [named as $ shahr in code] and region [named as $ mahal in code])

I want these three to be updated using ajax, for this I added one field in the form that allows people to choose (for example, country), and as soon as they select the ajax request, the data is extracted from the server and attached in the form (for example, in city).

but when it comes to checking, I get this error for the city and region (which are loaded by ajax ly)

'12' was not found in the haystack

and 12 is the identifier number of the selected city in the db table. (12 - value of the selected option that it will use to update the database)

this is my form

<?php
class listab_Form_NewUser extends Zend_Form
{
public function init()
{

    $q = Doctrine_Query::create()
            ->from('listab_Model_Locs l')
            ->where('l.valed = ?','0');
    $result = $q->fetchArray();

   $db = Zend_Db::factory('Pdo_Mysql', array(
   'host' => 'localhost' ,
   'username' => 'root',
   'password' => '',
   'dbname' => 'listab',
   'charset' => 'utf8'
        ));

    $this->addPrefixPath("listab_Model",'listab/Model/','decorator');
    // initialize form
    $this->setAction('/user/new')
         ->setMethod('post');

    // create text input for name 
    $user = new Zend_Form_Element_Text('username');
    $user->setLabel('نام کاربری:')
         ->setRequired()
         ->addValidator('StringLength',false,array('min'=>4,'max'=>20,
                                                    'messages'=>array(
                                                            Zend_Validate_StringLength::INVALID   => "کلمه غیر مجاز، لطفا یک کلمه صحیح وارد کنید.",
                                                            Zend_Validate_StringLength::TOO_SHORT => "'%value%' کمتر از %min% کارکتر (حداقل) است.",
                                                            Zend_Validate_StringLength::TOO_LONG  => "'%value%' بیشتر از %max% کارکتر (حداکثر).",    
                                                    )))
         ->addValidator('Regex',false,array('pattern'=>"/^[a-z0-9]+([._]{0,1})[a-z0-9]+$/",
         'messages'=> array(Zend_Validate_Regex::NOT_MATCH => 'تنها میتوانید از حروف انگلیسی و کاراکترهای جدا کننده ( underline و نقطه) استفاده کنید. به این صورت که کاراکتر های جدا کننده اول و آخر نام کاربری نمیتوانند باشند.')))
         ->addValidator("Db_NoRecordExists",false,array(
        'table' => 'users',
        'field' => 'username',
        'adapter' => $db ,
        'messages' => array(
    'noRecordFound' => "No record matching '%value%' was found",
    'recordFound'  => "نام کاربری %value% قبلا ثبت شده است."
    )));;




    $password = new Zend_Form_Element_Password('password');
    $password->setRequired()
            ->addValidator('StringLength',false,array('min'=>4,'max'=>100,
                                                    'messages'=>array(
                                                            Zend_Validate_StringLength::INVALID   => "کلمه غیر مجاز، لطفا یک کلمه صحیح وارد کنید.",
                                                            Zend_Validate_StringLength::TOO_SHORT => "'%value%' کمتر از %min% کارکتر (حداقل) است",
                                                            Zend_Validate_StringLength::TOO_LONG  => "'%value%' بیشتر از %max% کارکتر (حداکثر).",    
                                                    )))
                ->setLabel('رمز عبور:');

    $passconf = new Zend_Form_Element_Password('passconf');
    $passconf->addValidator('StringLength',false,array('min'=>4,'max'=>100,
                                                    'messages'=>array(
                                                            Zend_Validate_StringLength::INVALID   => "کلمه غیر مجاز، لطفا یک کلمه صحیح وارد کنید.",
                                                            Zend_Validate_StringLength::TOO_SHORT => "'%value%' کمتر از %min% کارکتر (حداقل) است",
                                                            Zend_Validate_StringLength::TOO_LONG  => "'%value%' بیشتر از %max% کارکتر (حداکثر).",    
                                                    )))
            ->setLabel('تکرار رمز عبور:')
            ->setRequired()
            ->addValidator('Identical', false, array('token' => 'password','messages'=>array(
                                                     'notSame' => 'دو مقدار وارد شده یکی نیستند.' )));

    $subreg = new Zend_Form_Element_Submit('subreg');
    $subreg->setLabel('ثبت نام')
           ->setOrder(100)
           ->setOptions(array('class' => 'submit'));


    $email = new Zend_Form_Element_Text('email');
    $email->setLabel('ایمیل:')
            ->setOptions(array('size' => '50'))
            ->setRequired()
            ->addValidator('EmailAddress',false,array(
                'messages'=>array(
    Zend_Validate_EmailAddress::INVALID            => "نوع ورودی غیر مجاز است. باید یک کلمه وارد کنید.",
    Zend_Validate_EmailAddress::INVALID_FORMAT     => "'%value%' یک ایمیل با فرمت استاندارد نیست.",
    Zend_Validate_EmailAddress::INVALID_HOSTNAME   => "'%hostname%' یک آدرس هاست معتبر در ایمیل'%value%'نیست.",
    Zend_Validate_EmailAddress::INVALID_MX_RECORD  => "'%hostname%' یک MX رکورد مجاز برای'%value%' نیست.",
    Zend_Validate_EmailAddress::INVALID_SEGMENT    => "'%hostname%' is not in a routable network segment. The email address '%value%' should not be resolved from public network",
    Zend_Validate_EmailAddress::DOT_ATOM           => "'%localPart%' can not be matched against dot-atom format",
    Zend_Validate_EmailAddress::QUOTED_STRING      => "'%localPart%' can not be matched against quoted-string format",
    Zend_Validate_EmailAddress::INVALID_LOCAL_PART => "'%localPart%' is no valid local part for email address '%value%'",
    Zend_Validate_EmailAddress::LENGTH_EXCEEDED    => "'%value%' exceeds the allowed length"
)))
    ->addValidator("Db_NoRecordExists",false,array(
        'table' => 'users',
        'field' => 'email',
        'adapter' => $db ,
        'messages' => array(
    'noRecordFound' => "No record matching '%value%' was found",
    'recordFound'  => "ایمیل %value% قبلا ثبت شده است."
    )));

    $jens = new Zend_Form_Element_Select('jens');
    $jens->setRequired(true)
        ->addFilter('HtmlEntities')
        ->addFilter('StringTrim')
        ->setLabel('جنسیت:');
    $jens->addMultiOption('0','انتخاب کنید');
    $jens->addMultiOption('1','مذکر');
    $jens->addMultiOption('2','مونث');
    $jens->addValidator('Regex',false,array('pattern'=>"/^(?!0$)/",
         'messages'=> array(Zend_Validate_Regex::NOT_MATCH => 'لطفا یکی از موارد را انتخاب کنید.')));

    $ostan = new Zend_Form_Element_Select('ostan');

    $ostan->setRequired(true)
        ->addFilter('HtmlEntities')
        ->addFilter('StringTrim')
        ->setAttrib('onchange', 'shahr2(\'/ajax-shahr.php\')')
        ->setLabel('استان:');   


    $ostan->addValidator('Regex',false,array('pattern'=>"/^(?!0$)/",
         'messages'=> array(Zend_Validate_Regex::NOT_MATCH => 'لطفا یکی از موارد را انتخاب کنید.')));
    $ostan->addMultiOption('0','انتخاب کنید');

    foreach($result as $key => $value){
        $ostan->addMultiOption($value['code'], $value['makan']);
    }

    $shahr = new Zend_Form_Element_Select('shahr');

    $shahr->addFilter('HtmlEntities')
        ->addFilter('StringTrim')
        ->setLabel('شهر :');   
    $shahr->addValidator('Regex',false,array('pattern'=>"/^(?!0$)/",
         'messages'=> array(Zend_Validate_Regex::NOT_MATCH => 'لطفا یکی از موارد را انتخاب کنید.')));

    $shahr->addMultiOption('0','انتخاب شهر');


    $mahal = new Zend_Form_Element_Select('mahal');
    $mahal->setValidators(array(array('Regex',false,array('pattern'=>"/^(?!0$)/",
         'messages'=> array(Zend_Validate_Regex::NOT_MATCH => 'لطفا یکی از موارد را انتخاب کنید.')))));

    $mahal->addFilter('HtmlEntities')
        ->addFilter('StringTrim')
        ->setLabel('محل:');
    $mahal->addMultiOption('0','انتخاب محل');       


    $captcha = new Zend_Form_Element_Captcha('Captcha', array(
        'captcha' => array(
        'messages'=> array('badCaptcha' => 'عبارت وارد شده صحیح نمیباشد.',
                            'missingValue'=>'این مقدار نمیتواند خالی باشد.'),
        'captcha' => 'Image',
        'wordLen' => 6,
        'timeout' => 300,
        'width'   => 300,
        'height'  => 100,
        'FontSize' => '30' ,
        'imgUrl'  => '/captcha',
        'imgDir'  => APPLICATION_PATH . '/../public/captcha',
        'font'    => APPLICATION_PATH .
                '/../public/fonts/LiberationSansRegular.ttf',
    )
));
    $captcha->setLabel('عبارت زیر را وارد کنید');

    $agree = new Zend_Form_Element_Checkbox('Select');
    $agree->setLabel('من به قوانین اعلامی سایت احترام گذاشته آنها را رعایت خواهم کرد.')
            ->setRequired(true);

    $agree->addValidator('Regex',false,array('pattern'=>"/^1$/",
         'messages'=> array(Zend_Validate_Regex::NOT_MATCH => 'قبول قوانین سایت برای ثبت نام الزامیست.')));


    $hash = new Zend_Form_Element_Hash('hash');
    $hash->setSalt('sdddd');

    $this->addElement($subreg)
         ->addElement($user)
         ->addElement($email)
         ->addElement($password)
         ->addElement($passconf)
         ->addElement($jens)
         ->addElement($ostan)
         ->addElement($shahr)
         ->addElement($mahal)
         ->addElement($captcha)
         ->addElement($hash)
         ->addElement($agree)
        ;
}  
}

ajax , , , zend_form, , ,

+3
1

Zend_Form_Element_Select, java- script,

$select->setRegisterInArrayValidator(false);
+4

All Articles