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