项目概述
我们将构建一个基于 PHP + MySQL 的现代化传媒公司网站,该网站将具备以下核心功能:

- 首页:展示公司简介、核心业务、最新案例和团队风采。
- 服务展示:详细介绍公司的各项服务,如品牌策划、影视制作、数字营销等。
- 作品案例:以画廊或列表形式展示公司的成功案例,支持分类筛选。
- 关于我们:包含公司介绍、发展历程、企业文化、团队成员介绍。
- 新闻资讯:发布行业动态和公司新闻,支持分页和详情页。
- 联系我们:提供联系方式、在线地图和留言表单。
技术选型
- 后端:PHP 7.4+ (推荐使用 PHP 8.0+ 以获得更好的性能)
- 前端:HTML5, CSS3, JavaScript (使用 Bootstrap 5 快速构建响应式布局)
- 数据库:MySQL 5.7+
- 模板引擎:原生 PHP (为了简单易懂,不引入额外依赖,但推荐使用 Twig 或 Blade)
- Web 服务器:Apache 或 Nginx
项目文件结构
一个清晰的项目结构是良好代码的开始。
media-company-website/
├── assets/ # 静态资源
│ ├── css/ # 样式文件
│ │ └── style.css # 主样式
│ ├── js/ # JavaScript 文件
│ │ └── main.js # 主JS脚本
│ └── images/ # 图片资源
│ ├── logo.png
│ └── uploads/ # 上传的图片案例等
├── config/ # 配置文件
│ └── database.php # 数据库连接配置
├── core/ # 核心类库
│ ├── Database.php # 数据库操作类 (PDO封装)
│ └── Router.php # 简单的路由类
├── includes/ # 公共组件
│ ├── header.php # 公共头部
│ ├── footer.php # 公共底部
│ └── navigation.php # 导航栏
├── pages/ # 页面文件
│ ├── index.php # 首页
│ ├── services.php # 服务页面
│ ├── portfolio.php # 作品案例页面
│ ├── about.php # 关于我们
│ ├── news.php # 新闻列表页
│ ├── news-detail.php # 新闻详情页
│ └── contact.php # 联系我们
├── admin/ # 后台管理目录 (可选)
│ └── index.php # 后台登录入口
├── vendor/ # Composer 依赖包
└── index.php # 网站入口文件
核心代码实现
数据库配置 (config/database.php)
<?php
// config/database.php
define('DB_HOST', 'localhost');
define('DB_USER', 'root');
define('DB_PASS', 'your_password');
define('DB_NAME', 'media_company_db');
try {
$pdo = new PDO("mysql:host=" . DB_HOST . ";dbname=" . DB_NAME, DB_USER, DB_PASS);
// 设置PDO错误模式为异常
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// 设置默认的获取数据方式为关联数组
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
} catch(PDOException $e) {
die("连接失败: " . $e->getMessage());
}
?>
数据库操作类 (core/Database.php)
这是一个简单的PDO封装,用于简化数据库查询。
<?php
// core/Database.php
require_once __DIR__ . '/../config/database.php';
class Database {
private static $instance = null;
private $pdo;
private function __construct() {
// $pdo 连接已在 database.php 中建立
global $pdo;
$this->pdo = $pdo;
}
// 单例模式获取实例
public static function getInstance() {
if (self::$instance === null) {
self::$instance = new self();
}
return self::$instance;
}
// 执行查询
public function query($sql, $params = []) {
$stmt = $this->pdo->prepare($sql);
$stmt->execute($params);
return $stmt;
}
// 获取所有结果
public function fetchAll($sql, $params = []) {
return $this->query($sql, $params)->fetchAll();
}
// 获取单个结果
public function fetch($sql, $params = []) {
return $this->query($sql, $params)->fetch();
}
// 获取最后插入的ID
public function lastInsertId() {
return $this->pdo->lastInsertId();
}
}
?>
数据库表结构 (示例)
您需要先创建数据库和表,这里以 cases (案例表) 和 news (新闻表) 为例。
-- 创建数据库
CREATE DATABASE media_company_db;
USE media_company_db;
-- 案例表
CREATE TABLE cases (
id INT AUTO_INCREMENT PRIMARY KEY,VARCHAR(255) NOT NULL,
category VARCHAR(100) NOT NULL,
description TEXT,
image_url VARCHAR(255) NOT NULL,
client_name VARCHAR(255),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 新闻表
CREATE TABLE news (
id INT AUTO_INCREMENT PRIMARY KEY,VARCHAR(255) NOT NULL,
summary TEXT,
content TEXT NOT NULL,
image_url VARCHAR(255),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 插入一些示例数据
INSERT INTO cases (title, category, description, image_url, client_name) VALUES
('XX品牌年度宣传片', '影视制作', '为XX品牌打造的年度形象宣传片,展现了品牌的核心价值...', 'uploads/case1.jpg', 'XX科技有限公司'),
('YY产品发布会', '活动策划', '全程策划并执行了YY新产品的线上发布会...', 'uploads/case2.jpg', 'YY集团');
INSERT INTO news (title, summary, content, image_url) VALUES
('2025年数字营销趋势报告', '探讨最新的数字营销策略和工具...', '(这里是新闻的详细内容)...', 'uploads/news1.jpg'),
('公司乔迁新址,再启新程', '我们很高兴地宣布,公司已正式迁至...', '(这里是新闻的详细内容)...', 'uploads/news2.jpg');
入口文件与路由 (index.php)
我们使用一个简单的 index.php 作为入口,根据 page 参数来加载不同的页面。

<?php
// index.php
// 定义根目录
define('ROOT_PATH', __DIR__);
// 自动加载类
spl_autoload_register(function ($class_name) {
$file = ROOT_PATH . '/core/' . $class_name . '.php';
if (file_exists($file)) {
require_once $file;
}
});
// 获取请求的页面
$page = isset($_GET['page']) ? $_GET['page'] : 'index';
// 页面映射
$pages = [
'index' => 'index.php',
'services' => 'services.php',
'portfolio' => 'portfolio.php',
'about' => 'about.php',
'news' => 'news.php',
'news-detail' => 'news-detail.php',
'contact' => 'contact.php',
// 后台页面
'admin' => 'admin/index.php'
];
// 安全检查,防止目录遍历攻击
$page = preg_replace('/[^a-zA-Z0-9_-]/', '', $page);
if (array_key_exists($page, $pages)) {
$file_path = ROOT_PATH . '/pages/' . $pages[$page];
if (file_exists($file_path)) {
require_once $file_path;
} else {
http_response_code(404);
echo "页面不存在";
}
} else {
http_response_code(404);
echo "页面不存在";
}
?>
公共组件 (includes/header.php)
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"><?php echo $page_title ?? '传媒公司 - 专业品牌营销解决方案'; ?></title>
<!-- 引入 Bootstrap 5 CSS -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<!-- 引入自定义CSS -->
<link rel="stylesheet" href="/assets/css/style.css">
</head>
<body>
<!-- 导航栏 -->
<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
<div class="container">
<a class="navbar-brand" href="/">传媒公司</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav ms-auto">
<li class="nav-item"><a class="nav-link" href="/">首页</a></li>
<li class="nav-item"><a class="nav-link" href="/index.php?page=services">服务</a></li>
<li class="nav-item"><a class="nav-link" href="/index.php?page=portfolio">案例</a></li>
<li class="nav-item"><a class="nav-link" href="/index.php?page=about">关于我们</a></li>
<li class="nav-item"><a class="nav-link" href="/index.php?page=news">新闻</a></li>
<li class="nav-item"><a class="nav-link" href="/index.php?page=contact">联系我们</a></li>
</ul>
</div>
</div>
</nav>
<!-- 页面内容容器 -->
<div class="container my-5">
公共组件 (includes/footer.php)
</div> <!-- /.container -->
<footer class="bg-dark text-white py-4 mt-5">
<div class="container text-center">
<p>© <?php echo date('Y'); ?> 传媒公司. 保留所有权利.</p>
</div>
</footer>
<!-- 引入 Bootstrap 5 JS -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
<!-- 引入自定义JS -->
<script src="/assets/js/main.js"></script>
</body>
</html>
页面示例:首页 (pages/index.php)
<?php
// pages/index.php
// 设置页面标题
$page_title = "首页 - 传媒公司";
// 引入头部
require_once __DIR__ . '/../includes/header.php';
// 获取数据库实例
$db = Database::getInstance();
// 获取最新案例
$latest_cases = $db->fetchAll("SELECT * FROM cases ORDER BY created_at DESC LIMIT 3");
// 获取最新新闻
$latest_news = $db->fetchAll("SELECT * FROM news ORDER BY created_at DESC LIMIT 3");
?>
<!-- Hero Section -->
<div class="jumbotron bg-cover bg-center text-white" style="background-image: linear-gradient(rgba(0,0,0,0.5), rgba(0,0,0,0.5)), url('/assets/images/hero-bg.jpg'); height: 500px; display: flex; align-items: center; justify-content: center;">
<div class="text-center">
<h1 class="display-4">创意驱动品牌,科技引领未来</h1>
<p class="lead">我们是一家专注于品牌策划、影视制作和数字营销的综合性传媒公司。</p>
<a href="/index.php?page=contact" class="btn btn-primary btn-lg">立即合作</a>
</div>
</div>
<!-- Services Section -->
<div class="my-5">
<h2 class="text-center mb-4">我们的服务</h2>
<div class="row">
<div class="col-md-4">
<div class="card">
<div class="card-body">
<h5 class="card-title">品牌策划</h5>
<p class="card-text">从市场分析到品牌定位,为您提供全方位的品牌战略解决方案。</p>
</div>
</div>
</div>
<div class="col-md-4">
<div class="card">
<div class="card-body">
<h5 class="card-title">影视制作</h5>
<p class="card-text">专业的策划、拍摄、后期团队,打造高品质的视觉内容。</p>
</div>
</div>
</div>
<div class="col-md-4">
<div class="card">
<div class="card-body">
<h5 class="card-title">数字营销</h5>
<p class="card-text">整合社交媒体、搜索引擎等渠道,提升您的线上影响力。</p>
</div>
</div>
</div>
</div>
</div>
<!-- Portfolio Preview Section -->
<div class="my-5 bg-light p-4 rounded">
<h2 class="text-center mb-4">精选案例</h2>
<div class="row">
<?php foreach ($latest_cases as $case): ?>
<div class="col-md-4 mb-3">
<div class="card">
<img src="<?php echo htmlspecialchars($case['image_url']); ?>" class="card-img-top" alt="<?php echo htmlspecialchars($case['title']); ?>">
<div class="card-body">
<h5 class="card-title"><?php echo htmlspecialchars($case['title']); ?></h5>
<p class="card-text"><?php echo htmlspecialchars($case['description']); ?></p>
<a href="/index.php?page=portfolio" class="btn btn-outline-primary">查看更多</a>
</div>
</div>
</div>
<?php endforeach; ?>
</div>
</div>
<!-- News Preview Section -->
<div class="my-5">
<h2 class="text-center mb-4">最新资讯</h2>
<div class="row">
<?php foreach ($latest_news as $news): ?>
<div class="col-md-6 mb-3">
<div class="card">
<div class="row g-0">
<div class="col-md-4">
<img src="<?php echo htmlspecialchars($news['image_url']); ?>" class="img-fluid rounded-start h-100 object-fit-cover" alt="<?php echo htmlspecialchars($news['title']); ?>">
</div>
<div class="col-md-8">
<div class="card-body">
<h5 class="card-title"><?php echo htmlspecialchars($news['title']); ?></h5>
<p class="card-text"><?php echo htmlspecialchars($news['summary']); ?></p>
<a href="/index.php?page=news-detail&id=<?php echo $news['id']; ?>" class="btn btn-sm btn-primary">阅读更多</a>
</div>
</div>
</div>
</div>
</div>
<?php endforeach; ?>
</div>
</div>
<?php
// 引入底部
require_once __DIR__ . '/../includes/footer.php';
?>
页面示例:联系我们 (pages/contact.php)
<?php
// pages/contact.php
$page_title = "联系我们 - 传媒公司";
// 处理表单提交
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$name = trim($_POST['name']);
$email = trim($_POST['email']);
$message = trim($_POST['message']);
// 简单验证
if (!empty($name) && !empty($email) && !empty($message)) {
// 这里应该将数据存入数据库或发送邮件
// 为了演示,我们只输出成功信息
$success_message = "感谢您的留言,我们会尽快与您联系!";
} else {
$error_message = "请填写所有必填项。";
}
}
require_once __DIR__ . '/../includes/header.php';
?>
<div class="row">
<div class="col-md-6">
<h2>联系方式</h2>
<p><strong>地址:</strong> 北京市朝阳区XX大厦A座1001室</p>
<p><strong>电话:</strong> 010-12345678</p>
<p><strong>邮箱:</strong> contact@media-company.com</p>
<!-- 使用第三方地图服务,如高德或百度 -->
<div id="map" style="width: 100%; height: 300px; margin-top: 20px; background-color: #f0f0f0;">
<!-- 地图图片占位符 -->
<img src="https://via.placeholder.com/600x300?text=Map+Placeholder" alt="公司地图" style="width: 100%; height: 100%; object-fit: cover;">
</div>
</div>
<div class="col-md-6">
<h2>给我们留言</h2>
<?php if (isset($success_message)): ?>
<div class="alert alert-success"><?php echo $success_message; ?></div>
<?php endif; ?>
<?php if (isset($error_message)): ?>
<div class="alert alert-danger"><?php echo $error_message; ?></div>
<?php endif; ?>
<form action="/index.php?page=contact" method="post">
<div class="mb-3">
<label for="name" class="form-label">您的姓名</label>
<input type="text" class="form-control" id="name" name="name" required>
</div>
<div class="mb-3">
<label for="email" class="form-label">电子邮箱</label>
<input type="email" class="form-control" id="email" name="email" required>
</div>
<div class="mb-3">
<label for="message" class="form-label">留言内容</label>
<textarea class="form-control" id="message" name="message" rows="5" required></textarea>
</div>
<button type="submit" class="btn btn-primary">提交留言</button>
</form>
</div>
</div>
<?php
require_once __DIR__ . '/../includes/footer.php';
?>
后续开发建议
-
后台管理系统:
- 创建一个独立的
admin目录,通过简单的身份验证(如 session)保护。 - 开发增删改查功能,让管理员可以方便地管理新闻、案例、服务等内容,而无需直接操作数据库。
- 创建一个独立的
-
内容管理系统:
- 对于更复杂的需求,可以考虑集成成熟的 CMS 框架,如 WordPress 或 Drupal,它们有强大的插件和主题生态,能极大提高开发效率。
-
前端优化:
- 使用 Vue.js 或 React 等现代前端框架构建单页应用,提升用户体验。
- 实现图片懒加载、SEO优化等。
-
安全性:
(图片来源网络,侵删)- 对所有用户输入进行过滤和验证,防止 SQL 注入和 XSS 攻击。
- 使用 HTTPS 加密网站。
这份源码提供了一个坚实的基础,您可以根据具体需求进行修改和扩展,祝您开发顺利!
