当前位置:首页 > 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实现分页的基本方法 使用LIMIT和OFFSET进行数据库查询分页。通过计算当前页码和每页显示数量,动态生成SQL语句。 $page = isset($_GET['page']) ? (int…

php实现文件的下载

php实现文件的下载

PHP 实现文件下载的方法 在 PHP 中实现文件下载功能通常需要设置正确的 HTTP 头信息,并输出文件内容。以下是几种常见的实现方式: 使用 header() 函数强制下载 通过设置 Conte…

php实现聊天

php实现聊天

实现 PHP 聊天功能的方法 使用 WebSocket 和 PHP 实现实时聊天 WebSocket 是一种全双工通信协议,适合实现实时聊天功能。PHP 可以通过 Ratchet 库实现 WebSo…

php实现的进度条

php实现的进度条

PHP 实现的进度条方法 在 PHP 中实现进度条通常可以通过命令行脚本(CLI)或 Web 页面两种方式完成。以下是几种常见的实现方法: 命令行进度条 使用 PHP CLI 实现进度条,可以通过不…

css制作新闻内容

css制作新闻内容

使用CSS制作新闻内容 新闻内容的CSS设计需要考虑排版清晰、可读性强以及视觉层次分明。以下是一些关键方法和样式示例: 布局与容器样式 设置新闻容器的宽度、边距和背景色,确保内容居中且易于阅读:…

php 实现下载apk

php 实现下载apk

使用 PHP 实现 APK 文件下载 通过 PHP 实现 APK 文件下载的核心是设置正确的 HTTP 头信息,并输出文件内容。以下是一个完整的实现方法。 设置 HTTP 头信息 确保客户端正确识别…