網站程式設計-PHP
- 複製空白架構,並存檔「admin.php」 <?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']用來判斷是否登入 $_SESSION['uname']=isset($_SESSION['uname'])?$_SESSION['uname']:"";在流程控制加上
//預設動作 default: $op="op_list"; if($_SESSION['uname']){ #如果已經登入,則跳轉至後台的首頁 header("location:admin/index.php"); } break;
此時,因為還沒登入,所以程式執行結束,而螢幕是空畫面,接下來做一張表單,資料傳送目的地 admin.php 方法 post
 - 在「templates/default/theme.html」加入表單語法
	
    {* 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 - 表單送出後,由admin.php接收,可以用「print_r($_POST); die();」觀看接收的變數
在流程加 #登入 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'] = ""; 即可 - 
	
在前台增加一個隱藏的登入點:編輯樣版
{* 登入用 *} <div style='position:fixed;top:1px;left:1px;z-index:10000'> <a href="admin.php">  </a> </div >
樣板位置:web/templates/default/theme.html
編輯「theme.html」將語法放在 </body> 之前{* 登入用 *}:smarty 的註解
position:fixed; :固定定位(position: fixed)的元素會相對於瀏覽器視窗來定位,這意味著即便頁面捲動,它還是會固定在相同的位置。
z-index 可以用來設置元素的 Z 方向位置,z-index 數字越大的在越上面,反之則在越下面。 - 
	
後台要驗證 $_SESSION['uname'],假如不真,則跳回前台頁頁
#沒有登入,則回到前台首頁 if(!$_SESSION['uname'])header("location:../index.php");