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

模擬 OICQ 即時通訊系統核心程式解析(三):訊息收發與閱讀

     編輯:PHP 相關知識

shortalk.php - 短訊息收發主程式

本模組處理使用者之間的私人訊息:檢視、標記已讀、回覆。採用框架頁面結構,搭配 JavaScript 彈出視窗。

核心流程

  1. 權限驗證:require("require.php") 檢查使用者合法登入(Session 驗證)。
  2. 動作分派:依 $action 參數決定行為:
    • view:檢視指定訊息($talknumber)。
    • send:發送新訊息(表單提交)。
    • reply:回覆訊息(預填寄件者)。
  3. 資料庫操作:
    • 讀取 forumtalk 表:sender, body, date。
    • 更新 readsign=1 標記已讀。
    • 關聯 userinfo 取得寄件者暱稱。
  4. 輸出介面:HTML 表單 + CSS 樣式,內嵌 JavaScript 處理彈窗關閉/重新整理父視窗。

關鍵程式碼片段

<?php
if ($action == 'view') {
    $sql = "SELECT sender, body, date FROM forumtalk WHERE id=$talknumber AND receiver='$name'";
    $row = mysql_fetch_array(mysql_query($sql));
    $msg = $row['body'];
    $message = ereg_replace(' ', ' ', $msg); // 保留空白顯示
    mysql_query("UPDATE forumtalk SET readsign=1 WHERE id=$talknumber");
    $senderNick = mysql_fetch_row(mysql_query("SELECT nickname FROM userinfo WHERE name='{$row['sender']}'"));
    // ... 輸出 HTML
}
?>

資料表結構回顧

CREATE TABLE forumtalk (
    id INT(11) NOT NULL AUTO_INCREMENT,
    sender VARCHAR(20) NOT NULL,
    receiver VARCHAR(20) NOT NULL,
    date INT(11) DEFAULT 0 NOT NULL,
    readsign TINYINT(4) DEFAULT 0 NOT NULL,
    body VARCHAR(200) NOT NULL,
    PRIMARY KEY (id)
);

安全性與改進建議

  • SQL 注入風險:直接拼接變數進 SQL,需改用 mysql_real_escape_string() 或 PDO 準備語句。
  • XSS 風險:$message 直接輸出,應經 htmlspecialchars() 轉義。
  • 棄用函數:ereg_replace、mysql_* 已移除,建議遷移至 mysqli/PDO + preg_replace。
  • 編碼一致性:頁面宣告 charset=gb2312,資料庫連線需同步 SET NAMES gbk。

前端互動細節

  • 彈出視窗以 window.open() 呼叫 shortalk.php?action=view&talknumber=...。
  • 閱讀後自動 window.opener.location.reload() 更新主視窗未讀計數。
  • 關閉按鈕觸發 window.close()。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved