CodeIgniter: проблема проверки формы - PullRequest
0 голосов
/ 29 августа 2011

Я использую CodeIgniter для проверки формы. После того, как форма отправлена ​​и есть какая-то ошибка проверки, я хочу сформировать, чтобы запомнить значения полей ввода. В настоящий момент я проверяю все поля сразу, и все работает нормально (т.е. я могу получить значения полей ввода в форме, если проверка не удалась.

Следующий код работает нормально:

Вид:

<?php if ( form_error('name') ) { ?>
    <input type="text" class="error" name="name" value="<?php echo set_value('name'); ?>"/>
    <?php echo form_error('name', '<p class="error">', '</p>'); 
} else { ?>
    <input type="text" name="name" value="<?php echo set_value('name'); ?>"/>
<?php } ?>

Контроллер:

function validate_form{

    $this -> form_validation -> set_rules( 'name', 'name', 'trim|required|' );
    $this -> form_validation -> set_rules( 'email', 'Email', 'trim|required|callback_email_available' );
    $this -> form_validation -> set_rules( 'captcha', 'captcha', 'callback_check_captcha' );

    if ( $this -> form_validation -> run() === FALSE ) 
    {
        $this -> load -> view( 'signup_view' );
    }
    else
    {
        //process form and insert to db.
    }   
}

Моя проблема:

Теперь вместо подхода, описанного выше (для проверки всех полей одновременно), я хочу сначала проверить только одно поле 'captcha'. Так что, если поле капчи подтверждено, то я хочу проверить другие поля. В противном случае я хочу вернуться к форме и отобразить ошибку капчи, но я хочу сохранить другие значения полей в полях ввода, чтобы пользователю не приходилось вводить снова.

Я пытаюсь выполнить следующий код, но он не работает нормально. Например, когда я отправляю форму, поля не запоминают значения. Код представления такой же, как указано выше.

Код, который я пытаюсь и не работает:

$this -> form_validation -> set_rules( 'captcha', 'captcha', 'callback_check_captcha' );

if ( $this -> form_validation -> run() === FALSE ) 
    {
        $this -> load -> view( 'signup_view' );
    }   
else
    {
    $this -> form_validation -> set_rules( 'name', 'Name', 'trim|required|' );
    $this -> form_validation -> set_rules( 'email', 'Email', 'trim|required|callback_email_available' );

        if ( $this -> form_validation -> run() === FALSE ) 
            {
                $this -> load -> view( 'signup_view' );
            }
        else
            {
            //process form and insert to db.
        }

    }

Ответы [ 3 ]

2 голосов
/ 29 августа 2011

Попробуйте вместо этого:

set_value('name', $this->input->post('name'));

По странной причине, иногда вы можете получить значение только с помощью $this->input->post(), но не с помощью $_POST[].

1 голос
/ 06 сентября 2012

Лучший способ передать значение для формирования и отображения вручную

контроллер

function validate_form{
 $this -> form_validation -> set_rules( 'name', 'name', 'trim|required|' );
 $this -> form_validation -> set_rules( 'email', 'Email',  'trim|required|callback_email_available' );
 $this -> form_validation -> set_rules( 'captcha', 'captcha', 'callback_check_captcha' );


 $repopulationData = $this->input->post(NULL, TRUE);

 if ( $this -> form_validation -> run() === FALSE ) 
 {
    $this -> load -> view( 'signup_view',$repopulationData );
 }
 else
{
    //process form and insert to db.
}   
}

Просмотр

<form action='action page URL' method='post'>
<input type='text' name='name' value='<?php echo $name ?>'/>
<input type='text' name='email' value='<?php echo $email ?>'/>
<input type='text' name='captcha' value='<?php echo $captcha ?>'/>
<input type='submit' value='Save'/>
1 голос
/ 29 августа 2011

Значения запоминаются, только если вы проверили их через проверку формы. Поэтому добавьте каждое поле в форму проверки без каких-либо правил. Таким образом, они не проверяются на своих условиях (правилах), но будут отображаться в полях ввода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...