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

PHP + MySQL 簡易評論系統實現

     編輯:PHP 綜合知識

系統架構

三文件極簡架構:

  • commentform.html:提交表單
  • commentadd.php:處理入庫
  • comments.php:顯示列表

資料表結構

CREATE TABLE `comtbl` (
  `postID` INT NOT NULL AUTO_INCREMENT,
  `postTITLE` TEXT NOT NULL,
  `posterNAME` TEXT NOT NULL,
  `posterEMAIL` TEXT NOT NULL,
  `postTIME` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `postTXT` TEXT NOT NULL,
  PRIMARY KEY (`postID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

核心代碼

1. 顯示評論 comments.php

<?php
// 資料庫連線(實際應用建議用 PDO/mysqli 預處理)
$dbcnx = mysql_connect('localhost', 'username', 'password');
mysql_select_db('comments', $dbcnx);

$result = mysql_query("SELECT * FROM comtbl ORDER BY postID DESC");
if (!$result) {
    die('<b>查詢失敗: ' . mysql_error() . '</b>');
}

while ($row = mysql_fetch_array($result)) {
    $msgTxt   = $row['postTXT'];
    $msgId    = $row['postID'];
    $SigName  = $row['posterNAME'];
    $SigDate  = $row['postTIME'];
    $msgTitle = $row['postTITLE'];
    $url      = $row['posterEMAIL'];

    // TIMESTAMP 格式:YYYYMMDDHHMMSS
    $yr  = substr($SigDate, 2, 2);
    $mo  = substr($SigDate, 4, 2);
    $da  = substr($SigDate, 6, 2);
    $hr  = substr($SigDate, 8, 2);
    $min = substr($SigDate, 10, 2);

    // 12/24 小時制轉換
    if ($hr > 11) {
        $x = 12;
        $timetype = 'PM';
        $hr = $hr - 12;
    } else {
        $timetype = 'AM';
    }

    // Email 連結處理
    if (!$url) {
        $url = '#';
    } else {
        $stat = $url;
        $url = 'mailto:' . $url;
    }

    // 輸出 HTML(建議使用模板引擎分離)
    echo "<div class='comment'>";
    echo "<h4>$msgTitle</h4>";
    echo "<p>$msgTxt</p>";
    echo "<small>由 <a href='$url'>$SigName</a> 於 $yr-$mo-$da $hr:$min $timetype 發表</small>";
    echo "</div>";
}
?>

2. 提交表單 commentform.html

<form action="commentadd.php" method="post">
<p>標題:<input type="text" name="title" required></p>
<p>姓名:<input type="text" name="name" required></p>
<p>Email:<input type="email" name="email"></p>
<p>內容:<textarea name="content" rows="5" required></textarea></p>
<p><input type="submit" value="發表評論"></p>
</form>

3. 處理入庫 commentadd.php

<?php
$dbcnx = mysql_connect('localhost', 'username', 'password');
mysql_select_db('comments', $dbcnx);

$title = mysql_real_escape_string($_POST['title']);
$name  = mysql_real_escape_string($_POST['name']);
$email = mysql_real_escape_string($_POST['email']);
$txt   = mysql_real_escape_string($_POST['content']);

$sql = "INSERT INTO comtbl (postTITLE, posterNAME, posterEMAIL, postTXT)
        VALUES ('$title', '$name', '$email', '$txt')";

if (mysql_query($sql)) {
    header('Location: comments.php');
} else {
    die('發表失敗: ' . mysql_error());
}
?>

安全性與改進建議

  1. 棄用 mysql_* 函數:PHP 7 已移除,必須改用 mysqli 或 PDO 並使用預處理語句
  2. 輸入驗證與過濾:長度限制、HTML 標籤過濾(strip_tags 或 HTMLPurifier)、XSS 防護
  3. 防灌水機制:驗證碼、頻率限制、內容關鍵字過濾
  4. 分頁顯示:大量評論時採用 LIMIT 分頁,避免一次性載入過多
  5. 時間處理:使用 DATE_FORMAT() 在 SQL 層格式化,或 PHP DateTime 物件操作,勿手動解析 TIMESTAMP 字串
  6. 郵箱顯示:避免直接輸出 mailto: 導致爬蟲收集,可改用聯繫表單或 JS 動態生成
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved