Php 设置_值不起作用

Php 设置_值不起作用,php,codeigniter,Php,Codeigniter,我在控制器中加载了表单验证库,表单验证本身正在工作,但使用set_value()时,它不会填充表单字段。以下是控制器中的代码: function addUser() { $this->form_validation->set_rules('firstName', 'firstname', 'trim|required|max_length[30]'); $this->form_validation->set_rules('surname', 'surnam

我在控制器中加载了表单验证库,表单验证本身正在工作,但使用set_value()时,它不会填充表单字段。以下是控制器中的代码:

function addUser()
{
    $this->form_validation->set_rules('firstName', 'firstname', 'trim|required|max_length[30]');
    $this->form_validation->set_rules('surname', 'surname', 'trim|required|max_length[30]');
    $this->form_validation->set_rules('emailAddress', 'email address', 'trim|required|valid_email|is_unique[users.email]|max_length[255]');
    $this->form_validation->set_rules('password', 'password', 'trim|required|max_length[20]|min_length[5]');
    $this->form_validation->set_rules('passwordVerify', 'password verification', 'trim|required|max_length[20]|min_length[5]');

    if($this->form_validation->run() === FALSE) {
        $this->session->set_flashdata('formValidationError',  validation_errors('<p class="error">', '</p>'));
        redirect('/member/register');
    } else {
        echo 'Passed';
    }
}
函数addUser()
{
$this->form_validation->set_规则('firstName','firstName','trim | required | max_length[30]);
$this->form_validation->set_规则(‘姓氏’、‘姓氏’、‘修剪|必需|最大长度[30]);
$this->form_validation->set_rules('emailAddress','email address','trim | required | valid | email |是唯一的[users.email]|最大长度[255]|;
$this->form_validation->set_rules('password','password','trim | required | max|u length[20]| min|u length[5]);
$this->form_validation->set_rules('passwordVerify','passwordVerify','trim | required | max|u length[20]| min|u length[5]);
如果($this->form\u validation->run()==FALSE){
$this->session->set_flashdata('formValidationError',validation_errors('

','

'); 重定向('/member/register'); }否则{ 回声“通过”; } }
以下是视图中的代码:

    <?php echo $this->session->flashdata('formValidationError'); ?>
<form method="POST" action="<?php echo site_url('member/addUser'); ?>">
    <fieldset>
        <legend>Create a FREE account</legend>
        <div>
            <label for="firstName">Firstname</label>
            <input type="text" name="firstName" value="<?php echo set_value('firstName'); ?>" maxlength="30">
        </div>

        <div>
            <label for="surname">Surname</label>
            <input type="text" name="surname" value="<?php echo set_value('surname'); ?>" maxlength="30">
        </div>

        <div>
            <label for="emailAddress">Email Address</label>
            <input type="text" name="emailAddress" value="<?php echo set_value('emailAddress'); ?>" maxlength="255">
        </div>

        <div>
            <label for="password">Password</label>
            <input type="password" name="password" maxlength="20">
        </div>

        <div>
            <label for="passwordVerify">Verify Password</label>
            <input type="password" name="passwordVerify" maxlength="20">
        </div>

        <button type="submit">Register</button>
    </fieldset>
</form>


它不起作用,因为您正在使用重定向

而不是

    $this->session->set_flashdata('formValidationError',  validation_errors('<p class="error">', '</p>'));
    redirect('/member/register');
你会看到的


set\u value
要求表单验证在同一上下文中运行。。。重定向时会丢失此上下文。

我对
redirect()
也有同样的问题,我使用
$this->session->set_flashdata('field','value')
在重定向之前存储数据,因为在我的情况下无法加载视图,并将其重新用作输入标记的值,

怎么会不起作用?它应该在验证失败后重新填充字段。如果表单填写不正确,为什么要重定向到另一个页面?如果我错过了一个字段,我需要再次注册吗?:)@DamienPirsy表单字段未填充。如果用户缺少字段,则会将其重定向回注册页面。我重定向的原因是,我不希望用户在地址栏中看到/register/addUser url(如果我加载视图而不是重定向,就会出现这种情况)。我不想加载视图,因为我想保留url。例如,我不希望用户在出现错误时在地址栏中看到/members/addUser,我希望他们返回到/register,我想我必须为此设置闪存数据?问题是,当用户在发送表单并收到错误后尝试重新加载页面时,他们会看到典型的“是否要再次发送post数据?”类型的消息,但这并不好。最好在执行post请求后重定向用户。
    $this->load->view('member_register_view');