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

WHXBB 文章系統:文章插入數據庫實例

     編輯:PHP 相關知識

WHXBB 框架文章發布/插入操作示例

本範例演示如何使用 WHXBB_Article::Insert() 方法將新文章寫入 MySQL 數據庫,包含參數轉義、錯誤處理、成功提示與頁面跳轉完整流程。

完整代碼實現

<?php
$conn = @mysql_connect("localhost:3306", "test", "test");
include_once "js.class.php";
include_once "pager.class.php";
include_once "whxbb.class.php";
include_once "whxbb_article.class.php";

$article = new WHXBB_Article();

// 插入文章:標題、作者、內容
$result = $article->Insert("今日天氣", "whxbb", "今天北京局部地區有雨");

// 錯誤處理
if (WHXBB::isError($result)) {
    // 彈窗提示錯誤並返回上頁
    new WHXBB_Error(
        "錯誤:" . $result->GetMsg() . "(" . $result->GetNo() . ")",
        1,
        WHXBB_ERROR_ALERT + WHXBB_ERROR_RETURN
    );
    // 或自定義友好提示:
    // new WHXBB_Error("添加失敗,請您稍後再試", 1, WHXBB_ERROR_ALERT + WHXBB_ERROR_RETURN);
} else {
    // 成功處理
    JS::Alert("添加成功");
    JS::Goto("add.php"); // 跳轉到指定頁面
}
?>

Insert 方法內部實現解析 (來自 whxbb_article.class.php)

function Insert($title, $author, $content) {
    new WHXBB_Debug("Insert() Start");
    
    // 參數轉義處理 (防 SQL 注入、XSS)
    WHXBB::OperateString(&$title, "in");
    WHXBB::OperateString(&$author, "in");
    WHXBB::OperateString(&$content, "in");
    
    // 構建 SQL (注意:直接字符串拼接,有注入風險)
    $sql = "insert into article(title,author,content) values('$title','$author','$content')";
    
    if (!@mysql_query($sql, $this->_conn)) {
        return new WHXBB_Error("Insert() Failed.($sql)", 1021);
    }
    
    new WHXBB_Debug("Insert() Completed");
    return true;
}

安全性問題與修復

⚠ 高風險:SQL 注入漏洞
代碼直接將變量拼接進 SQL 字符串,OperateString 僅做基礎轉義,不等同於參數化查詢。攻擊者可構造 title = "test', 'hacker', 'payload'); DROP TABLE article; --" 導致數據庫破壞。

現代化重寫 (PDO + 預處理語句)

<?php
// 數據庫連接 (PDO)
$pdo = new PDO("mysql:host=localhost;dbname=test;charset=utf8", "user", "pass", [
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
]);

try {
    $stmt = $pdo->prepare("INSERT INTO article (title, author, content) VALUES (?, ?, ?)");
    $stmt->execute(["今日天氣", "whxbb", "今天北京局部地區有雨"]);
    
    echo "<script>alert('添加成功'); location.href='add.php';</script>";
} catch (PDOException $e) {
    error_log("Insert failed: " . $e->getMessage());
    echo "<script>alert('添加失敗,請稍後再試'); history.back();</script>";
}
?>

WHXBB 錯誤處理機制

  • WHXBB_ERROR_ECHO (1):直接輸出錯誤信息
  • WHXBB_ERROR_ALERT (2):JavaScript alert 彈窗
  • WHXBB_ERROR_RETURN (4):history.back() 返回上頁
  • 可組合使用:WHXBB_ERROR_ALERT + WHXBB_ERROR_RETURN = 6
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved