Мой контроллер для регистрации и входа не работает (Codeigniter) - PullRequest
0 голосов
/ 17 октября 2018

, пожалуйста, помогите мне ... Мой контроллер для регистрации и входа не работает.Всякий раз, когда я вводю данные либо в логин, либо в регистр, они возвращаются в режим регистрации и входа в систему, а не индекс / home и не вводимые мной данные вводятся в mysql.

Я создаю его так, как если мне удастся ввести данные в регистр, он будет направлен на вход в систему, затем, когда вы войдете, он будет направлен на дом.Другое - это вход в систему, когда я войду в систему, он будет направлен домой, если сможет войти.

Контроллер: Member.php

   class Member extends CI_Controller {

public function __construct()
{
    parent::__construct();
    $this->load->library(array('session', 'form_validation'));
    $this->load->helper(array('url', 'form'));
    $this->load->model("Member_model");
}

public function index() {
    $this->load->view('front/login');
}

public function Login() {
    $this->load->view('front/login');
}

public function Register() {
    $this->load->view('front/register');
}

public function profile() {

    if ($_SESSION['user_logged'] == FALSE) {

        $this->session->set_flashdata("error","Please login first to view");
        redirect('Member/Login');
    }
    $this->load->view('front/home');
}

}

Контроллер: Register.php

class Register extends CI_Controller {

    public function __construct()
    {
        parent::__construct();
        $this->load->library(array('session', 'form_validation'));
        $this->load->helper(array('url', 'form'));
        $this->load->model("Member_model");
    }

    public function registerMember() {
        //validate  the data taken through the register form
        $this->form_validation->set_rules('username','Username','required|is_unique[member.username]');
        $this->form_validation->set_rules('email', 'Email', 'trim|required|valid_email');
        $this->form_validation->set_rules('password', 'Password', 'trim|required|md5|min_length[6]');
        $this->form_validation->set_rules('conf_password', 'Confirm Password', 'trim|required|min_length[6]|matches[password]');

        if ($this->form_validation->run() == TRUE) {

            //load the model to connect to the db
            $this->load->model('Member_model');
            $this->Member_model->insertMember();

            //set message to be shown when registration is completed
            $this->session->set_flashdata('success','You are registered!');
            redirect('Member/Login');

        } else {
            $this->load->view('front/register');
        }
    }
}

Контроллер: Login.php

class Login extends CI_Controller {

    public function __construct()
    {
        parent::__construct();
        $this->load->library(array('session', 'form_validation'));
        $this->load->helper(array('url', 'form'));
        $this->load->model("Member_model");
    }

    public function loginMember() {

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

        if ($this->form_validation->run() == FALSE) {

            $this->load->view('front/login');

        } else {

            $this->load->model('Member_model');
            $reslt = $this->Member_model->checkLogin();

            if ($reslt != false) {

                //set session
                $username = $_POST['username'];
                $password = sha1($_POST['password']);

                //fetch from databse
                $this->db->select('*');
                $this->db->from('member');
                $this->db->where(array('username' => $username , 'password' => $password));
                $query = $this->db->get();

                $member = $query->row();

                //if use exists
                if ($member->username) {

                    //login message
                    $this->session->set_flashdata("success","You are logged in");

                    //set session variables
                    $_SESSION['user_logged'] = TRUE;
                    $_SESSION['username'] = $member->username;

                    //redirect
                   redirect('Member/profile','refresh');
                }
            } else {

                //wrong credentials
                $this->session->set_flashdata('error','Username or Password invalid!');
                redirect('Member/Login');

            }
        }

    }

    //logging out of a user
    public function logoutMember() {
        unset($_SESSION);
        redirect('Member/Login');
    }
}

Модель: Member_model.php

class Member_model extends CI_Model {

public function insertMember () {

    //insert data
    $data = array(
        //assign data into array elements
        'username' => $this->input->post('username'),
        'email' =>$this->input->post('email'),
        'password' => sha1($this->input->post('password'))
    );
    //insert data to the database
    $this->db->insert('member',$data);
}

public function checkLogin() {

    //enter username and password
    $username = $this->input->post('username',TRUE);
    $password = sha1($this->input->post('password',TRUE));

    //fetch data from database
    $this->db->where('username',$username);
    $this->db->where('password',$password);
    $res = $this->db->get('member');

    //check if there's a user with the above inputs
    if ($res->num_rows() == 1) {

        //retrieve the details of the user
        return $res->result();

    } else {

        return false;

    }

}}

Просмотр: Register.php

<body class="background-login">
    <div class="main-w3layouts wrapper">
        <h1> SignUp </h1>
        <div class="main-agileinfo">
            <div class="agileits-top">
                <form method="post" action="<?php echo site_url('register/registerMember'); ?>" >                    

                    <input class="text" type="text" id="username" name="username" placeholder="Enter a username">

                    <input class="text email" type="email" id="email" name="email" placeholder="Enter your email">

                    <input class="text" type="password" id="password" name="password" placeholder="Enter a password">

                    <input class="text w3lpass" type="password" id="conf_password" name="conf_password" placeholder="Confirm your password">

                    <div class="wthree-text">
                        <label class="anim">
                            <input type="checkbox" class="checkbox" required="">
                            <span>I Agree To The Terms & Conditions</span>
                        </label>
                        <div class="clear"> </div>
                    </div>
                    <input type="submit" value="SignUp">
                </form>
                <p>Already have an Account? <a href="<?php echo site_url('Member/Login'); ?>"> Login Now!</a></p>
            </div>
        </div>

Login.php

 <body class="background-login">
    <div class="main-w3layouts wrapper">
        <h1> SignIn </h1>
        <div class="main-agileinfo">
            <div class="agileits-top">
                <form method="post" action="<?php echo site_url('Login/loginMember'); ?>" >                        
                    <input class="text" type="text" id="username" name="username" placeholder="Your username"><br>
                    <input class="text" type="password" id="password" name="password" placeholder="Your password">
                    <input type="submit" value="Login"/>
                </form>
                <p>Don't have an Account? <a href="<?php echo site_url('Member/Register'); ?>"> SignUp NOW!</a></p>
            </div>
        </div>

Я дажеразделить мой код на части, как это, но проблема все та же ... Это как если бы if form_validation-> run не запущен, а просто урезан в другое ...

Итак, проблема в том, когдаЯ ввожу данные, они не будут вводить данные или перенаправлять на другую страницу.* регистрация -> он будет направлен на регистрацию после того, как я отправлю данные. Что я хочу, так это когда я отправляю данные, он будет направлен на вход в систему.* login -> он будет направлен на вход после того, как я отправлю данные. То, что я хочу, это когда я отправлю данные, которые он направит домой.register -> результат -> regis_result

Ответы [ 5 ]

0 голосов
/ 24 октября 2018

У меня тоже был этот случай.Я решил это, передав $this в run()

 if ($this->form_validation->run($this) == TRUE) 

Вы можете передать массив в состоянии where в функции checkLogin

$where_array = array('username' => $username,'password' => $password);
$this->db->where($where_array);
$res = $this->db->get('member');

Надеюсь, вам это тоже поможет!

0 голосов
/ 23 октября 2018

перенаправить вашу страницу:

// логин

 if ($this->form_validation->run() === TRUE)
        { 
            $username = $this->input->post('username');
            $email    = $this->input->post('email');
            $password = $this->input->post('password');

           $user= $this->member_model->create_user();
if($user >0){
redirect('front/home'); 
        } else { 
           redirect('front/login'); 
        }
}

можно так же, как в singup

0 голосов
/ 17 октября 2018

в вашем реестре и при входе в систему

                <?= form_open() ?>
                <form action="#" method="post"> 

Вы добавили это.Это неправильно. В то же время, когда вы открываете две формы, вам нужно удалить строку. И добавить какое-либо действие в форму, например,

<form action="<?= base_url('yourControllerName/YourMethodname')?>" method='post'></form>

и, во-вторых, в Member.php Controller вы добавили эту строку * 1007.*

    if ($this->form_validation->run() === FALSE){
        Some code
    }

это неправильно, вам нужно это

        if ($this->form_validation->run() == FALSE)

пожалуйста, проверьте и пингуйте меня ......

0 голосов
/ 17 октября 2018

Убедитесь, что ваш base_url в config.php не равен нулю.

В register.php удалите <?=form_open('member/login')?> и <?= form_close() ?>

Вместо этого добавьте, <form method="post" action="<?php echo site_url('Member/register'); ?>" > и </form>

0 голосов
/ 17 октября 2018

Вы не можете использовать функцию form_open и HTML-тег формы одновременно, поэтому удалите кого-либо из него и пропустите весь путь в действии.

Если вы используете функцию form_open, добавьте функцию form_close.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...