[PHP從小白到大牛]-025 PHP-商城項目(一)

實現後臺登陸前的準備工做

include include_once require require_once

  • 這四個語句都是用來引入文件
  • includerequire的區別在於, 若是找不到須要引入的文件, include之後的代碼, 繼續執行, require後面的代碼沒法執行
  • includeinclude_once 的區別在於, 屢次引入同一個文件, include會屢次引入, include_once只會引入一次, 好處在於, 能夠避免函數重複定義的錯誤

config.php 配置文件

<?php
// 數據庫配置
$arr = [
	'db_host'=>'127.0.0.1',
	'db_port'=>'3306',
	'db_user'=>'root',
	'db_password'=>'root',
	'db_name'=>'shop',
	'db_prefix'=>'',
	'db_charset'=>'utf8'
];
return $arr;
複製代碼

db.func.php 數據庫的相關函數

<?php
/** * connect 鏈接數據庫 * * @return resource 鏈接資源, 失敗返回錯誤信息 */
function connect(){
	$config = require dirname(__FILE__)."/config.php";
	$link = mysqli_connect(
		$config['db_host'].':'.$config['db_port'],
		$config['db_user'],
		$config['db_password'],
		$config['db_name']
	);
	if(!is_null(mysqli_connect_error())){
		die('數據庫鏈接錯誤: '.mysqli_connect_error());
	}
	return $link;
}
/** * queryOne 查詢一條數據 * * @param string $sql sql語句 * * @return array 查詢到的關聯數組, 沒有返回空數組 */
function queryOne($sql){
	$link = connect();
	$result = mysqli_query($link,$sql);
	$data = [];
	if($result && mysqli_num_rows($result)>0){
		$data = mysqli_fetch_assoc($result);
	}
	return $data;
}
/** * queryAll 查詢全部數據 * * @param string $sql sql語句 * * @return array 二維關聯數組, 沒有就返回空數組 */
function queryAll($sql){
	$link = connect();
	$result = mysqli_query($link,$sql);
	$data = [];
	if($result && mysqli_num_rows($result)>0){
		$data = mysqli_fetch_all($result,MYSQLI_ASSOC);
	}
	return $data;
}
/** * getDBPrefix 返回前綴 * * @return string 數據表的前綴 */
function getDBPrefix(){
	$config = require dirname(__FILE__)."/config.php";
	return $config['db_prefix'];
}
/** * execute 增刪改操做 * * @param string $sql sql語句 * * @return bool 有影響行數, true, 沒有影響行數, false */
function execute($sql){
	$link = connect();
	mysqli_query($link,$sql);
	return mysqli_affected_rows($link)>0;
}
複製代碼

toos.func.php 工具函數/公共函數

<?php
/** * setSession 設置session * * @param string $key session的名字 * @param string $value session的值 * @param string $prefix session前綴, 用來區分, 前臺session仍是後臺session * * @return void */
function setSession($key, $value, $prefix = '') {
    session_id() || session_start();
    if (!empty($prefix)) {
        $_SESSION[$prefix][$key] = $value;
    } else {
        $_SESSION[$key] = $value;
    }
}
/** * getSession 獲取session * * @param string $key session名字 * @param string $prefix session前綴 * * @return string session的值, 若是獲取不到, 返回空字符串 */
function getSession($key, $prefix = '') {
    session_id() || session_start();
    if (!empty($prefix)) {
        return isset($_SESSION[$prefix][$key]) ? $_SESSION[$prefix][$key] : '';
    } else {
        return isset($_SESSION[$key]) ? $_SESSION[$key] : '';
    }
}
/** * deleteSession 清除session * * @param string $key session名字 * @param string $prefix session前綴 * * @return void */
function deleteSession($key, $prefix = '') {
    session_id() || session_start();
    if (!empty($prefix)) {
        unset($_SESSION[$prefix][$key]);
    } else {
        unset($_SESSION[$key]);
    }
}
/** * setInfo 設置系統消息 * * @param string $info 消息的具體內容 * * @return void */
function setInfo($info) {
    setSession('info', $info, 'system');
}
/** * getInfo 獲取系統消息 * * @return string 系統消息, 有就返回消息, 沒有就空字符串 */
function getInfo() {
    $info = getSession('info', 'system');
    deleteSession('info', 'system');
    return $info;
}
/** * hasInfo 是否有消息須要展現 * * @return boolean 有則返回true, 沒有返回false */
function hasInfo() {
    return !empty(getSession('info', 'system'));
}
複製代碼

後臺登陸的實現

引入文件

<?php 
require_once '../db.func.php';
require_once '../tools.func.php';
複製代碼

判斷是否點擊了登陸, 若是沒有登陸, 先不執行php邏輯, 只展現html頁面

if(!empty($_POST['adminuser'])){
    // 省略php代碼...
}
複製代碼

鏈接數據庫, 獲取表前綴, 接受參數, 拼接sql語句

if (!empty($_POST['adminuser'])) {
    $prefix = getDBPrefix();
    $adminuser = $_POST['adminuser'];
    $adminpass = md5('yunhe_' . md5($_POST['adminpass']));
    // 拼接sql語句
    $sql = "select id,adminuser from {$prefix}admin where adminuser = '{$adminuser}' and adminpass = '{$adminpass}' ";
    // 省略php代碼...
}
複製代碼

執行sql語句, 判斷結果, 若是有則更新狀態, 跳轉index.php,

若是沒有, 則保存並展現錯誤信息...

$result = queryOne($sql);
  if ($result) {
    setSession('admin',['adminuser'=>$result['adminuser'],'id'=>$result['id']],'admin');
    // 當前登錄時間
    $login_at = date('Y-m-d H:i:s');
    // 當前登陸IP

    $ip = $_SERVER['REMOTE_ADDR'] == "::1"? '127.0.0.1':$_SERVER['REMOTE_ADDR'];

    $login_ip = ip2long($ip); 

    $sql = "update {$prefix}admin set login_at = '{$login_at}', login_ip = '{$login_ip}' where id = {$result['id']}";
    execute($sql);
    header('location:index.php');
  }else{
    setInfo('用戶名或密碼錯誤');
  }
複製代碼

在html的代碼中, 展現錯誤信息

// 省略代碼...

<div class="card-body">
<p>
    <?php if(hasInfo()) echo getInfo(); ?>
</p>
<form method='post'>
<div class="row">
<div class="col-md-12">
<div class="form-group">
<label class="bmd-label-floating">用戶名</label>

// 省略代碼...
複製代碼
相關文章
相關標籤/搜索