【问题标题】:How to update account when user don't want to update all database field当用户不想更新所有数据库字段时如何更新帐户
【发布时间】:2016-01-04 10:51:33
【问题描述】:

假设这是我的控制器

class Admin extends CI_Controller{

    public function account(){

        // if user logged in redirect to home page
        if (!isset($this->session->userdata['loggedin']) || $this->session->userdata['userRoll'] != 'admin')
        {
            redirect (base_url());
        }

        if($this->input->method() == "post")
        {

            //store all settings
            $adminfullname =  $this->input->post('admin-fullname');
            $adminemail =  $this->input->post('admin-email');
            $adminpass =  $this->input->post('admin-pass');


            //load the validation library
            $this->load->library('form_validation');

            $this->form_validation->set_rules('admin-fullname', 'Full Name', 'required');
            $this->form_validation->set_rules('admin-email', 'Admin Email', 'required|valid_email|callback__checkMail');



            //check validation error
            if ($this->form_validation->run() == FALSE)
            {


                //get the all settings from database and store it to variable
                $data['site'] = $this->settings_model->SiteSettings(); 


                $this->load->view("layout/header",$data);
                $this->load->view("admineditaccount",$data);
                $this->load->view("layout/footer",$data);
            }

            else
            {
                //update user account
                $updateAccount = $this->admin_model->updateAccount($adminfullname,$adminemail,$adminpass);

                if($updateAccount){
                    $this->session->set_userdata('username', $fullname);
                    $this->session->set_userdata('email', $adminemail);

                    $data['msg'] ='<div class="alert slert-success">Successfully Updated</div>';

                }else
                {
                    $data['msg'] ='<div class="alert slert-danger">Error in updating</div>';
                }



                //get the all settings from database and store it to variable
                $data['site'] = $this->settings_model->SiteSettings(); 


                $this->load->view("layout/header",$data);
                $this->load->view("admineditaccount",$data);
                $this->load->view("layout/footer",$data);

            }
        }else
        {
            //get the all settings from database and store it to variable
            $data['site'] = $this->settings_model->SiteSettings(); 


            $this->load->view("layout/header",$data);
            $this->load->view("admineditaccount",$data);
            $this->load->view("layout/footer",$data);
        }

    }


    //Admin email check
    public function _checkMail($mail){

        $this->db->where('email', $mail);
        $query = $this->db->get('user');


        if($query->num_rows()==1){

            $this->form_validation->set_message('_checkMail', 'The email address already exist.');
            return FALSE;
        }
        else
        {
            return TRUE;
        }
    }

}

这是我的模型函数

//Update admin account
function updateAccount($adminfullname, $email, $pass){


    $admin_data = array('username' => $adminfullname, 'email' => $email, 'pass' => $pass);


    //i have store user id in my session and called like this

    $this->db->where('id',$this->sessiondata['uid']);
    $query=$this->db->update('user', $admin_data);
    return $query;
}

但问题是当用户只是更改用户名验证错误时会发生,因为我已经在我的表单上设置了字段的值

<div class="form-group">
    <label class="control-label col-xs-12 col-md-3" for="admin-email">Email :</label>
    <div class="col-xs-4">
        <input class="form-control" id="admin-email" name="admin-email" type="email" value="<?php echo $this->session->userdata['email']; ?>" 1required/>
        <?php echo form_error('admin-email'); ?>
    </div>
</div>

如果用户更改电子邮件或用户名,密码字段也使用密码文本框的值更新,也会出现同样的问题。

我该如何克服这个错误。我是否必须用单独的表格单独更新每个字段?

【问题讨论】:

    标签: php forms codeigniter


    【解决方案1】:

    我个人不会将发布数据放入变量中,因为它已经是(个人偏好),除此之外,您还想检查每个可能更新的字段是否具有值,请执行以下操作:

     $data = array();
     if(!empty($this->input->post('username'))){
           $data['username'] = $this->input->post('username');
     }
    

    并为您拥有的每个输入重复此步骤。之后它就和你已经拥有的一样了

     $this->db->where('id',$this->sessiondata['uid']);
     $this->db->update("table", $data);
    

    【讨论】:

    • 当设置 value="session->userdata['email']; ?>" 到电子邮件或其他字段时呢? !empty($this-&gt;input-&gt;post('username')) 将永远为假。
    • 你的意思是提醒发布数据以防出现问题?您不会使用会话,因为它不是写在您的会话中而是在您的帖子中,使用 value="input->post('email'))){ echo $this->input ->post('email'); }"
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-08
    • 1970-01-01
    • 1970-01-01
    • 2018-04-05
    相关资源
    最近更新 更多