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