使用codeigniter从数据库中获取特定行

时间:2017-07-30 07:57:07

标签: codeigniter login

我是新手,所以我有这个愚蠢的问题。我想创建一个登录表单,当用户登录时,我想在屏幕上显示他的所有信息(用户名攻击防御...)。我不知道如何调用我所做的特定功能,因为在我的控制器中默认调用函数index()而不是函数guser()。

登录视图

<h2>Login</h2>
<?php if($error==1){ ?>
<p>Your Username/password did not match </p>
<?php } ?>

<form action="<?=base_url()?>index.php/Users/login" method="post">
<p>Username: <input name="user" type="text" /> </p>
<p>Password: <input name="password" type="password" /> </p>

<p><input type="submit" value="Login" /></p>
</form>

用户控制器

<?php

    class Users Extends CI_Controller{

        function __construct(){
            parent::__construct();
            $this->load->model('User');
        }

        function index(){
            $data['users']=$this->User->get_users();//sto model post tha kalesei tin sinartisi get_posts
            $this->load->view('Post_index',$data);
        }

        function guser($id){
            $data['user']=$this->User->get_user($id);
            $this->load->view('Post_index',$data);
        }

        function login(){
            $data['error'] = 0; // simenei oti den exei errors
            if($_POST){ 
                $user=$this->input->post('user',true);//pairnei to username p edose o xristis(einai idio me to $_POST)
                $password=$this->input->post('password',true);//pairnei to password p edose o xristis
                //$type=$this->input->post('charact',true);
                $user1=$this->User->login($user,$password);//,$type);
                if(!$user1){
                    $data['error']=1;

                }else{

                    $this->session->set_userdata('id',$user1['id']);
                    $this->session->set_userdata('user',$user1['user']);
                    $this->session->set_userdata('name',$user1['name']);
                    $this->session->set_userdata('money',$user1['money']);
                    $this->session->set_userdata('attack',$user1['attack']);
                    $this->session->set_userdata('defence',$user1['defence']);
                    $this->session->set_userdata('level',$user1['level']);
                    $this->session->set_userdata('xp',$user1['xp']);
                    redirect(base_url().'index.php/Users');
                }

            }
            $this->load->view('Login',$data);
        }

        function registerSam(){
            if($_POST){
                $data=array(
                    'user'=>$_POST['user'],
                    'name'=>$_POST['name'],
                    'password'=>$_POST['password'],
                    'charact'=>"Samurai",
                    'money'=>400,
                    'attack'=>10,
                    'defence'=>5,
                    'level'=>0,
                    'xp'=>0
                    );
                $userid=$this->User->create_user($data);


            }

        }

        function registerKnight(){
            if($_POST){
                $data=array(
                    'user'=>$_POST['user'],
                    'name'=>$_POST['name'],
                    'password'=>$_POST['password'],
                    'charact'=>"Knight",
                    'money'=>400,
                    'attack'=>5,
                    'defence'=>10,
                    'level'=>0,
                    'xp'=>0
                    );
                $userid=$this->User->create_user($data);


            }

        }
    }
?>

用户模型

<?php 

    class User Extends CI_Model{

        function create_user($data){
            $this->db->insert('unityusers',$data);
        }

        function login($user,$password){
            $where=array(
                'user'=>$user,
                'password'=>$password,
                );
            $this->db->select()->from('unityusers')->where($where);
            $query=$this->db->get();
            return $query->first_row('array');
        }

        function get_user($id){
            $this->db->select()->from('unityusers')->where(array('id'=>$id));
            $query=$this->db->get();
            return $query->first_row('array');
        }
        function get_users($num=20,$start=0){// tha paroume 20 posts k tha arxisoume apo to proto
            $this->db->select()->from('unityusers')->limit($num,$start);
            $query=$this->db->get();
            return $query->result_array();
        }
    }
?>

3 个答案:

答案 0 :(得分:0)

要调用特定功能,您可以使用链接

通过浏览器访问它
BASE_URL/index.php/ControllerName/MethodName

因此,在您调用guser方法的情况下,url将是

BASE_URL/index.php/users/guser

希望有所帮助。

答案 1 :(得分:0)

控制器上的guser功能出错。您不需要将任何参数传递给函数。您可以从会话中获取用户的ID,一旦用户输入了正确的凭据,就会在会话中添加该ID。

登录后,您需要将用户重定向到guser功能,而不是users。因为根据您的控制器users功能不存在。

更改
redirect(base_url().'index.php/Users');

redirect(base_url().'index.php/guser');

请在下面查看解决方案。

function guser(){
    $data['user']=$this->User->get_user($this->session->userdata('id'));
    $this->load->view('Post_index',$data);
}

如果不起作用,请告诉我。

答案 2 :(得分:0)

虽然您已经接受了答案,但我想为您提供更多改进代码的基本功能。

加载数据以从控制器查看的不同技术:

function index(){
    $users = $this->User->get_users();
    $this->load->view('Post_index',['users' => $users, 'any_other_data' => $any_other_data ... and so on]);
}

当您在控制器中发布数据时,您应首先在login函数内检查验证。在登录功能中,它将更有用。 setting-validation-rules

$this->form_validation->set_rules('username', 'Username', 'required');
$this->form_validation->set_rules('password', 'Password', 'required',

加载模型及其功能。您不需要在下面使用大写字母。

$this->load->model('user');
$this->user->get_users();

您的注册函数registerSam您不需要创建一系列发布数据Codeigniter将提供一次性获取所有发布数据的功能。要从该阵列中删除不必要的数据,请使用unset

$your_post_array = $this->input->post();