Codeigniter更新用户信息查询由于某种原因不起作用

问题描述 投票:0回答:1

我尝试在codeigniter中创建一个函数,以便用户能够更改其用户信息。

当我填写表格并提交时,记录没有得到更新,它显示一个空白页面。 (我确实启用了PHP错误)在同一个视图页面上总共有4种不同的表单。这是我在视图文件中的内容:

<div class="main">
    <table class="gegevensupdaten">
        <form action="<?php echo base_url() . "GwController/update_email"?>" method="post">
            <tr>
                <td><h4>E-mail adres wijzigen</h4></td>
                <td><?php echo form_input(array('type'=>'email','id'=>'email', 'name'=>'email', 'placeholder' => 'Nieuw e-mail adres:', 'size'=>70));?></td>
                <td><?php echo form_input(array('type'=>'password','id'=>'wachtwoord', 'name'=>'wachtwoord', 'placeholder' => 'Uw wachtwoord:', 'size'=>70));?></td>
                <td><?php echo form_input(array('type'=>'hidden','id'=>'user_id', 'name'=>'user_id', 'value' => $_SESSION['user_id'], 'size'=>70));?></td>
                <td><button type="submit" name="emailwijzigen" class="btn btn-primary">Opslaan</button></td>
            </tr>
        </form>

        <form action="<?php echo base_url() . "GwController/update_adres"; ?>" method="post">
            <tr>
                <td><h4>Adres wijzigen</h4></td>
                <td><?php echo form_input(array('id'=>'straat', 'name'=>'straat', 'placeholder' => 'Nieuw straatnaam', 'size'=>70));?></td>
                <td><?php echo form_input(array('id'=>'huisnummer', 'name'=>'huisnummer', 'placeholder' => 'Nieuwe huisnummer', 'size'=>70));?></td>
                <td><?php echo form_input(array('id'=>'woonplaats', 'name'=>'woonplaats', 'placeholder' => 'Nieuw stad/woonplaats', 'size'=>70));?></td>
                <td><?php echo form_input(array('id'=>'postcode', 'name'=>'postcode', 'placeholder' => 'Nieuwe postcode', 'size'=>70));?></td>
                <td><?php echo form_input(array('type'=>'password','id'=>'wachtwoord', 'name'=>'wachtwoord', 'placeholder' => 'Uw wachtwoord:', 'size'=>70));?></td>
                <td><?php echo form_input(array('type'=>'hidden','id'=>'user_id', 'name'=>'user_id', 'value' => $_SESSION['user_id'], 'size'=>70));?></td>
                <td><button type="submit" class="btn btn-primary">Opslaan</button></td>
            </tr>
        </form>

        <form action="<?php echo base_url() . "GwController/update_wachtwoord"; ?>" method="post">
            <tr>
                <td><h4>Wachtwoord wijzigen</h4></td>
                <td><?php echo form_input(array('type'=>'hidden','id'=>'user_id', 'name'=>'user_id', 'value' => $_SESSION['user_id'], 'size'=>70));?></td>
                <td><?php echo form_input(array('type'=>'password','id'=>'nieuwwachtwoord', 'name'=>'nieuwwachtwoord', 'placeholder' => 'Uw nieuwe wachtwoord: ', 'size'=>70));?></td>
                <td><?php echo form_input(array('type'=>'password','id'=>'herhaalwachtwoord', 'name'=>'herhaalwachtwoord', 'placeholder' => 'Herhaal uw nieuwe wachtwoord', 'size'=>70));?></td>
                <td><?php echo form_input(array('type'=>'password','id'=>'wachtwoord', 'name'=>'wachtwoord', 'placeholder' => 'Uw oude wachtwoord:', 'size'=>70));?></td>
                <td><button type="submit" class="btn btn-primary">Opslaan</button></td>
            </tr>
        </form>

        <form action="<?php echo base_url() . "GwController/update_beschrijving"; ?>" method="post">
            <tr>
                <td> <h4>Beschrijving wijzigen</h4></td>
                <td> <?php echo form_textarea(array('type'=>'textarea','id'=>'beschrijving', 'name'=>'beschrijving', 'placeholder' => 'Uw nieuwe beschrijving..','cols'=>70));?></td>
                <td><?php echo form_input(array('type'=>'hidden','id'=>'user_id', 'name'=>'user_id', 'value' => $_SESSION['user_id'], 'size'=>70));?></td>
                <td><button type="submit" class="btn btn-primary">Opslaan</button></td>
            </tr>
        </form>
    </table>
</div>

这是我的更新控制器功能:

<?php


class GwController extends CI_Controller {

    // index functie - hierin laad ik de view file 'gegevenswijigen' in het mapje views.
    public function index()
    {
        $this->load->view('gegevenswijzigen');
    }




        function __construct()
        {
            parent::__construct();
            //Laad het Update_model in models folder
            $this->load->model('Update_model');
        }




        //Controller functie om email van een gebruiker te veranderen
        function update_email() 
        {
            $id= $this->input->post('user_id');
            $data = array(
            'email' => $this->input->post('email')
        );



            $wachtwoord = $_POST['wachtwoord'];

               //check gebruiker in database
            $this->db->select('*');
            $this->db->from('users');
            $this->db->where(array('user_id'=>$_SESSION['user_id'], 'wachtwoord' => $wachtwoord));
            $query = $this->db->get();

            $user = $query->row();
            //Als gebruiker bestaat
            if ($user->user_id) {
    $this->Update_model->update_email($id, $data);
    header ('location:https://kadokado-ferran10.c9users.io/user/profile');
}
        }


            //Controller functie om het adres van een gebruiker te veranderen
            function update_adres() 
            {
                $id= $this->input->post('user_id');
                $data = array(
                'straat' => $this->input->post('straat'),
                'huisnummer' => $this->input->post('huisnummer'),
                'woonplaats' => $this->input->post('woonplaats'),
                'postcode' => $this->input->post('postcode')
            );


            $wachtwoord = $_POST['wachtwoord'];

               //check gebruiker in database
            $this->db->select('*');
            $this->db->from('users');
            $this->db->where(array('user_id'=>$_SESSION['user_id'], 'wachtwoord' => $wachtwoord));
            $query = $this->db->get();

            $user = $query->row();
            //Als gebruiker bestaat
            if ($user->user_id) {
    $this->Update_model->update_email($id, $data);
    header ('location:https://kadokado-ferran10.c9users.io/user/profile');

}

          }



            //Controller functie om gebruikerswachtwoord te veranderen
            function update_wachtwoord() 
            {
                $id= $this->input->post('user_id');
                $nieuwwachtwoord = $this->input->post('nieuwwachtwoord');
                $herhaalwachtwoord = $this->input->post('herhaalwachtwoord');
                if($nieuwwachtwoord == $herhaalwachtwoord){
                 $data = array(
                'wachtwoord' => $this->input->post('nieuwwachtwoord'),

            );


                $wachtwoord = $_POST['wachtwoord'];

                //check gebruiker in database
                $this->db->select('*');
                $this->db->from('users');
                $this->db->where(array('user_id'=>$_SESSION['user_id'], 'wachtwoord' => $wachtwoord));
                $query = $this->db->get();

                $user = $query->row();
                //Als gebruiker bestaat
                if ($user->user_id) {
                $this->Update_model->update_email($id, $data);
                header ('location:https://kadokado-ferran10.c9users.io/user/profile');

             }

}



    //Controller functie voor profiel beschrijving bewerken
    function update_beschrijving() 
    {
        $id= $this->input->post('product_id');
        $data = array(
        'beschrijving' => $this->input->post('beschrijving'),
        );

        $this->update_model->update_wachtwoord($id,$data);
        header ('location:https://kadokado-ferran10.c9users.io/user/profile');
    }




    }
}

这些都是我的模型功能:

class Update_model extends CI_Model{
    // Model update functie om email te veranderen
    function update_email($id,$data){
        $this->db->where('user_id', $id);
        $this->db->update('users', $data);
        $_SESSION['email'] = $data['email'];
        header ('location:https://kadokado-ferran10.c9users.io/user/profile');
    }

    //Model update gebruiker adres veranderen
    function update_adres($id,$data){
        $this->db->where('user_id', $id);
        $this->db->update('users', $data);
        $_SESSION['straat'] = $data['straat'];
        $_SESSION['huisnummer'] = $data['huisnummer'];
        $_SESSION['postcode'] = $data['postcode'];
        $_SESSION['woonplaats'] = $data['woonplaats'];
        header ('location:https://kadokado-ferran10.c9users.io/user/profile');
    }

    //Model update gebruiker wachtwoord veranderen
    function update_wachtwoord($id,$data){
        $this->db->where('user_id', $id);
        $this->db->update('users', $data);
        $_SESSION['wachtwoord'] = $data['wachtwoord'];
        header ('location:https://kadokado-ferran10.c9users.io/user/profile');
    }

    //Model update gebruiker beschrijving veranderen
    function update_beschrijving($id,$data){
        $this->db->where('user_id', $id);
        $this->db->update('users', $data);
        $_SESSION['beschrijving'] = $data['beschrijving'];
        header ('location:https://kadokado-ferran10.c9users.io/user/profile');
    }
}

有谁知道它为什么不起作用?任何形式的帮助表示赞赏

php codeigniter codeigniter-3
1个回答
0
投票

我怀疑你实际上是否启用了PHP错误,或者你的问题会很明显,因为你会收到通知。

function update_email()为例。

你这样做:

if ($user["user_id"]) {
    $this->Update_model->update_email($id, $data);
}

但是$user不是一个数组(如果你启用它们会显示通知),因为你正在使用row(),例如$user = $query->row();你需要像对象一样访问用户:

if ($user->user_id) {
    $this->Update_model->update_email($id, $data);
}

现在:“记录没有得到更新,它显示一个空白页面”......他们没有更新,因为你从未点击$this->Update_model->update_email,因为前面提到的错误。如果您预计会出现错误,那么您应该始终在控制器中重定向该错误。不要像现在这样在你的模型中重定向,否则你会得到一个空白页面,因为如果模型永远不会被击中,那么什么都不会发生。


此外,我必须问你为什么,在你做这个时,你可以轻松地做这个//check gebruiker in database的每个功能:

<?php

class Curr_user_model extends CI_Model {

    /**
     * Gets current user id
     * @return int|null
     */
    public function id() {
        return isset($_SESSION['user_id']) ? $_SESSION['user_id'] : NULL;
    }

    /**
     * Checks if user exists for realz
     * @return boolean TRUE if user with id() exists in db, FALSE otherwise
     */
    public function exists() {
        $id = $this->id();
        if (is_null($id)) {
            return false;
        }
        $this->db->where('user_id', $id);
        return $this->db->count_all_results('users') == 1;
    }

    /**
     * Gets current user details as object
     * @return object
     */
    public function details() {
        $query = $this->db->get_where('users', array('user_id' => $this->id()));
        return $query->row();
    }

}

// extend this on any page that should be fully protected, and the
// curr_user field will be globally accessible to the extended classes!
class MY_Admin_Controller extends CI_Controller {

    public $curr_user;

    public function __construct() {
        parent::__construct();
        $this->load->model('curr_user_model');
        if ($this->curr_user->exists()) {
            $this->curr_user = $this->curr_user_model->details();
        } else {
            // redirect to login, user isn't supposed to be here... yet
            redirect('somepage/login');
        }
    }

}

// user will *never* be able to reach anything in this controller unless he is logged in
class GwController extends MY_Admin_Controller {

    public function index() {
        print_r($this->curr_user);
        echo 'user id: ' . $this->curr_user->user_id;
    }

}

只需使用MY_Admin_Controller扩展任何控制器,如果用户未登录,它将始终重定向到登录页面。防止您不断检查是否允许用户访问页面或执行操作。记住MY_Admin_Controller.php进入core文件夹。

© www.soinside.com 2019 - 2024. All rights reserved.