首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP GET 參數傳遞用戶標識實現郵件發送功能

     編輯:PHP 綜合知識

基於 GET 參數傳遞用戶 ID 實現簡單的站內信/郵件通知系統。本文展示完整的發送、列表、查看、登錄、登出流程,適合理解基礎 Web 應用狀態管理。

功能模塊劃分

文件功能核心邏輯
reg.php用戶/評論列表查詢 comments 表,生成查看/發送鏈接
newfile.php詳情 + 發送入口顯示內容,生成發送郵件鏈接,檢查新郵件
send_email.php發送處理寫入 email 表,標記 flag='no'
see_email.php查看郵件查詢 email 表,更新 flag='yes'
login.php模擬登錄設置 $_SESSION['id']
delete_session.php登出銷毀 Session

核心代碼實現 (現代化重寫版)

數據庫表結構

CREATE TABLE `comments` (
  `id` INT AUTO_INCREMENT PRIMARY KEY,
  `content` TEXT NOT NULL,
  `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE `email` (
  `id` INT AUTO_INCREMENT PRIMARY KEY,
  `sender_id` INT NOT NULL,
  `accepter_id` INT NOT NULL,
  `flag` ENUM('no','yes') DEFAULT 'no',
  `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

1. 列表頁 (reg.php)

<?php
require_once 'db.php'; // PDO 連接
session_start();

$stmt = $pdo->query("SELECT id, content, created_at FROM comments ORDER BY created_at DESC");
$comments = $stmt->fetchAll(PDO::FETCH_ASSOC);
?>
<h2>評論列表</h2>
<ul>
<?php foreach ($comments as $c): ?>
    <li>
        <strong></strong>
        <small></small>
        <a href="newfile.php?id=>查看詳情/發送郵件</a>
    </li>
<?php endforeach; ?>
</ul>

2. 詳情頁 (newfile.php)

<?php
require_once 'db.php';
session_start();

$id = (int)($_GET['id'] ?? 0);
if (!$id) die('無效 ID');

// 獲取評論內容
$stmt = $pdo->prepare("SELECT * FROM comments WHERE id = ?");
$stmt->execute([$id]);
$comment = $stmt->fetch(PDO::FETCH_ASSOC);
if (!$comment) die('評論不存在');

// 檢查當前用戶是否有新郵件
$hasNewMail = false;
if (isset($_SESSION['user_id'])) {
    $stmt = $pdo->prepare("SELECT 1 FROM email WHERE accepter_id = ? AND flag = 'no' LIMIT 1");
    $stmt->execute([$_SESSION['user_id']]);
    $hasNewMail = (bool)$stmt->fetchColumn();
}
?>
<h3></h3>
<small></small>
<hr>
<a href="send_email.php?id=>發送郵件給作者</a>

<?php if ($hasNewMail): ?>
    <strong style="color:red"><a href="see_email.php">您有新郵件!</a></strong>
<?php endif; ?>

3. 發送處理 (send_email.php)

<?php
require_once 'db.php';
session_start();

if (!isset($_SESSION['user_id'])) {
    die('請先登錄');
}

$recipientId = (int)($_GET['id'] ?? 0);
if (!$recipientId) die('無效接收者');

$stmt = $pdo->prepare("INSERT INTO email (sender_id, accepter_id, flag) VALUES (?, ?, 'no')");
$stmt->execute([$_SESSION['user_id'], $recipientId]);

echo "<script>alert('發送成功'); window.location.href='reg.php';</script>";

4. 登錄模擬 (login.php)

<?php
session_start();
// 實際項目應驗證用戶名密碼
$_SESSION['user_id'] = 15; // 模擬用戶 ID
echo "登錄成功 <a href='reg.php'>查看列表</a> | <a href='delete_session.php'>登出</a>";

5. 登出 (delete_session.php)

<?php
session_start();
session_destroy();
echo "<script>alert('已登出'); window.location.href='login.php';</script>";

安全性關鍵點

  1. SQL 注入防護:全程使用 PDO 預處理語句
  2. XSS 防護:輸出時 htmlspecialchars()
  3. CSRF 缺失:發送操作應添加 Token 驗證
  4. 權限校驗:發送前確認發送者/接收者合法性
  5. ID 遍歷風險:順序 ID 易被枚舉,建議 UUID 或加密 ID

架構改進建議

1. RESTful 路由設計

GET    /comments           # 列表
GET    /comments/{id}      # 詳情
POST   /comments/{id}/mail # 發送郵件
GET    /mail/inbox         # 收件箱
PATCH  /mail/{id}/read     # 標記已讀

2. 統一響應格式

function jsonResponse($data, $code = 200) {
    http_response_code($code);
    header('Content-Type: application/json');
    echo json_encode(['code' => $code, 'data' => $data]);
    exit;
}

3. 服務層分離

class MailService {
    public function send(int $from, int $to, string $content): bool { /* ... */ }
    public function getInbox(int $userId, int $page = 1): array { /* ... */ }
    public function markRead(int $mailId, int $userId): bool { /* ... */ }
}

這個簡單示例展示了 Web 應用的核心要素:路由、控制器、服務、數據庫、會話、安全。實際項目中應按層次組織代碼。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved