$ _POST在codeigniter中为空

时间:2018-11-17 12:46:13

标签: php codeigniter null codeigniter-3

我登录时,登录控制器将处理我的登录,但是为什么控制器中的$_post始终为假? (我知道是因为null,但为什么是null?),然后使我无法登录到我的主页。请有人帮帮我

我有一个像这样的控制器

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Login extends CI_Controller  {

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

public function index() {
    //if user has log-in, redirect to somewhere
    if($this->session->userdata('loggedin')) {
        redirect('home');
    //else go to login form
    } else {
        if($_POST["username"]) {
            echo $this->M_login->ceklogin();
            redirect('login');
        } else {
            //if user input the wrong email/data
            $this->session->set_flashdata("msg_login", "Wrong credentials.");
            redirect('home/login');
        }
    }
}


}

这是我的观点

<?php
    $this->load->view('parts/header');
?>

<body>

    <div class="container">
        <div class="row">
            <div class="col-md-4 col-md-offset-4">
                <div class="login-panel panel panel-default">
                    <div class="panel-heading">
                        <h3 class="panel-title">WoW Page</h3>
                    </div>
                    <div class="panel-body">
                        <form action="<?php echo base_url();?>index.php/login" method="POST">
                            <fieldset>
                                <div class="form-group">
                                    <input class="form-control" placeholder="Username" name="username" type="text" autofocus>
                                </div>
                                <div class="form-group">
                                    <input class="form-control" placeholder="Password" name="password" type="password" value="">
                                </div>
                                <?php if ($this->session->flashdata('msg_login') != '') { ?>
                                    <div class="alert alert-danger alert-dismissible" role="alert">
                                        <center><i class="fa fa-warning" aria-hidden="true"></i> <?php echo $this->session->flashdata('msg_login'); ?></center>
                                    </div>
                                <?php } ?>
                                <!-- Change this to a button or input when using this as a form -->
                                <input type="submit" class="btn btn-lg btn-danger btn-block" value="Login">
                            </fieldset>
                        </form>
                    </div>
                </div>
            </div>
        </div>
    </div>

    <!-- jQuery -->
    <script src="<?php echo base_url();?>assets/bower_components/jquery/dist/jquery.min.js"></script>

    <!-- Bootstrap Core JavaScript -->
    <script src="<?php echo base_url();?>assets/bower_components/bootstrap/dist/js/bootstrap.min.js"></script>

    <!-- Metis Menu Plugin JavaScript -->
    <script src="<?php echo base_url();?>assets/bower_components/metisMenu/dist/metisMenu.min.js"></script>

    <!-- Custom Theme JavaScript -->
    <script src="<?php echo base_url();?>assets/dist/js/sb-admin-2.js"></script>

</body>

</html>

这是我的模特

<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class M_login extends CI_Model {


        // cek login
        public function ceklogin() {
            $query = $this->db->get_where('admin', array(
                'username'=>$this->input->post('username'),
                //password converted to md5
                'password'=>md5($this->input->post('password'))
            ));
            $user = $query->row();

            if(count($user) != 0) {
                //setting isi session
                $sesi = array(
                    'admin_id'=>$user->admin_id,
                    'username'=>$user->username,
                    'level'=>$user->level,
                    'loggedin'=>true
                );
                $this->session->set_userdata($sesi);
            } else {
                $data = array('loggedin'=>false);
            }
        }
    }
    ?>

谢谢 谢谢 谢谢

1 个答案:

答案 0 :(得分:0)

有几个问题。首先,您的模型不会返回控制器可以使用的任何内容。这是我关于应该如何完成模型的想法。

places.push(place)

请注意,函数有两个参数-public function ceklogin($user_name, $password) { $user = $this->db ->select('admin_id, username, level') ->get_where('admin', array('username'=>$username, 'password'=>md5($password))) ->row_array(); if( ! empty($user)) { $user['loggedin'] = true; //add 'loggedin' to $user array $this->session->set_userdata($user); return TRUE; } $_SESSION['loggedin'] = false; return FALSE; } $user name。这些需要由控制器提供。请注意,$password返回TRUE或FALSE取决于在数据库中是否找到行。

我没有更改密码哈希-但您应该。使用@RiggsFolly在评论中告诉您的功能。您还应该考虑对输入进行清理和验证。 从不信任用户输入!

请注意,数据库调用将返回ceklogin()结果。这将是您想要用于会话数据的确切数据结构。这意味着您不必为row_array()构建一个数组,因为数据库是为您创建的。

这是经过修订的set_userdata()函数。

index()

我删除了许多(全部)public function index() { //if user has log-in, redirect to somewhere if($this->session->userdata('loggedin')) { redirect('home'); } // get the inputs so they can be passed to the model $user_name = $this->input->post('username'); $password = $this->input->post('password'); // if we have inputs, check for valid username & password if($user_name && $password) { if($this->M_login->ceklogin($user_name, $password)) { // model returned true redirect('home'); //if 'home' is where valid users go } } // If not all inputs (null/empty $_POST) // or the wrong inputs (ie. model returned false) $this->session->set_flashdata("msg_login", "Wrong credentials."); redirect('home/login'); } 语句。不需要它们是因为所有else块都以对if的调用结尾,并且该函数调用redirect();表示对exit的调用永远不会返回到调用它的位置。

您应该使用CodeIgniter Validation Library而不是粗糙的结构

redirect()

但这总比没有好。