基于MySQL与PHP的传统新闻发布系统开发详解

晚来风
晚来风
发布时间:2026-10-14| 3人浏览过
原创

本文详细介绍如何利用PHP和MySQL构建一个基础新闻发布系统。内容涵盖数据库表的规范创建、使用原生MySQL函数进行数据增删改查(CRUD)、新闻列表的分页算法逻辑、以及基于Cookie的管理员身份验证与注销流程。通过解析关键代码片段,帮助理解传统PHP架构下动态网页交互的核心原理。

结果与目标

最终目标是构建一个具备后台管理与前台展示功能的新闻系统,支持管理员添加、修改、删除新闻,并能以分页形式向访客展示新闻列表及详细内容。

准备条件

  1. 运行环境:支持PHP 5.x及以上版本的Web服务器(如Apache/Nginx)及MySQL数据库服务。
  2. 工具要求:浏览器用于测试,文本编辑器或IDE用于编写代码。
  3. 数据库权限:拥有创建数据库、数据表及执行SQL语句的用户权限(通常默认用户为root)。

真实操作顺序

第1步:数据库表结构设计

目的:规划存储新闻内容与管理员信息的数据结构。
操作:在phpMyAdmin中建立名为 yayu 的数据库,并创建以下两张表:

1. 新闻表 news 字段定义:

  • id (tinyint):主键,自增(auto-increment),唯一标识每条新闻。
  • title (varchar, 60):新闻标题。
  • author (varchar, 8):发布者/作者名。
  • content (text):新闻正文内容。
  • source (varchar, 60):新闻来源。
  • date (datetime):发布时间。

2. 用户表 users 字段定义:

  • id (tinyint):主键,自增。
  • name (varchar, 8):管理员用户名。
  • password (varchar, 32):用户密码。
  • mail (varchar, 30):联系邮箱。

第2步:建立数据库连接与基础操作封装

目的:确保脚本能与数据库通信并进行数据请求。
入口:所有涉及数据库操作的PHP文件顶部。
动作:

  1. 连接主机:使用 mysql_pconnect("localhost", "root", "") 建立持久连接,返回连接ID(如 $link)。相比 mysql_connect,持久连接能减少服务器负担。
  2. 选择数据库:调用 mysql_select_db("yayu", $link) 指定当前操作库。
  3. 发送请求:使用 mysql_query($sql, $link) 执行SQL。对于 SELECT 返回结果集ID,对于 INSERT/UPDATE/DELETE 返回布尔值。

注意:文中使用的 mysql_* 系列函数已在较新PHP版本中废弃,现代开发推荐使用 PDO 或 mysqli 以保证安全性与兼容性。

第3步:添加新闻功能实现(插入操作)

目的:通过HTML表单收集数据并存入数据库。
参数:POST方式提交,表单元素名需对应数据库字段名。

完整代码逻辑:

// 假设已建立 $link 连接
if(@$_POST["submit"]){
    // 1. 获取表单数据
    $title = $_POST["title"];
    $author = $_POST["author"];
    $content = $_POST["content"]; // 实际使用中需做过滤防止注入
    $source = $_POST["source"];
    
    // 2. 获取当前时间
    $date = date("Y-m-d H:i:s");
    
    // 3. 执行插入SQL (id字段因auto_increment无需手动赋值)
    $sql = "INSERT INTO news(title, date, author, source, content) VALUES('$title', '$date', '$author', '$source', '$content')";
    mysql_query($sql, $link);
}

第4步:新闻列表展示与分页算法

目的:将数据库中的新闻按时间倒序输出,并处理大量数据的分页显示。 核心逻辑:

  1. 计算总页数:
    $respage = mysql_query("SELECT COUNT(*) FROM news", $link);
    $row = mysql_fetch_row($respage);
    $num = $row[0]; // 总记录数
    $recordnum = 10; // 每页显示条数
    $pages = ceil($num / $recordnum); // 总页数
  2. 确定当前页码:通过 $_GET["page"] 获取URL参数。若未指定则默认为第1页。计算前一页($pre)和后一页($next)链接。
  3. 计算偏移量:
    $current = $_GET["page"] ? $_GET["page"] : 1;
    $now = ($current - 1) * $recordnum;
  4. 查询当前页数据:
    $sql = "SELECT * FROM news ORDER BY id DESC LIMIT $now, $recordnum";
    $res = mysql_query($sql, $link);
    while($rows = mysql_fetch_assoc($res)){
        echo "{$rows['title']}
    "; }
  5. 生成分页导航HTML:拼接“首页”、“上一页”、“下一页”、“末页”及下拉跳转框的代码至 $echopage 变量并在页面底部输出。

第5步:单条新闻详情查看

目的:根据URL传入的ID展示具体文章内容。
动作:

  1. 判断是否存在 $_GET["id"]。
  2. 构造查询语句:
    $sql = "SELECT * FROM news WHERE id={$_GET['id']}";
  3. 执行查询并以表格或固定格式输出 $rows['title'], $rows['date'], $rows['content'] 等字段内容。

第6步:修改与删除新闻

目的:提供编辑界面和管理操作按钮。 操作流程:

  1. 进入编辑页:点击列表中的“修改”链接,URL携带ID参数(如 editnews.php?id=1)。
  2. 回显表单:根据ID查询新闻数据,填充到HTML表单的 input value="" 属性中。表单 action 指向处理脚本(如 takeedit.php)。
  3. 处理修改:接收POST数据,执行 UPDATE news SET title='$title', content='$content'... WHERE id=$id。
  4. 处理删除:接收删除信号,执行 DELETE FROM news WHERE id=$id LIMIT 1。

第7步:用户管理(注册、登录与注销)

目的:限制后台访问权限,仅允许管理员操作。

  1. 注册:
    - 检查必填项是否为空,两次输入密码是否一致。 - 查询数据库判断用户名是否已被占用:
    $sql = "SELECT id FROM users WHERE name='$name'";
    - 若不存在,插入新记录:
    INSERT INTO users(name, password) VALUES('$name', '$password')
  2. 登录:
    - 验证用户名和密码是否在数据库中匹配。
    - 成功后设置Cookie:
    setcookie("username", $_POST["username"]);
    - 重定向至后台管理页 header("Location: admin.php")。
  3. 注销:
    - 触发 ?action=logout 时,清除Cookie:
    setcookie("username", "");
    - 跳转至首页 header("Location: index.php")。
  4. 权限判断:在后台页面头部使用 if(!@$_COOKIE["username"]) { ... } 拦截非法访问者。

完成判断

当用户在phpMyAdmin中能成功看到news和users表结构,且在网站首页能看到按时间倒序排列的分页新闻列表,点击标题可查看详情,且通过正确账号登录后能在后台进行文章的增删改操作,即视为系统基础功能开发完成。

简要总结

本教程梳理了一个经典PHP新闻系统的核心代码逻辑。从底层数据库连接、中间层的SQL CRUD操作,到上层HTML表单交互与URL参数传递,再到Session/Cookie状态管理,展现了早期PHP开发的典型模式。虽然代码示例使用了已淘汰的API且存在SQL注入风险(未使用预处理),但其展示的数据流向与状态控制思路对于理解Web应用基础依然具有参考价值。

以上就是基于PHP与MySQL开发新闻发布系统的详细内容,更多关于传统PHP架构网站开发的技术资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。