1. 程式人生 > >【PHP】codeigniter結合ajax實現登入

【PHP】codeigniter結合ajax實現登入

之前的文章中介紹了利用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="使用者名稱" onfocus="this.placeholder=''" onblur="this.placeholder='使用者名稱'">
					</div>
					<div>
						<input class='loginpassword' type="password" name="password" placeholder="密碼" onfocus="this.placeholder=''" onblur="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表中

登入功能大概就是這個樣子,程式碼還比較幼稚,日後會更加完善。