記錄從零構建簡易文章後台的關鍵步驟:配置文件分離、數據庫連接封裝、發布/管理界面與處理邏輯分離,並記錄一次棘手的 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 避免重複引入,錯誤即時終止並輸出信息。
標準 HTML 表單,action="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>";
}
環境: WAMP + MySQL + Zend Studio + 瀏覽器全鏈路聲稱 UTF-8
現象: 中文入庫顯示亂碼(如 ??? 或 锟斤拷)
已嘗試:
DEFAULT CHARSET=utf8<meta charset="utf-8">header('Content-Type: text/html; charset=utf-8')AddDefaultCharset UTF-8SET NAMES utf8排查思路:
mysqli_connect 後是否真正執行了 SET NAMES utf8(無報錯不代表執行成功)SELECT HEX(title) FROM article 對比 UTF-8 編碼php.ini default_charset = "UTF-8"mysqli_set_charset($con, 'utf8') 替代 SQL 語句最終定位: 文件保存編碼與聲明不一致(編輯器誤存為 ANSI/GBK)。統一轉為 **UTF-8 無 BOM** 後問題解決。