【问题标题】:set_value not working设置值不起作用
【发布时间】:2012-02-04 12:52:41
【问题描述】:

我的控制器中加载了 form_validation 库,并且表单验证本身正在工作,但是当使用 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';
    }
}

这是视图中的代码:

    <?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>

我有什么遗漏吗?重定向是否导致问题?

【问题讨论】:

  • 怎么不工作了?它应该在验证失败后重新填写字段。如果表格未有效填写,为什么要重定向到另一个页面?如果我错过了一个领域,我需要重新注册吗? :)
  • @DamienPirsy 表单字段未填充。如果用户错过了某个字段,他们将被重定向回注册页面。我重定向的原因是因为我不希望用户在地址栏中看到 /register/addUser url(如果我加载视图而不是重定向会发生这种情况)。

标签: php codeigniter


【解决方案1】:

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

代替

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

只是为了测试,尝试加载视图

    $this->load->view('member_register_view');

你会看到的。

set_value 要求表单验证在相同的上下文中运行...当您重定向时会丢失此上下文。

【讨论】:

  • 我不想加载视图,因为我想保留 URL。例如,我不希望用户在出错时在地址栏中看到 /members/addUser,我希望他们返回 /register
  • 我想我必须为此设置闪存数据。
  • 为什么不&lt;form action="/member/register"&gt;function register() 你只是if (!empty($_POST)) return $this-&gt;addUser();
  • 这样的问题是,当用户在发送表单并收到错误后尝试重新加载页面时,他们会看到典型的“你想再次发送帖子数据吗?”不是很好的消息类型。最好在执行 post 请求后重定向用户。
【解决方案2】:

我与redirect() 有同样的问题,我在重定向之前使用$this-&gt;session-&gt;set_flashdata('field','value') 存储数据,因为在我的情况下无法加载视图,并将其重新用作输入标签的值,
&lt;input type='text' value='&lt;?= $this-&gt;session-&gt;flashdata('field') ?&gt;' &gt;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-20
    • 1970-01-01
    • 2020-02-26
    • 2019-09-17
    • 2015-02-23
    • 2017-11-18
    • 1970-01-01
    相关资源
    最近更新 更多