本模組處理使用者之間的私人訊息:檢視、標記已讀、回覆。採用框架頁面結構,搭配 JavaScript 彈出視窗。
require("require.php") 檢查使用者合法登入(Session 驗證)。$action 參數決定行為:
view:檢視指定訊息($talknumber)。send:發送新訊息(表單提交)。reply:回覆訊息(預填寄件者)。forumtalk 表:sender, body, date。readsign=1 標記已讀。userinfo 取得寄件者暱稱。<?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)
);
mysql_real_escape_string() 或 PDO 準備語句。$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()。