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

PHP 與 MySQL 實踐:後台文章發布系統構建(配置分離、表單處理、亂碼排查)

     編輯:PHP 相關知識

PHP 與 MySQL 實踐:後台文章發布系統構建

記錄從零構建簡易文章後台的關鍵步驟:配置文件分離、數據庫連接封裝、發布/管理界面與處理邏輯分離,並記錄一次棘手的 UTF-8 亂碼排查過程。

一、配置與連接分離

// config.php
define('HOST', '127.0.0.1');
define('USERNAME', 'root');
define('PASSWORD', '');
// connect.php
require_once 'config.php';
$con = mysqli_connect(HOST, USERNAME, PASSWORD);
if (!$con) die(mysqli_error($con));

if (!mysqli_select_db($con, 'info')) die(mysqli_error($con));
if (!mysqli_query($con, 'SET NAMES utf8')) die(mysqli_error($con));

採用 require_once 避免重複引入,錯誤即時終止並輸出信息。

二、發布文章模塊

article.add.php - 表單頁

標準 HTML 表單,action="article.add.handle.php",字段:標題、作者、簡介、內容。

article.add.handle.php - 處理邏輯

require_once '../connect.php';

// 校驗必填
if (!isset($_POST['title']) || empty($_POST['title'])) {
    echo "<script>alert('標題不能為空');window.location.href='article.add.php';</script>";
    exit;
}

$title = $_POST['title'];
$author = $_POST['author'];
$description = $_POST['description'];
$content = $_POST['content'];
$dateline = time();

$insertsql = "INSERT INTO article (title, author, description, content, dateline) 
              VALUES ('$title', '$author', '$description', '$content', $dateline)";

if (mysqli_query($con, $insertsql)) {
    echo "<script>alert('發布成功');window.location.href='article.manage.php';</script>";
} else {
    echo "<script>alert('發布失敗');window.location.href='article.add.php';</script>";
}

三、UTF-8 亂碼問題排查記錄

環境: WAMP + MySQL + Zend Studio + 瀏覽器全鏈路聲稱 UTF-8

現象: 中文入庫顯示亂碼(如 ??? 或 锟斤拷)

已嘗試:

  • 數據庫表字符集 DEFAULT CHARSET=utf8
  • 表單頁 <meta charset="utf-8">
  • PHP header('Content-Type: text/html; charset=utf-8')
  • Apache AddDefaultCharset UTF-8
  • MySQL 連接 SET NAMES utf8

排查思路:

  1. 檢查 mysqli_connect 後是否真正執行了 SET NAMES utf8(無報錯不代表執行成功)
  2. 驗證數據庫實際存儲字節:SELECT HEX(title) FROM article 對比 UTF-8 編碼
  3. 確認 php.ini default_charset = "UTF-8"
  4. 檢查 HTML 文件本身編碼(編輯器保存為 UTF-8 無 BOM)
  5. 嘗試 mysqli_set_charset($con, 'utf8') 替代 SQL 語句

最終定位: 文件保存編碼與聲明不一致(編輯器誤存為 ANSI/GBK)。統一轉為 **UTF-8 無 BOM** 後問題解決。

經驗總結

  • 配置分離、連接封裝是良好習慣
  • 表單與處理分離(add vs add.handle)職責清晰
  • 亂碼排查遵循:**文件編碼 → 頁面聲明 → 連接字符集 → 數據庫存儲 → 讀取輸出** 全鏈路檢查
  • 生產環境必須使用預處理語句防注入
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved