基于PHP和MySQL的新闻发布系统

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 基于PHP和MySQL的新闻发布系统

关于世界杯⚽️


国际足联世界杯(FIFA World Cup),简称“世界杯”,是由全世界国家级别球队参与,象征足球界最高荣誉,并具有最大知名度和影响力的足球赛事。世界杯全球电视转播观众超过35亿 。世界杯每四年举办一次,任何国际足联会员国(地区)都可以派出代表队报名参加这项赛事。


今年在卡塔尔举行的世界杯也是赚足了广大球迷的眼球,奈何自己不是很懂,只能看个热闹,恰好最近学习了PHP连接数据库,简单完成一个关于“世界杯”的新闻发布系统练练手,也算是对世界杯有个小回忆了。


展示效果


展示页面:

c60d629d4b7443c4a60351eaff285f42.png0f55f85fdbe24271ad286b453ca5d518.png


新闻发布后台:


037cdcb7d4ef4c39aee6e64f5bd85efc.png

整理思路


我们可以做一个思维导图来整理下自己的思路,也方便能够清晰地写出各个功能页面:

2d216667e607485abe8f7360fa4b2736.png


首先是一个用于展示已发布新闻的页面,那么如何让这些新闻展示出来呢——那就需要用到SQL语句中的 查询语句

然后就是管理员:通过注册的方式获取对新闻的操作权限,注册完成后再登录进入新闻发布的后台,对新闻进行发布删除修改操作。

🆗,这就是大体思路。


功能实现


首先做好准备工作:


开启数据库和服务器

60c93c527a854ac79234b5c1c7e9cb66.png


通过数据库管理工具创建相关数据表


新闻表:

90544a04aecf441281945f6beaab2d01.png


用户表:


d0f8fb2785144b498730632ebad419b2.png

测试数据库连接情况


//测试文件conn.php,测试数据库连接情况
<?php
  header("content-type:text/html;charset=utf-8");
  $mysqli=new mysqli("localhost:3306","root","","2021info");
  if(!$mysqli){
      die("error");
  }
  $mysqli->query(("set names utf-8"));
?>
//连接成功


展示页面


<?php
// 该页面用于展示新闻,并提供登录和注册入口进入后台对新闻进行操作
include "./conn.php";
//能够实现所需功能的SQL语句
$sel = "select * from news order by mtime limit 0,5";
//执行SQL语句
$rs = $mysqli->query($sel);
//将查询得到的语句转化成一维数组
$result = $rs->fetch_assoc();
//用来设置服务器的默认时区,Asia表示亚洲,Shanghai用来表示中国上海
date_default_timezone_set("Asia/Shanghai");
?>
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>新闻展示页面</title>
  <!-- <link rel="stylesheet" type="text/css" href="./css/导航条.css" /> -->
  <link rel="stylesheet" type="text/css" href="./css/index1.css" />
  <link rel="stylesheet" type="text/css" href="./css/lunbo.css" />
</head>
<body style="background-color:rgb(60, 108, 236);color: antiquewhite;">
  <div class="bd">
    <img src="./img/世界杯.png" alt="">
  </div>
  <div class="div1">
    <p>点击观看精彩赛事</p>
    <div class="demo">
      <a href="#">
        <div class="demo1">
          <img src="./img/pic1.png" alt="">
          <img src="./img/pic2.png" alt="">
          <img src="./img/pic3.png" alt="">
          <img src="./img/pic4.png" alt="">
          <img src="./img/pic5.png" alt="">
        </div>
      </a>
    </div>
    <div class="div2">
      <img src="./img/世界杯1.png">
      <h4 class="font1">新闻</h4>
      <h4 class="font2">发布时间</h4>
      //利用列表将需要展示的新闻字段展示出来
      <?php while ($result = $rs->fetch_assoc()) : ?>
        <li class="title"><a href="watch.php?id=<?= $result['id'] ?>">
            <span class="title"><a href="contents.php?id=<?= $result['id'] ?>">
                <?php
                //利用mb_strlen()函数和mb_substr()函数,返回新闻标题的一部分,多出部分用“...”代替,使之更加美观
                if (mb_strlen($result['title']) > 3) {
                  echo mb_substr($result['title'], 0, 6) . "...";
                } else {
                  echo $result['title'];
                }
                ?></span></li>
                //与 date_default_timezone_set("Asia/Shanghai");共同将时间戳转换成日期
            <li class="ctime"><?= date("Y-m-d H:i:s", $result['mtime']) ?></li></a>
      <?php endwhile; ?>
    </div>
    <div class="div3">
      <a href="./regis.php">注册</a>
      <a href="./login.php">登录</a>
    </div>
  </div>
</body>
</html>


//watch.php
<?php
include "./conn.php";
date_default_timezone_set("Asia/Shanghai");
$id = $_GET['id'];
$sel = "select title,author,content,mtime from news where id={$id};";
$re = $mysqli->query($sel);
$result = $re->fetch_assoc();
// var_dump($result);
// if(!$re){
//     echo "<script>alert('失败');location.href='newsshow.php';</script>";
// }
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" type="text/css" href="./css/watch.css"/>
</head>
<body style="background-color:rgb(60, 108, 236)">
    <div class="div1">
        <div class="titleBox">
            <h2><span><?= $result['title'] ?></span></h2>
        </div>
        <div class="author">
            <h4>发布者:<span><?= $result['author'] ?></span></h4>
        </div>
        <div class="content">
            <p><?= $result['content'] ?></p>
        </div>
        <div class="mtime">
            <p><?=date("Y-m-d H:i:s",$result['mtime'])?><a href="./newshow.php">返回首页</a></p>
        </div>
    </div>
</body>
</html>


注册登录


注册:

f62d69adcc6b48509baa1f8e2f11bb3c.png

//register.html
<h3>sign up</h3>
    <form action="register_do.php" method="post" id="myform">
        请输入用户名:<input type="text" name="username" id="username">
        请输入手机号:<input type="text" name="usertel" id="usertel">
        请输入邮箱:<input type="text" name="useremail" id="useremail">
        请输入密码:<input type="password" name="userpwd" id="userpwd">
        请确认密码:<input type="password" name="repwd" id="repwd">
        <input type="submit" value="注册">
    </form>
    <script src="./js/register.js"></script>
//js实现用户输入信息是否正确
//设置页面加载完成即执行js代码
window.onload=function(){
//获取id对象
    var myform=document.getElementById("myform");
    var username=document.getElementById("username");
    var usertel=document.getElementById("usertel");
    var useremail=document.getElementById("useremail");
    var pwd=document.getElementById("userpwd");
    var repwd=document.getElementById("repwd");
    myform.onsubmit=function(){
        if(username.value==""){
            alert("用户名不可为空!");
            return false;
        }
        if(usertel.value.length!=11){
            alert("请输入正确手机号!");
            return false;
        }
        if(useremail.value.indexOf('@')<1 || useremail.value.indexOf('.')<3){
            alert("请输入正确邮箱!");
            return false;
        }
        if(userpwd.value.length==0){
            alert("密码不能为空!");
            return false;
        }
        if(userpwd.value.length<6){
            alert("密码不可少于6位!");
            return false;
        }
        if(repwd.value==""){
            alert("确认密码不可为空!");
            return false;
        }
        if(repwd.value!=pwd.value){
            alert("密码输入不一致!");
            return false;
        }
    }
}


<?php
//register_do.php
// 该页面任务是拿到resigter的页面传递的数据,并进行用户名重复性检查.
include "./conn.php";
//post传递参数
$username=$_POST['username'];
$pwd=md5($_POST['pwd']);
$repwd=md5($_POST['repwd']);
$sel="select * from userpub where username='{$username}';";
$rs=$mysqli->query($sel);
//从查询中输出所影响记录行数,利用影响的行数来判断是否重复注册用户名
$rows=$mysqli->affected_rows;
//若影响的行数大于0,则代表重复注册用户名
if($rows>0){
    echo "<script>alert('用户名注册失败,请重新选择用户名');location.href='regis.php';</script>";
}else{
//没有影响行数代表用户名可注册,执行插入语句
$in="insert into userpub(username,password,repwd)values('{$username}','{$pwd}','{$repwd}');";
$st=$mysqli->query($in);
if($st){
    echo "<script>alert('注册成功');location.href='login.php';</script>";
}else{
    echo "<script>alert('注册失败');location.href='register.php';</script>";
}
}
?>


登录:


14dffab10ccb476fb96d47f6d873960d.png


//login.js
window.onload=function(){
//获取id 对象
            var myform=document.getElementById("myform");
            var user=document.getElementById("username");
            var pwd=document.getElementById("userpwd");
            myform.onsubmit=function(){
                if(username.value==""){
                    alert("用户名不可为空!");
                    return false;
                }
                if(userpwd.value.length==0){
                    alert("密码不能为空!");
                    return false;
                }
            }
        }


//login_do.php
<?php
// 该页面将登录页面收集到的信息与后台注册的用户名和密码进行核对,核对成功进入数据库
include "./conn.php";
$username=$_POST['username'];
$userpwd=md5($_POST['userpwd']);
$sel="select * from admin where username='{$username}';";
$rs=$mysqli->query($sel);
//从查询中输出所影响记录行数,利用影响的行数来判断是否重复注册用户名
$rows=$mysqli->affected_rows;
if($rows>0){
// 用户名存在  验证用户输入的密码和数据表中存在的用户名对应的密码是否一致,将用户名对应的字段转换成一维数组,通过数组名加下标的方式判断用户密码输入是否正确。
$result=$rs->fetch_assoc();
if($userpwd==$result['userpwd']){
    echo "<script>alert('登录成功');location.href='news_select.php'</script>";
}else{
    echo "<script>alert('密码错误,请重新输入或注册');location.href='login.php'</script>";
}
}else{
    // 用户名不存在
    echo "<script>alert('用户名不存在,请重新输入或者先注册');location.href='login.php';</script>" ;
}
?>


增加——insert

6118d265b1694d469bb7218b13134599.png


// news_insert.html 该页面用于收集新闻相关信息
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <form action="insert_do.php" method="post">
    请输入新闻标题:<input type="text" name="title"></br>
    请输入新闻内容:<textarea name="content" id="" cols="30" rows="10"></textarea></br>
    请输入新闻作者:<input type="text" name="author">
    <input type="submit" value="发布">
    </form>
</body>
</html>
//insert_do.php 该页面拿到相关的新闻信息,并执行插入SQL语句将其插入到news表中
<?php
  include './conn.php';
  $title=$_POST['title'];
  $content=$_POST['content'];
  $author=$_POST['author'];
  $ctime=time();
  $mtime=time();
  $in="insert into news(title,content,author,ctime,mtime)values('{$title}','{$content}','{$author}',$ctime,$mtime);";
  $st=$mysqli->query($in);
  if($st){
      echo "<script>alert('发布成功!');location.href='news_select.php';</script>";
    }else{
      echo "<script>alert('发布失败!');location.href='insert_do.php';</script>";
    }
?>


查询——select

037cdcb7d4ef4c39aee6e64f5bd85efc.png


//news_select.php
<?php
// 该页面用于展示从数据库中最新的几条新闻
include "./conn.php";
$sel="select * from news order by ctime desc limit 0,10;";
$rs=$mysqli->query($sel);
date_default_timezone_set("Asia/Shanghai");
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <table border="1px">
        <tr>
            <th>id</th>
            <th>title</th>
            <th>content</th>
            <th>author</th>
            <th>发布时间</th>
            <th>修改时间</th>
            <th>修改</th>
            <th>删除</th>
        </tr>
        <?php
        while($result=$rs->fetch_assoc()){?>
            <tr>
                <td><?=$result['id']?></td>
                <td><?=$result['title']?></td>
                <td><?=$result['content']?></td>
                <td><?=$result['author']?></td>
                <td><?=date("Y-m-d H:i:s",$result['ctime'])?></td>
                <td><?=date("Y-m-d H:i:s",$result['mtime'])?></td>
                <td><a href="news_update.php?id=<?=$result['id']?>">修改</a></td>
                <td><a href="news_delete.php?id=<?=$result['id']?>">删除</a></td>
            </tr> 
        <?php }?>
    </table>
    <a href="./news_insert.html">发布新闻</a>
    <a href="./newshow.php">回到首页</a>
    <a href="./delnews.php">查看已删新闻</a>
</body>
</html>


修改——update


//news_update.php 该页面用于收集对新闻的修改信息
<?php
include "./conn.php";
//get传参 id
$id=$_GET['id'];
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <form action="update_do.php?id=<?=$id?>" method="post">
        请输入新的标题:<input type="text" name="newtitle"></br>
        请输入新的内容:<textarea name="newcontent" id="" rows="10" cols="30"></textarea></br>
        请输入新闻作者:<input type="text" name="newauthor">
        <!-- 隐藏域获取id -->
        <input type="hidden" name="id" value="<?=$id?>">
        <input type="submit" value="修改">
    </form>
</body>
</html>


//update_do.php  该页面拿到收集到的相关修改信息,并执行修改的SQL语句,完成对数据表的修改。
<?php
  require("./conn.php");
  $id=$_POST['id'];
  $title=$_POST['newtitle'];
  $content=$_POST['newcontent'];
  $author=$_POST['newauthor'];
  $mtime=time();
  $upd="update  news set title='{$title}',content='{$content}',author='{$author}',mtime=$mtime where id={$id};"; 
  $st=$mysqli->query($upd);
  if($st){
      echo "<script>alert('修改成功');location.href='news_select.php';</script>";
  }else{
      echo "<script>alert('修改失败');location.href='news_select.php';</script>";
  }
?>


删除——delete

<?php
  include "./conn.php";
  $id=$_GET['id'];
  $del="delete from newpub where id={$id};";
  $st=$mysqli->query($del);
  if($st){
      echo "<script>alert('删除成功');location.href='newselect.php';</script>";
  }else{
      echo "<script>alert('删除失败');location.href='newselect.php';</script>";
  }
?>


优化功能

33e957588d4f4691829ad066cad33d7f.png


查看已删新闻


数据表:


如果我们想要查看已经删除的新闻的话,就需要再创建一个数据表来存储删除的新闻信息,这里我创建了一个delnews 表;并增加了删除时间 字段。

430e9263c9964ca3973820b16f207fa2.png


//news_delete.php 该页面将所要删除的记录放到一个新的表中,并从原来表中删除。
<?php
  include "./conn.php";
  $id=$_GET['id'];
  $dtime=time();
  date_default_timezone_set("Asia/Shanghai");
  // 将获取的id相应的数据读取成一个result数组中,然后利用数组将读取的字段插入到delnews表中。
  $sel="select * from news where id={$id};";
  $re=$mysqli->query($sel);
  $result=$re->fetch_assoc();
  //  var_dump($result);
  $in="insert into delnews(id,title,content,author,ctime,mtime,dtime)values('{$result['id']}','{$result['title']}','{$result['content']}','{$result['author']}',
  '{$result['ctime']}','{$result['mtime']}',$dtime);";
  $st=$mysqli->query($in);
  if($st){
      $del="delete from news where id={$id};";
      $de=$mysqli->query($del);
      if($de){
          echo "<script>alert('删除成功!');location.href='news_select.php';</script>";
      }else{
          echo "<script>alert('删除失败!');location.href='news_select.php';</script>";
      }
  }else{
      echo "<script>alert('删除失败!');location.href='news_select.php';</script>";
  }
?>


<?php
//delnews.php 该页面用于从delnews表中读取内容,以表格的形式展出。
include "./conn.php";
$sel = "select * from delnews order by dtime desc";
$re = $mysqli->query($sel);
date_default_timezone_set("Asia/Shanghai");
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <table border="1px">
        <tr>
            <th>title</th>
            <th>content</th>
            <th>author</th>
            <th>发布时间</th>
            <th>修改时间</th>
            <th>删除时间</th>
            <th>撤销删除</th>
        </tr>
        <?php while ($result = $re->fetch_assoc()) { ?>
            <tr>
                <td><?= $result['id'] ?></td>
                <td><?= $result['title'] ?></td>
                <td><?= $result['author'] ?></td>
                <td><?= date("Y-m-d H:i:s", $result['ctime']) ?></td>
                <td><?= date("Y-m-d H:i:s", $result['mtime']) ?></td>
                <td><?= date("Y-m-d H:i:s", $result['dtime']) ?></td>
                <td><a href="delnews_do.php?id=<?= $result['id'] ?>">撤销删除</a></td>
            </tr>
        <?php } ?>
    </table>
</body>
</html>


撤销已删新闻


撤销功能和对news表中数据的删除功能类似:


//delnews_do.php 该页面用于撤销删除已删新闻。
<?php
include "./conn.php";
$id=$_GET['id'];
$mtime=time();
date_default_timezone_set("Asia/Shanghai");
$sel="select * from delnews where id={$id};";
$rs=$mysqli->query($sel);
$result=$rs->fetch_assoc();
$in="insert into news(id,title,content,author,ctime,mtime)values('{$result['id']}','{$result['title']}','{$result['content']}','{$result['author']}',
'{$result['ctime']}','{$result['mtime']}');";
$st=$mysqli->query($in);
if($st){
    $del="delete from delnews where id={$id};";
    $de=$mysqli->query($del);
    if($de){
        echo "<script>alert('撤销成功!');location.href='news_select.php';</script>";
    }else{
        echo "<script>alert('撤销失败!');location.href='news_select.php';</script>";
    }
}else{
    echo "<script>alert('撤销失败!');location.href='news_select.php';</script>";
}


总结🥇


刚开始接触php连接数据库的时候可能会遇到很多小问题,首先就是检查数据库的连接状态是否正常,再就是注意参数的传递,SQL语句的写法等。

当然还有更多需要优化的地方:没有进行cookie和session来记录用户状态,以及增强存储在服务器的数据的安全性;在基础功能上还需要添加更多改善用户体验的方面。那么在后续的文章还会给大家分享学习经验,继续优化这个新闻发布系统。

如有不足,感谢指正

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2天前
|
Linux PHP 数据安全/隐私保护
2024授权加密系统PHP网站源码
2024授权加密系统PHP网站源码
80 58
|
7天前
|
前端开发 PHP 数据安全/隐私保护
知识付费系统源码 PHP
在数字经济背景下,知识付费成为新兴领域,尤其在线教育平台的兴起,使更多教育者通过知识付费系统销售课程,实现数字化转型与收入提升。开发此类平台需考虑众多技术细节和业务需求,如使用PHP语言实现支付功能,确保安全性、性能和可扩展性,选择合适的技术方案至关重要。
30 4
知识付费系统源码 PHP
|
6天前
|
移动开发 小程序 PHP
校园圈子论坛系统采取的PHP语音和uni账号开发的小程序APP公众号H5是否只需要4800元?是的,就是只需要4800元
关于校园圈子论坛系统采用PHP语言和uni-app开发的小程序、APP、公众号和H5是否仅需4800元这个问题,实际上很难给出一个确定的答案。这个价格可能受到多种因素的影响
|
16天前
|
存储 关系型数据库 MySQL
PHP与MySQL动态网站开发:从基础到实践####
本文将深入探讨PHP与MySQL的结合使用,展示如何构建一个动态网站。通过一系列实例和代码片段,我们将逐步了解数据库连接、数据操作、用户输入处理及安全防护等关键技术点。无论您是初学者还是有经验的开发者,都能从中获益匪浅。 ####
|
17天前
|
关系型数据库 MySQL PHP
php实现一个简单的MySQL分页
通过本文的详细步骤和代码示例,我们实现了一个简单的PHP MySQL分页功能。主要步骤包括计算总记录数、设置分页参数、查询当前页的数据以及生成分页链接。这种分页方式适用于大多数Web应用,能够有效提升用户体验和页面响应速度。
22 4
|
19天前
|
SQL 关系型数据库 MySQL
PHP与MySQL的高效协同开发策略####
本文深入探讨了PHP与MySQL在Web开发中的协同工作机制,通过优化配置、最佳实践和高级技巧,展示了如何提升数据库交互性能,确保数据安全,并促进代码可维护性。我们将从环境搭建讲起,逐步深入到查询优化、事务管理、安全防护及性能调优等核心环节,为开发者提供一套实战驱动的解决方案框架。 ####
|
12天前
|
SQL 关系型数据库 MySQL
PHP与MySQL的高效交互:从基础到实践####
本文深入探讨了PHP与MySQL数据库之间的高效交互技术,涵盖了从基础连接到高级查询优化的全过程。不同于传统的摘要概述,这里我们直接以一段精简代码示例作为引子,展示如何在PHP中实现与MySQL的快速连接与简单查询,随后文章将围绕这一核心,逐步展开详细讲解,旨在为读者提供一个从入门到精通的实战指南。 ```php <?php // 数据库配置信息 $servername = "localhost"; $username = "root"; $password = "password"; $dbname = "test_db"; // 创建连接 $conn = new mysqli($se
19 0
|
18天前
|
关系型数据库 MySQL PHP
PHP与MySQL的深度整合:构建高效动态网站####
在当今这个数据驱动的时代,掌握如何高效地从数据库中检索和操作数据是至关重要的。本文将深入探讨PHP与MySQL的深度整合方法,揭示它们如何协同工作以优化数据处理流程,提升网站性能和用户体验。我们将通过实例分析、技巧分享和最佳实践指导,帮助你构建出既高效又可靠的动态网站。无论你是初学者还是有经验的开发者,都能从中获得宝贵的见解和实用的技能。 ####
18 0
|
8天前
|
关系型数据库 MySQL 数据库
Python处理数据库:MySQL与SQLite详解 | python小知识
本文详细介绍了如何使用Python操作MySQL和SQLite数据库,包括安装必要的库、连接数据库、执行增删改查等基本操作,适合初学者快速上手。
71 15
|
2天前
|
SQL 关系型数据库 MySQL
数据库数据恢复—Mysql数据库表记录丢失的数据恢复方案
Mysql数据库故障: Mysql数据库表记录丢失。 Mysql数据库故障表现: 1、Mysql数据库表中无任何数据或只有部分数据。 2、客户端无法查询到完整的信息。