iT邦幫忙

2024 iThome 鐵人賽

DAY 5
0
JavaScript

Javascript網頁程式管理系統系列 第 5

day 5 javascript網頁程式管理系統

  • 分享至 

  • xImage
  •  

今天是第五天我們可以寫一個javascript網頁程式管理系統,由於現在資安相當重要,因此我們要寫一個關於資安的javascript網頁程式管理系統,以下是程式碼

功能:

  1. 用戶登入系統
  2. 基於角色(例如管理員和普通用戶)的權限控制
  3. 密碼加密(使用簡單的Hash)
  4. 顯示登入的用戶資料
  5. 基礎的安全提示(如強密碼要求)

1. HTML 部分:

<!DOCTYPE html>
<html lang="zh-Hant">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>資安管理系統</title>
    <link rel="stylesheet" href="style.css">
</head>
<body>
    <div class="container">
        <h1>資安管理系統</h1>

        <div id="login-section">
            <h2>用戶登入</h2>
            <label for="username">用戶名:</label>
            <input type="text" id="username" placeholder="請輸入用戶名">
            <label for="password">密碼:</label>
            <input type="password" id="password" placeholder="請輸入密碼">
            <button onclick="login()">登入</button>
            <p id="login-message"></p>
        </div>

        <div id="admin-section" style="display:none;">
            <h2>管理員專區</h2>
            <p>歡迎,<span id="admin-name"></span></p>
            <p>您可以管理用戶權限。</p>
            <button onclick="logout()">登出</button>
        </div>

        <div id="user-section" style="display:none;">
            <h2>用戶專區</h2>
            <p>歡迎,<span id="user-name"></span></p>
            <p>您已成功登入,這裡是用戶專區。</p>
            <button onclick="logout()">登出</button>
        </div>
    </div>

    <script src="script.js"></script>
</body>
</html>

2. CSS 部分:

body {
    font-family: Arial, sans-serif;
    background-color: #f0f0f0;
    text-align: center;
    padding: 50px;
}

.container {
    max-width: 400px;
    margin: auto;
    padding: 20px;
    background-color: white;
    border-radius: 10px;
    box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.1);
}

h1, h2 {
    color: #333;
}

input {
    width: 100%;
    padding: 10px;
    margin: 10px 0;
    border: 1px solid #ccc;
    border-radius: 5px;
}

button {
    padding: 10px 20px;
    background-color: #007BFF;
    color: white;
    border: none;
    border-radius: 5px;
    cursor: pointer;
}

button:hover {
    background-color: #0056b3;
}

p {
    color: #555;
}

3. JavaScript 部分:

// 模擬用戶資料庫
const users = [
    { username: 'admin', password: hashPassword('admin123'), role: 'admin' },
    { username: 'user1', password: hashPassword('user1234'), role: 'user' }
];

// 登入功能
function login() {
    const username = document.getElementById('username').value;
    const password = document.getElementById('password').value;

    // 查找用戶
    const user = users.find(u => u.username === username && u.password === hashPassword(password));

    if (user) {
        if (user.role === 'admin') {
            document.getElementById('admin-section').style.display = 'block';
            document.getElementById('admin-name').innerText = user.username;
        } else {
            document.getElementById('user-section').style.display = 'block';
            document.getElementById('user-name').innerText = user.username;
        }
        document.getElementById('login-section').style.display = 'none';
    } else {
        document.getElementById('login-message').innerText = '登入失敗,用戶名或密碼錯誤!';
    }
}

// 密碼簡單哈希(模擬加密)
function hashPassword(password) {
    let hash = 0;
    for (let i = 0; i < password.length; i++) {
        hash = ((hash << 5) - hash) + password.charCodeAt(i);
        hash = hash & hash; // 轉為32位整數
    }
    return hash;
}

// 登出功能
function logout() {
    document.getElementById('admin-section').style.display = 'none';
    document.getElementById('user-section').style.display = 'none';
    document.getElementById('login-section').style.display = 'block';
    document.getElementById('login-message').innerText = '';
}

功能說明

  1. 登入與驗證:用戶輸入用戶名和密碼,系統會對密碼進行簡單的哈希運算,並與用戶資料庫中的哈希密碼進行比對。
  2. 權限控制:根據用戶角色(admin 或 user),系統會顯示不同的界面。
  3. 密碼哈希:雖然哈希算法很簡單,但它模擬了基本的密碼加密過程。你可以用更安全的方式來加密密碼(如bcrypt)。
    JavaScript 是一種強大的腳本語言,主要用於網頁開發。它是與 HTML 和 CSS 一起構建網頁的三大核心技術之一。以下是 JavaScript 的一些核心概念和功能解釋:

1. JavaScript 是什麼?

JavaScript 是一種客戶端腳本語言,通常在瀏覽器中執行。它可以讓網頁變得互動和動態。除了在瀏覽器中執行,JavaScript 也可以在伺服器端(如使用 Node.js)運行。

2. JavaScript 的基本結構

a. 變數與資料型別

JavaScript 允許開發者使用 varletconst 來宣告變數:

let name = 'John';  // 字串類型 (string)
const age = 25;     // 數字類型 (number)
var isStudent = true; // 布林值 (boolean)
  • let:用於宣告變數,變數的範圍在區塊內(區塊範圍)。
  • const:宣告常數,值不能被修改。
  • var:傳統變數宣告方式,具有函數範圍。

b. 函數

函數是一段可以被重複使用的代碼塊。它可以接受輸入(參數)並返回結果。

function greet(name) {
    return 'Hello, ' + name;
}

let message = greet('Alice');  // 'Hello, Alice'

ES6 引入了箭頭函數,語法更加簡潔:

const greet = (name) => `Hello, ${name}`;

c. 控制結構

JavaScript 有各種條件語句和迴圈來控制程式的流程:

  • 條件語句(if/else)
if (age > 18) {
    console.log('成人');
} else {
    console.log('未成年');
}
  • 迴圈(for、while)
for (let i = 0; i < 5; i++) {
    console.log(i);
}

let count = 0;
while (count < 5) {
    console.log(count);
    count++;
}

3. JavaScript 的特性

a. 動態型別

JavaScript 是一種動態型別語言,這意味著變數的型別是靈活的,可以在不同的時候持有不同的資料類型。

let variable = 42;    // 變數現在是數字
variable = 'Hello';   // 現在變成字串

b. 物件導向

JavaScript 是物件導向語言,幾乎所有東西都是物件。物件是包含屬性和方法的集合。

let person = {
    name: 'John',
    age: 30,
    greet: function() {
        console.log('Hello, I am ' + this.name);
    }
};

person.greet();  // 'Hello, I am John'

c. 事件驅動

JavaScript 常用於處理用戶事件(如按鈕點擊、鍵盤輸入等)。例如:

document.getElementById('myButton').addEventListener('click', function() {
    alert('Button clicked!');
});

這段程式碼等待用戶點擊一個按鈕,當點擊發生時會彈出一個訊息。

4. JavaScript 與 HTML/CSS 的交互

JavaScript 可以操作 HTML 元素,稱為 DOM(Document Object Model) 操作。這可以讓網頁變得互動。

a. 獲取 HTML 元素

使用 document.getElementById()querySelector() 可以選取 HTML 元素:

let heading = document.getElementById('myHeading');
heading.textContent = '新的標題';

b. 更改 CSS 樣式

JavaScript 也可以動態更改元素的樣式:

document.getElementById('myHeading').style.color = 'blue';

5. 事件處理

JavaScript 常用於處理用戶交互,如點擊按鈕、滑鼠移動、鍵盤輸入等。

document.getElementById('myButton').addEventListener('click', function() {
    console.log('按鈕被點擊了');
});

6. 非同步 JavaScript (AJAX 和 Fetch)

JavaScript 支援非同步請求,允許我們從伺服器獲取數據而不重新載入整個網頁,這是實現動態網頁的重要部分。

fetch('https://api.example.com/data')
    .then(response => response.json())
    .then(data => console.log(data))
    .catch(error => console.error('發生錯誤:', error));

7. ES6+ 的新特性

JavaScript 隨著 ES6 (ECMAScript 6) 的引入變得更強大,以下是一些重要的新特性:

  • letconst:改進了變數宣告,避免 var 帶來的問題。

  • 箭頭函數:更簡潔的函數表達式。

  • 模板字串:使用反引號 ` 來嵌入變數到字串中。

    let name = 'Alice';
    let message = `Hello, ${name}!`; // 使用模板字串
    
  • 解構賦值:方便地從物件或陣列中提取值。

    const person = { name: 'Bob', age: 25 };
    const { name, age } = person; // 解構賦值
    
  • Promise 和 async/await:提供更好的非同步程式處理方式。

    async function fetchData() {
        try {
            let response = await fetch('https://api.example.com/data');
            let data = await response.json();
            console.log(data);
        } catch (error) {
            console.error('錯誤:', error);
        }
    }
    

總結:

JavaScript 是一門多功能的語言,讓開發者能夠創建動態的網頁應用程式。它的語法相對簡單,並且擁有許多強大的功能,如事件處理、非同步請求、DOM 操作等。隨著 ES6 和後續更新,JavaScript 更加現代化和高效,成為網頁開發不可或缺的一部分。


上一篇
day 4 Javascript網頁程式管理線上購物系統
下一篇
day 6 javascript智慧停車場網頁程式管理系統
系列文
Javascript網頁程式管理系統25
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言