connect.inc將資料庫連線、輸入處理、HTML 模板、錯誤處理集中管理,所有腳本以 require('connect.inc') 載入。
<?php
// 連線設定
$hostname = 'localhost';
$username = 'phpstar';
$password = 'phpstar';
$dbname = 'script';
$tablename = 'php_script';
$link_id = mysql_connect($hostname, $username, $password);
if (!$link_id) {
die('<html><body>資料庫連線失敗</body></html>');
}
// 統一處理 GET/POST 輸入,鍵名轉小寫存入 $arr_request
$arr_request = [];
if (count($_GET)) {
foreach ($_GET as $k => $v) $arr_request[strtolower($k)] = $v;
}
if (count($_POST)) {
foreach ($_POST as $k => $v) $arr_request[strtolower($k)] = $v;
}
// HTML 模板函式
function html_header($title) {
echo "<html><head><title>$title</title></head><body bgcolor='#CCCCCC'>";
}
function html_footer() {
global $link_id;
mysql_close($link_id);
echo "</body></html>";
}
function html_error_exit($msg) {
echo "<html><body>$msg<br>Error: (" . mysql_errno() . ") " . mysql_error() . "</body></html>";
exit();
}
?>
createTable.php<?php
require('connect.inc');
$sql = "CREATE TABLE php_script (
key_script INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
date_created DATETIME DEFAULT '0000-00-00 00:00:00',
date_updated DATETIME DEFAULT '0000-00-00 00:00:00',
flag_deleted ENUM('Y','N') DEFAULT 'N' NOT NULL,
script_name VARCHAR(20) NOT NULL,
script_size VARCHAR(10) NOT NULL,
script_describe VARCHAR(200) NOT NULL,
author_name VARCHAR(20) NOT NULL,
author_email VARCHAR(20) NOT NULL,
author_homepage VARCHAR(30) NOT NULL,
PRIMARY KEY (key_script)
)";
$result = mysql_db_query($dbname, $sql, $link_id);
echo $result ? "ok! Table $tablename created!" : "Failed!";
?>
script_insert_action.php - 關鍵:變數解構避免引號衝突<?php
require('connect.inc');
if ($arr_request['action'] === 'insert') {
$current_date = date('Y-m-d H:i:s');
// 將陣列元素解構為獨立變數,避免 SQL 字串中單引號嵌套問題
$script_name = $arr_request['script_name'];
$script_size = $arr_request['script_size'];
$script_describe = $arr_request['script_describe'];
$author_name = $arr_request['author_name'];
$author_email = $arr_request['author_email'];
$author_homepage = $arr_request['author_homepage'];
$sql = "INSERT INTO $tablename
(date_created, date_updated, script_name, script_size, script_describe,
author_name, author_email, author_homepage)
VALUES
('$current_date', '$current_date', '$script_name', '$script_size',
'$script_describe', '$author_name', '$author_email', '$author_homepage')";
$result = mysql_db_query($dbname, $sql, $link_id);
if (!$result) {
html_error_exit('MySQL 插入失敗!');
} else {
html_header('成功');
echo "<center>MySQL 插入命令成功<br></center>";
html_footer();
}
}
?>
connect.inc 讓每支腳本自動建立連線並關閉,避免重複代碼。$_GET/$_POST 鍵名轉小寫存入 $arr_request,後續程式碼大小寫不敏感。'$var' 置入字串,解決「陣列鍵名含單引號導致字串終止」的經典問題。現代寫法應改用預處理語句(mysqli_prepare/PDO::prepare)徹底杜絕 SQL 注入。html_error_exit() 同時輸出錯誤代碼與訊息,利於除錯。password_hash() / password_verify()。