簡體   English   中英

如何在此 Codeigniter 3 應用程序中保留無效的編輯表單數據?

[英]How can I persist invalid edit form data in this Codeigniter 3 application?

我正在使用Codeigniter 3.1.8Bootstrap 4開發一個基本的博客應用程序。

除其他外,還有一個“編輯帳戶信息”表格:

<?php echo form_open(base_url('dashboard/users/update')); ?>

        <input type="hidden" name="id" id="uid" value="<?php echo $author->id; ?>">

        <div class="form-group <?php if(form_error('first_name')) echo 'has-error';?>">
          <input type="text" name="first_name" id="first_name" class="form-control" value="<?php echo $author->first_name;?>" placeholder="First name">
          <?php if(form_error('first_name')) echo form_error('first_name'); ?> 
        </div>

        <div class="form-group <?php if(form_error('last_name')) echo 'has-error';?>">
          <input type="text" name="last_name" id="last_name" class="form-control" value="<?php echo $author->last_name;?>" placeholder="Last name">
          <?php if(form_error('last_name')) echo form_error('last_name'); ?> 
        </div>

        <div class="form-group <?php if(form_error('email')) echo 'has-error';?>">
          <input type="text" name="email" id="email" class="form-control" value="<?php echo $author->email;?>" placeholder="Email">
          <?php if(form_error('email')) echo form_error('email'); ?> 
        </div>

        <div class="form-group <?php if(form_error('bio')) echo 'has-error';?>">
          <textarea name="bio" id="bio" cols="30" rows="5" class="form-control" placeholder="Add a short bio"><?php echo $author->bio; ?></textarea>
          <?php if(form_error('bio')) echo form_error('bio'); ?> 
        </div>

        <div class="form-group">
          <input type="submit" value="Save" class="btn btn-block btn-md btn-success">
        </div>

<?php echo form_close(); ?>

它對應的控制器邏輯是這樣的:

public function edit($id) {
    // Only logged in users can edit user profiles
    if (!$this->session->userdata('is_logged_in')) {
        redirect('login');
    }

    $data = $this->Static_model->get_static_data();
    $data['pages'] = $this->Pages_model->get_pages();
    $data['categories'] = $this->Categories_model->get_categories();
    $data['author'] = $this->Usermodel->editAuthor($id);

    $this->load->view('partials/header', $data);
    $this->load->view('dashboard/edit-author');
    $this->load->view('partials/footer');

}

public function update() {
    // Only logged in users can edit user profiles
    if (!$this->session->userdata('is_logged_in')) {
        redirect('login');
    }

    $id = $this->input->post('id');

    $data = $this->Static_model->get_static_data();
    $data['pages'] = $this->Pages_model->get_pages();
    $data['categories'] = $this->Categories_model->get_categories();
    $data['author'] = $this->Usermodel->editAuthor($id);

    $this->form_validation->set_rules('first_name', 'First name', 'required');
    $this->form_validation->set_rules('last_name', 'Last name', 'required');
    $this->form_validation->set_rules('email', 'Email', 'required|trim|valid_email');

    $this->form_validation->set_error_delimiters('<p class="error-message">', '</p>');

    if($this->form_validation->run() === FALSE)
    {
        $this->load->view('partials/header', $data);
        $this->load->view('dashboard/edit-author');
        $this->load->view('partials/footer');

    } else
    {
        $this->Usermodel->update_user($id);
        $this->session->set_flashdata('user_updated', 'Your account details have been updated');
        redirect(base_url('/dashboard/manage-authors'));
    }
}

我一直無法解決的問題與此表單的驗證有關:如果我將必填字段留空,並嘗試提交表單,表單已加載,並帶有正確的驗證錯誤消息,只有無效字段是用數據庫中的數據填充,因此,有效數據與錯誤消息一起顯示,如下表所示:

在此處輸入圖片說明

但是,只要字段的當前值沒有被無效的替換,我希望它(字段值)來自數據庫。

我該如何解決這個問題?

如果要將提交的數據保留在輸入值上,可以像這樣修改電子郵件代碼:

<div class="form-group <?php if(form_error('email')) echo 'has-error';?>">
    <input type="text" name="email" id="email" class="form-control" value="<?php echo set_value('email', $author->email); ?>" placeholder="Email">
    <?php if(form_error('email')) echo form_error('email'); ?> 
</div>

這會將提交的數據設置為電子郵件值(如果可用),或者如果沒有提交的電子郵件數據,則設置為來自數據庫的電子郵件數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM