<?php require_once 'head.php'; #整理傳入變數 $op = isset($_REQUEST['op'])?$_REQUEST['op']:""; #程式流程 switch($op){ #---- case "op_test": op_test(); break; #---- case "op_test1": op_test1(); break; //預設動作 default: $op="op_list"; break; } #將變數送至樣板引擎 #op $smarty->assign("op", $op); #檔案名稱(含副檔),變數在head.php $smarty->assign("WEB", $WEB); #程式結尾 $smarty->display('theme.html'); #函數 ######################################## # op_test ######################################## function op_test() { return; } ######################################## # op_test1 ######################################## function op_test1() { return; }
#定義變數, $_SESSION['uname']用來判斷是否登入 $_SESSION['uname']=isset($_SESSION['uname'])?$_SESSION['uname']:"";
在流程控制加上
//預設動作 default: $op="op_list"; if($_SESSION['uname']){ #如果已經登入,則跳轉至後台的首頁 header("location:admin/index.php"); } break;
此時,因為還沒登入,所以程式執行結束,而螢幕是空畫面,接下來做一張表單,資料傳送目的地 admin.php 方法 post
{* admin.php *} {if $WEB.file_name == "admin.php"} <div class="container" style="margin-top:40px;min-height:550px;"> <div class="row"> <div class="col-md-4 col-md-offset-4 bg-success" style="padding:20px;"> <form action="admin.php" method="post"> <div class="form-group"> <label>帳號</label> <input type="text" class="form-control" id="uname" name="uname" placeholder="帳號"> <p class="help-block">請輸入帳號,最多8個字元</p> </div> <div class="form-group"> <label>密碼</label> <input type="password" class="form-control" id="pass" name="pass" placeholder="密碼"> <p class="help-block">請輸入密碼,最多8個字元</p> </div> <!--用來控制程式流程--> <input type="hidden" name="op" value="check_uname"> <button type="submit" class="btn btn-default">送出</button> </form> </div> </div> </div> {/if}
<form action="admin.php" method="post"> 接收表單的程式 admin.php 方法 post
隱藏一個 $_POST['op'] = check_uname
#登入 case "check_uname": $msg = check_uname(); if($msg){ #如果帳號、密碼,驗證ok,則跳轉至,後台首頁 $_SESSION['uname'] = true; header("location:admin/index.php"); exit; } //header("location:index.php"); //exit; //$smarty->assign("msg", "請輸入正確帳號、密碼"); break;
#函數 ######################################## # check_uname ######################################## function check_uname() { #過濾接教變數, 特殊字符轉義 $_POST['uname'] = addslashes($_POST['uname']); $_POST['pass'] = addslashes($_POST['pass']);// if($_POST['uname'] == "admin" and $_POST['pass'] == "admin123456")return true; return; }
登出,請檢查後台的登出連結 「 ../admin.php?op=logout 」
在流程增加 logout => $_SESSION['uname'] = ""; 即可
在前台增加一個隱藏的登入點:編輯樣版
樣板位置:web/templates/default/theme.html
編輯「theme.html」將語法放在 </body> 之前
{* 登入用 *} <div style='position:fixed;top:1px;left:1px;z-index:10000'> <a href="admin.php"> </a> </div >
{* 登入用 *}:smarty 的註解
position:fixed; :固定定位(position: fixed)的元素會相對於瀏覽器視窗來定位,這意味著即便頁面捲動,它還是會固定在相同的位置。
z-index 可以用來設置元素的 Z 方向位置,z-index 數字越大的在越上面,反之則在越下面。
後台要驗證 $_SESSION['uname'],假如不真,則跳回前台頁頁
#沒有登入,則回到前台首頁 if(!$_SESSION['uname'])header("location:../index.php");