当前位置:首页 > PHP

php实现新闻浏览

2026-02-16 12:53:44PHP

PHP实现新闻浏览功能

数据库设计

创建新闻表结构,通常包含以下字段:

CREATE TABLE news (
    id INT AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(255) NOT NULL,
    content TEXT NOT NULL,
    publish_time DATETIME DEFAULT CURRENT_TIMESTAMP,
    author VARCHAR(100),
    category VARCHAR(50)
);

连接数据库

使用PDO连接MySQL数据库:

$dbhost = 'localhost';
$dbname = 'news_db';
$dbuser = 'root';
$dbpass = '';

try {
    $pdo = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbuser, $dbpass);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
    die("数据库连接失败: " . $e->getMessage());
}

新闻列表展示

查询并显示新闻列表:

php实现新闻浏览

$stmt = $pdo->query("SELECT id, title, publish_time FROM news ORDER BY publish_time DESC");
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    echo '<div class="news-item">';
    echo '<h3><a href="news_detail.php?id='.$row['id'].'">'.$row['title'].'</a></h3>';
    echo '<p>发布时间: '.$row['publish_time'].'</p>';
    echo '</div>';
}

新闻详情页

显示单篇新闻内容:

if(isset($_GET['id'])) {
    $id = $_GET['id'];
    $stmt = $pdo->prepare("SELECT * FROM news WHERE id = ?");
    $stmt->execute([$id]);
    $news = $stmt->fetch(PDO::FETCH_ASSOC);

    if($news) {
        echo '<h1>'.$news['title'].'</h1>';
        echo '<p>作者: '.$news['author'].' | 分类: '.$news['category'].'</p>';
        echo '<div class="news-content">'.$news['content'].'</div>';
    } else {
        echo '新闻不存在';
    }
}

分页功能

实现新闻列表分页:

php实现新闻浏览

$perPage = 10;
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$offset = ($page - 1) * $perPage;

$total = $pdo->query("SELECT COUNT(*) FROM news")->fetchColumn();
$totalPages = ceil($total / $perPage);

$stmt = $pdo->prepare("SELECT id, title FROM news ORDER BY publish_time DESC LIMIT :offset, :perPage");
$stmt->bindParam(':offset', $offset, PDO::PARAM_INT);
$stmt->bindParam(':perPage', $perPage, PDO::PARAM_INT);
$stmt->execute();

// 显示分页导航
for ($i = 1; $i <= $totalPages; $i++) {
    echo '<a href="?page='.$i.'"'.($page==$i?' class="current"':'').'>'.$i.'</a>';
}

安全防护

防止SQL注入和XSS攻击:

// 使用预处理语句防止SQL注入
$stmt = $pdo->prepare("SELECT * FROM news WHERE id = ?");
$stmt->execute([$id]);

// 输出内容时进行HTML转义防止XSS
echo htmlspecialchars($news['content'], ENT_QUOTES, 'UTF-8');

性能优化

添加缓存和索引:

-- 为常用查询字段添加索引
ALTER TABLE news ADD INDEX idx_publish_time (publish_time);
ALTER TABLE news ADD INDEX idx_category (category);

-- 使用缓存
$cacheKey = 'news_list_page_'.$page;
if(!$news = $cache->get($cacheKey)) {
    $news = $pdo->query("SELECT ...")->fetchAll();
    $cache->set($cacheKey, $news, 3600); // 缓存1小时
}

以上实现方案包含了新闻系统的基本功能,可根据实际需求进行扩展和优化。

标签: 新闻php
分享给朋友:

相关文章

php队列的实现

php队列的实现

PHP队列的实现方式 PHP中实现队列功能可以通过多种方式,根据需求选择适合的方案: 使用数组实现基础队列 PHP数组本身支持队列操作,利用array_push和array_shift函数: $q…

php实现的分页

php实现的分页

PHP 实现分页的方法 基本分页逻辑 分页的核心在于计算总页数、当前页码以及数据偏移量。假设每页显示 10 条数据: $current_page = isset($_GET['page']) ? (…

php实现博客

php实现博客

使用PHP实现博客系统 数据库设计 创建数据库表存储博客文章和用户信息。常见的表包括posts(文章)和users(用户)。 CREATE TABLE users ( id INT AUTO…

php实现定时

php实现定时

PHP 实现定时任务的方法 PHP 本身是脚本语言,通常需要借助外部工具或框架实现定时任务。以下是几种常见方法: 使用 Cron 任务 Linux 系统自带的 Cron 是常用的定时任务工具。通过编…

php 实现无限分类

php 实现无限分类

无限分类的实现方法 无限分类通常用于构建多层级结构的数据,如商品分类、菜单管理等。以下是几种常见的实现方式: 邻接列表模型(Adjacency List) 这是最简单的实现方式,每个分类记录存储其父…

php实现注册登陆

php实现注册登陆

PHP 注册功能实现 创建数据库表结构(MySQL示例): CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, user…