当前位置: 首页 > news >正文

关于PHP学习

用PHP写一个简单的博客文章功能,通常需要结合数据库存储文章数据,并通过PHP处理数据的增删改查。以下是一个基础的实现思路和示例代码:

 

一、核心功能设计

 

1. 数据库设计(以MySQL为例):存储文章标题、内容、发布时间等信息

2. 文章列表页:展示所有博客文章的标题和发布时间

3. 文章详情页:显示单篇文章的完整内容

4. 简单的发布功能(可选):添加新文章

 

二、数据库表设计

 

先创建一个 articles 表,用于存储文章数据:

 

CREATE TABLE articles (

  id INT PRIMARY KEY AUTO_INCREMENT,

  title VARCHAR(255) NOT NULL, -- 文章标题

  content TEXT NOT NULL, -- 文章内容

  created_at DATETIME DEFAULT CURRENT_TIMESTAMP -- 发布时间

);

 

 

三、PHP代码实现(示例)

 

1. 数据库连接配置(config.php)

 

<?php

$host = 'localhost'; // 数据库主机

$dbname = 'blog'; // 数据库名

$username = 'root'; // 数据库用户名

$password = ''; // 数据库密码

 

// 连接数据库

try {

    $pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8", $username, $password);

    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

} catch (PDOException $e) {

    die("数据库连接失败: " . $e->getMessage());

}

?>

 

 

2. 文章列表页(index.php)

 

<?php include 'config.php'; ?>

<!DOCTYPE html>

<html>

<head>

    <title>我的博客</title>

    <meta charset="utf-8">

</head>

<body>

    <h1>博客文章列表</h1>

    <a href="post.php">发布新文章</a>

    <hr>

 

    <?php

    // 查询所有文章(按发布时间倒序)

    $stmt = $pdo->query("SELECT * FROM articles ORDER BY created_at DESC");

    $articles = $stmt->fetchAll(PDO::FETCH_ASSOC);

 

    if (count($articles) > 0) {

        foreach ($articles as $article) {

    ?>

            <div>

                <h2><a href="detail.php?id=<?= $article['id'] ?>"><?= htmlspecialchars($article['title']) ?></a></h2>

                <p>发布时间: <?= $article['created_at'] ?></p>

                <hr>

            </div>

    <?php

        }

    } else {

        echo "<p>暂无文章,快去发布第一篇吧!</p>";

    }

    ?>

</body>

</html>

 

 

3. 文章详情页(detail.php)

 

<?php 

include 'config.php';

// 获取URL中的文章ID

$id = isset($_GET['id']) ? (int)$_GET['id'] : 0;

 

// 查询单篇文章

$stmt = $pdo->prepare("SELECT * FROM articles WHERE id = :id");

$stmt->bindParam(':id', $id);

$stmt->execute();

$article = $stmt->fetch(PDO::FETCH_ASSOC);

 

if (!$article) {

    die("文章不存在!");

}

?>

<!DOCTYPE html>

<html>

<head>

    <title><?= htmlspecialchars($article['title']) ?></title>

    <meta charset="utf-8">

</head>

<body>

    <a href="index.php">返回列表</a>

    <h1><?= htmlspecialchars($article['title']) ?></h1>

    <p>发布时间: <?= $article['created_at'] ?></p>

    <hr>

    <div><?= nl2br(htmlspecialchars($article['content'])) ?></div> <!-- nl2br转换换行符 -->

</body>

</html>

 

 

4. 发布文章页(post.php)

 

<?php

include 'config.php';

if ($_SERVER['REQUEST_METHOD'] === 'POST') {

    // 获取表单提交的数据

    $title = $_POST['title'] ?? '';

    $content = $_POST['content'] ?? '';

 

    // 简单验证

    if (empty($title) || empty($content)) {

        $error = "标题和内容不能为空!";

    } else {

        // 插入数据库

        $stmt = $pdo->prepare("INSERT INTO articles (title, content) VALUES (:title, :content)");

        $stmt->bindParam(':title', $title);

        $stmt->bindParam(':content', $content);

        $stmt->execute();

 

        // 跳转回列表页

        header('Location: index.php');

        exit;

    }

}

?>

<!DOCTYPE html>

<html>

<head>

    <title>发布文章</title>

    <meta charset="utf-8">

</head>

<body>

    <h1>发布新文章</h1>

    <?php if (isset($error)) echo "<p style='color:red'>$error</p>"; ?>

    <form method="post">

        <div>

            <label>标题:</label><br>

            <input type="text" name="title" style="width: 500px;">

        </div>

        <br>

        <div>

            <label>内容:</label><br>

            <textarea name="content" rows="10" cols="80"></textarea>

        </div>

        <br>

        <button type="submit">发布</button>

        <a href="index.php">取消</a>

    </form>

</body>

</html>

 

 

四、使用说明

 

1. 先在MySQL中创建名为 blog 的数据库(或修改 config.php 中的数据库名)

2. 执行上述SQL语句创建 articles 表

3. 将所有文件放在PHP运行环境(如XAMPP、WAMP)的网站根目录下

4. 访问 index.php 即可查看博客列表,点击“发布新文章”添加内容

 

这个示例实现了最基础的博客功能,实际使用中还可以扩展:添加用户登录、文章编辑/删除、评论功能、富文本编辑器等。

http://www.dtcms.com/a/307933.html

相关文章:

  • 飞算科技:以自主创新引领数字科技浪潮,飞算JavaAI赋能产业智能化升级
  • 亚远景-ASPICE与ISO 26262评估标准:异同解析与协同实践
  • Linux基础练习题1
  • 谷歌正在美国测试一项基于机器学习的年龄识别技术
  • 前端技术栈详解
  • 【人工智能-15】OpenCV直方图均衡化,模板匹配,霍夫变换,图像亮度变换,形态学变换
  • 11辊矫平机小传
  • 布隆过滤器BloomFilter
  • Agent 开发进阶路:从基础执行到自主决策
  • 隐私灯是否“可信”?基于驱动层的摄像头指示机制探析
  • Android Jetpack App Startup 库详解:优化应用启动性能
  • 大疆无人机开发:MQTT 赋能机场系统集成的Java实战之旅
  • MEMS陀螺如何成为无人机稳定飞行的核心?
  • 物联网、大数据与人工智能的深度融合
  • AI与物联网深度融合:重塑数字时代的技术新生态
  • Traccar:开源GPS追踪系统的核心价值与技术全景
  • 【[CSP-J 2022] 上升点列】
  • Dockerfile详解
  • “人工智能+政务服务”辅助审批项目需求及方案
  • 上传文件到服务器
  • 【硬件-笔试面试题】硬件/电子工程师,笔试面试题-53,(知识点:硬件电路问题排查,CPU上电后未运转,供电、时钟,复位,硬件连接)
  • 将本地项目关联并推送到已有的 GitHub 仓库
  • UE5多人MOBA+GAS 番外篇:同时造成多种类型伤害
  • 虚幻引擎5 GAS开发俯视角RPG游戏 #06-11:游戏后效果执行
  • 关于AR地产发展现状的深度探究​
  • AR智能巡检:制造业运维效率提升的关键
  • 提示词增强工程(Prompt Enhancement Engineering)白皮书草稿
  • AR-Align-NN-2024
  • 一个轻量级、无依赖的 Loading 插件 —— @lijixuan/loading
  • 常用设计模式系列(十七)—命令模式