【PHP】codeigniter结合ajax实现登录

阚英武
2023-12-01

之前的文章中介绍了利用codeigniter框架中的表单来实现登录,不过这种方式相对原始,这里介绍一种利用ajax的数据传递方式。

前端代码:

首先需要了CI的session,直接使用了PHP原生的session机制,以便在CI的文件夹外也能调用session。

js调用方面,我调用了

"../lib/jquery/jquery.md5.js" 
"../lib/jquery/jquery-2.2.2.min.js"
"login.js" 

三个JS,其中第一个将来用于密码的加密传输,现在还没做。第二个是jquery的核心js,第三个是登录页相对应的js文件,登录功能的具体代码将写在这里。

login.php代码如下

<?php 
				session_start();
				if(isset($_SESSION['username'])){
					//返回之前的页面
				}
?>

<!DOCTYPE html PUBLIC "-//W3C//Ddiv XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/Ddiv/xhtml1-transitional.ddiv">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />


<script src="../lib/jquery/jquery.md5.js" type="text/javascript"></script>
<script src="../lib/jquery/jquery-2.2.2.min.js" type="text/javascript"></script>
<script src="login.js" type="text/javascript"></script>

<title>登录</title>
</head>
<div class="container">
			<div>
				<img src="../images/logo.png" alt="logo" width="705px"></img>
				<hr>
			</div>
			
			<form method="post" action="">
			<div>
				<div>
					<div>
						<input class='loginusername' type="text" name="username" placeholder="用户名" οnfοcus="this.placeholder=''" οnblur="this.placeholder='用户名'">
					</div>
					<div>
						<input class='loginpassword' type="password" name="password" placeholder="密码" οnfοcus="this.placeholder=''" οnblur="this.placeholder='密码'">
					</div>
					<div>
						<input class='loginsubmit' type="submit" value="登录">
					</div>
					<div></div>
				</div>
			</div>
			</form>
			
			<div>
				<hr>
				版权信息
			</div>
</div>


</html>

login.js

$(function(){
  $("form").submit(function(e){
	  var username = $(".loginusername").val();
	  var password = $(".loginpassword").val();
	  
	  if(username!='' && password!=''){	  
		  var errormessage = "用户名密码匹配中……";
		  $.ajax({
			  data:{username:username,password:password},       //要发送的数据
			  type:"POST",           //发送的方式
			  url:"../tool/index.php/Login/UserLogin", //url地址
			  error:function(msg){ //处理出错的信息
				  var errormessage="再试一次";
				  $(".loginerror").html(errormessage);
			  },
			  success:function(msg){  //处理正确时的信息
				  //alert("success" + msg)
				  if(msg!=''){
					  var errormessage="登录成功";
					  $(".loginerror").html(errormessage);
					  
					  location.href = "http://localhost/"
				  }else{
					  var errormessage="用户名或密码错误";
					  $(".loginerror").html(errormessage);
				  }
			  }
		  });
		  
	  }else{
		 var errormessage = "用户名或密码不能为空";
	  }
	  
	  $(".loginerror").html(errormessage);	
	  return false;
  });
});


//跳转
//location.href = "http://localhost/";

CI中的接口:

Controller文件

login.php

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

class Login extends CI_Controller {


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

	public function index()
	{	
		
	}

	public function UserLogin() {
		$username = $this->input->get_post('username');
		$password = $this->input->get_post('password');
		//读取model
    	$this->load->model('Admin_user_master_model');
    	
    	$is_sucess = $this->Admin_user_master_model->user_login($username,$password);
    	
   		if($is_sucess){
   			$arr = array('username'=>$username);
			
   			session_id();
   			session_start();

   			$_SESSION ['username'] = $username;
   			//$_SESSION['userid']=
   			
   			echo $_SESSION['username'];
   			
   			//结果封装成json字符串
   			$res=json_encode($arr);

   		}else{
   			echo '';
   		}	 	
    	
	}
	
}

Model文件

Admin_user_master_model.php

<?php
class Admin_user_master_model extends CI_Model {
	
	public function __construct()
  {
    $this->load->database();
  }
  
  
  public function user_login($username,$password){
  	$query_string = "select plat_user_name from plat_user_info
  			where plat_user_name=".$this->db->escape($username)." and plat_user_password=".$this->db->escape($password);
  	
  	$query = $this->db->query($query_string);
  	
  	if ($query->num_rows() > 0)	{
  		return true;
  	} else {
  		return false;
  	}
  	
  	
  }
	
}

ps:我的数据库中,用户信息存放在plat_user_info表中


登录功能大概就是这个样子,代码还比较幼稚,日后会更加完善。


 类似资料: