Php 由于未正确配置htaccess文件,POST无法工作

Php 由于未正确配置htaccess文件,POST无法工作,php,post,codeigniter-3,.htaccess,Php,Post,Codeigniter 3,.htaccess,我有一个结构良好、编码良好的表单,但当我使用post向我的控制器发送数据时。。接收post数据的变量为空。我尝试向用户发送警报,查看问题是否出在输入字段上,并在接收数据的控制器变量上使用vardump,结果为0 当我意识到一切都很好。。唯一一件不是的事,也是唯一一件我真的不明白它是如何工作的,就是.htaccess文件 PS:corrent.htaccess只是从codeigniter框架的url中删除index.php文件 那么,如何从下面的传统htaccess文件中启用任何“数据请求(pos

我有一个结构良好、编码良好的表单,但当我使用post向我的控制器发送数据时。。接收post数据的变量为空。我尝试向用户发送警报,查看问题是否出在输入字段上,并在接收数据的控制器变量上使用vardump,结果为0

当我意识到一切都很好。。唯一一件不是的事,也是唯一一件我真的不明白它是如何工作的,就是.htaccess文件

PS:corrent.htaccess只是从codeigniter框架的url中删除index.php文件

那么,如何从下面的传统htaccess文件中启用任何“数据请求(post、get等)”:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
控制器代码[已编辑]

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

 class Login_Controller extends CI_Controller {

    public function __construct()
    {
        parent::__construct();
        $this->load->helper('url'); //obligatory
        $this->load->database();
        $this->load->model('Login_model');
        $this->load->library('form_validation');
        $this->load->helper('form');
    }

    public function index()
    {
        //sending $data array of variables to view's or to model's
        $data = array('header_title' => 'Nova Democracia - Login');

        $this->load->view("login", $data);
    }

    public function login_validation(){

        $username = $this->input->POST('username');
        $password = $this->input->POST('password');

        //echo "username - " + $username;
        //echo "password - " + $password;
        //break;

        if($username != '' && $password != '')
        {
            $validate = $this->Login_model->validate($username, $password); 

            if($validate->num_rows > 0){

                $data = $validate->row_array();

                $nome  = $data['nome'];
                $apelido = $data['apelido'];
                $id = $data['id'];
                $username = $data['username'];
                $nivel = $data['nivel'];

                $sesdata = array(
                    'nome'  => $nome,
                    'apelido' => $apelido,
                    'username'     => $username,
                    'nivel'     => $nivel,
                    'id' => $id,
                    'logged_in' => TRUE
                );

                $this->session->set_userdata($sesdata);

        // access login for admin
                if($nivel == '0'){
                    redirect(base_url() . 'Admin_Controller');

        // access login for staff
                }elseif($nivel == '1'){
                    redirect(base_url() . 'Admin_Controller/1');

        // access login for author
                }elseif($nivel == '2'){
                    redirect(base_url() . 'Admin_Controller/2');
                }

            }else{
                echo $this->session->set_flashdata('msg','Username - '.$username.' or Password - '.$password.' is Wrong');
                redirect(base_url().'Login_Controller');
            }
        }else
        {
            echo $this->session->set_flashdata('msg','Os campos não podem estar em branco');
            redirect(base_url().'Login_Controller');
        }
    }

    function logout(){
        $this->session->sess_destroy();
        redirect(base_url().'Login_Controller');
    }
}
<!DOCTYPE html>
 <html>
 <head>
    <title><?php echo $header_title; ?></title>
    <!-- include of site header css, js, links, metas, etc-->
    <?php $this->load->view('includes/header'); ?>
 </head>
 <body class="bg-gradient-success">
    <div class="container">

        <!-- Outer Row -->
        <div class="row justify-content-center">

            <div class="col-xl-10 col-lg-12 col-md-9">

                <div class="card o-hidden border-0 shadow-lg my-5" style="margin-bottom: 0 !important;">
                    <div class="card-body p-0">

                        <!-- Nested Row within Card Body -->
                        <div class="row">
                            <div class="col-lg-6 d-none d-lg-block bg-login-image" style="background-image: url('<?php echo base_url(); ?>assets/images/login_img/bg1.jpg');"></div>

                            <div class="col-lg-6">
                                <div class="p-5">
                                    <div class="text-center">
                                        <!-- <h1 class="h4 text-gray-900 mb-4">Eleições <?php echo date('Y'); ?></h1> -->
                                        <h1 class="h4 text-gray-900 mb-4 nexa_bold">Administração</h1>
                                    </div>

                                    <form class="user" method="POST" action="<?php echo site_url('index.php/Login_Controller/login_validation'); ?>">

                                        <div class="form-group">
                                            <input type="text" class="form-control form-control-user" name="username" id="username" aria-describedby="userHelp" placeholder="Nome">
                                            <span class="text-danger"><?php echo form_error('username'); ?></span>
                                        </div>

                                        <div class="form-group">
                                            <input type="password" class="form-control form-control-user" name="password" id="password" placeholder="Senha">
                                            <span class="text-danger"><?php echo form_error('password'); ?></span>
                                        </div>

                                        <div class="form-group">
                                            <div class="custom-control custom-checkbox small">
                                                <input type="checkbox" class="custom-control-input" id="customCheck">
                                                <label class="custom-control-label" for="customCheck">Lembrar</label>
                                            </div>
                                        </div>

                                        <input type="submit" id="buttao" name="submit" class="btn btn-success btn-user btn-block" value="Login">
                                        <?php echo '<p class="text-danger text-center mt-2">'. $this->session->flashdata('msg') .'</p>'; ?>

                                    </form>
                                    <hr>

                                    <div class="text-center">
                                        <a class="small text-success" href="#">Clique aqui, em casos de reclamações!</a>
                                    </div>

                                </div>
                            </div>
                        </div>

                    </div>
                </div>

                <h6 class="text-white">Desenvolvido pela : <a href="http://www.brandigniters.tech" target="_blank" class="text-white">brandigniters</a></h6>

            </div>
        </div>

    </div>

    <?php $this->load->view('includes/footer'); ?>
 </body>

 <script type="text/javascript">
    $(document).ready(function(){
        $('#buttao').click(function(){
            alert("Username - " + $('#username').val() + " Password - " + $('#password').val());
        });
    }); 
 </script>

 </html>
<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Login_model extends CI_Model {

    function __construct()
    {
        parent::__construct();
    }

    function validate($username, $password){
        $this->db->where('username', $username);
        $this->db->where('password', $password);
        $result = $this->db->get('tbl_admin_users', 1);
        return $result;
    }
}


我已解决问题,将模型更改为:

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

class Login_model extends CI_Model {

    function __construct()
    {
        parent::__construct();
    }

    function validate($username, $password){

        $this->db->select('*');
        $this->db->from('tbl_admin_users');
        $this->db->where('username', $username);
        $this->db->where('password', $password);

        $query = $this->db->get();

        return $query;
    }
}
还将.htaccess文件更改为:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]

# ALLOW ONLY NECESSARY REQUEST METHODS
RewriteCond %{REQUEST_METHOD} !^(GET|HEAD|OPTIONS|POST|PROPFIND|PUT) [NC]
RewriteRule .* - [F,L]

很高兴你找到了答案。我建议您简化控制器代码。把它放在回答中,因为使用评论太难了

您不需要复制
$validate->row_array()
返回的数组,因为您使用的索引键都相同。您只需将“登录”键/值添加到
$data

// call num_rows() in the if condition
// no need for an extra variable
//$rows = $validate->num_rows();

// $model might return FALSE if something goes wrong in the database
// always make sure it's not FALSE before making a call any result method.
if($validate && $validate->num_rows())
{
    $data = $validate->row_array();
    $data['logged_in'] = TRUE;
}

$this->session->set_userdata($data);

此外,在模型中,您不需要
function\uu-construct()
。唯一需要调用
parent::\uu-construct();
的时间是如果子类在构造函数中做了一些工作。这对于为父类扩展的任何PHP类都是正确的。

要调试,请尝试echo“username-" . $用户名//不+是,我尝试过,但回声的结果是0我不知道codeigniter-3,方法post区分大小写$something=$this->input->post('something');我明白了,等等,现在我添加了(.)来调试,数据来到了变量中,但即使如此,即使使用正确的数据,也没有传递条件$validate->num_rows>0模型有任何问题吗?您不应该需要
RewriteCond%{REQUEST_METHOD}…
指令。在视图中,您应该更改
site\u url('index.php/Login\u Controller/Login\u validation')
site\u url('Login\u Controller/Login\u validation')
,因为
site\u url
自动添加
index.php
// call num_rows() in the if condition
// no need for an extra variable
//$rows = $validate->num_rows();

// $model might return FALSE if something goes wrong in the database
// always make sure it's not FALSE before making a call any result method.
if($validate && $validate->num_rows())
{
    $data = $validate->row_array();
    $data['logged_in'] = TRUE;
}

$this->session->set_userdata($data);