找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 138|回复: 1

[CodeCMS-Web大项目]系列EP1:Version0.1诞生!

[复制链接]

11

主题

54

回帖

1059

积分

管理员

积分
1059
发表于 2025-2-2 07:30:11 | 显示全部楼层 |阅读模式
实战就是最好的学习。
不是学好了在再干,而是干起来再学习,干就是学习。——毛泽东

本系列,我将在实战中学习前端技术,分享我的CMS开发过程。

一些看前须知:
1. 项目起源:[CodeCraft代码工艺项目上线]
2. 讨论圈子:[CZLJ主论坛--计算机网络技术学习圈]
3. 作者QQ  :387575267@qq.com
4. CMS知识:[百度百科--CMS内容管理系统是什么]
5. 项目网址:[🔰CodeCraft🌠代码工艺官网🔱] (不是分享链接,是效果演示)
6. 资源学习:[菜鸟教程-你不知道的都在这里]

Part 1 开发环境#网页服务器&工具
众所周知,一个Web项目需要运行以便查看效果,需要一个服务器或是一个服务器环境+公网ip绑定域名+SSL证书+MySQL数据库+PHP解释器+FTP面板
市面上的网页服务器大多性能高但价格贵,操作复杂,这时候就需要一些比较小众的云服务了。
这里,我强烈推荐czlj、czlj博客、我的codecraft使用的圣道云服务器的 CZLJ云服务价格实惠且直接网页操作:

基础服务内容包括:
-- XXX.czlj.net+XXX.sheng17.site两个免费二级域名(已与服务器面板绑定,无须复杂配置,)
--1000MB中小型网站网页空间+500MB  MySQL数据库+99999GB每月超大超值流量包
--圣道云宝塔虚拟主机面板用户密码

其中圣道云宝塔虚拟主机功能有
--ftp用户名密码+mysql用户名密码1个(上手就用,功能强大)
--配置好的数据库管理系统phpmyadmin,其域名与服务器域名分开管理,安全可靠
--在线文件管理面板,文件编辑、上传、导出、解/压缩、新建等功能
--圣道云SSL安全证书(手动开启,自动配置)
--圣道云网站一键部署服务



详细服务请资讯站长 @_CX_  大大

接着是开发工具
常规方案:
使用VScode,安装five-server插件或搭配本地的phpstudy虚拟主机软件进行开发,开发完再上传主机根目录查看网址页面效果
[VScode编辑器官网下载网址](https://code.visualstudio.com "VScode编辑器官网下载网址")
[小皮面板_phpstudy软件官网](https://www.xp.com "小皮面板_phpstudy软件官网")


~~非常规方案:就是像我一样电脑坏了的,直接在本地编辑完代码文件然后上传至你的云主机的根目录,直接查看效果~~



Part2 开发过程
由于*某些不可抗因素*,我选择暂时在我的科大讯飞学习机上开发这个CMS。

由于这个项目去年我已经做了一阵子,已经做好了一个主页模板,所以我选择直接采用。


  1. <!DOCTYPE html>
  2. <html>

  3. <head>
  4.         <meta charset="utf-8">
  5.         <title>✨CodeCraft💡用热爱🔥编写未来🌅</title>
  6.         <b>CODECRAFT,用一生热爱,编写未来</b>
  7.         <br>
  8.         我们的官网
  9.         <a href="https://codecraft.czlj.net">
  10.                 代码工艺·CodeCraft
  11.         </a>
  12.         <br>
  13.         <style>
  14.                 * {
  15.                                 box-sizing: border-box;
  16.                 }
  17.                 body {
  18.                         font-family: Arial;
  19.                         padding: 10px;
  20.                 }
  21.                                 /* 头部标题 */
  22.                 .header {
  23.                         padding: 30px;
  24.                         text-align: center;
  25.                 }
  26.                 .header h1 {
  27.                         font-size: 50px;
  28.                 }
  29.                 /* 导航条 */
  30.                         .topnav {
  31.                         overflow: hidden;
  32.                         background-color: #333;
  33.                         top:0;
  34.                         padding:5px;
  35.                         position:sticky;
  36.                         position:-webkit-sticky;
  37.                 }
  38.                 /* 导航条链接 */
  39.                 .topnav a {
  40.                         float: left;
  41.                         display: block;
  42.                         color: #f2f2f2;
  43.                         text-align: center;
  44.                         padding: 14px 16px;
  45.                         text-decoration: none;
  46.                 }
  47.                 /* 链接颜色修改 */


  48.                 /* 链接颜色修改 */
  49.                 .topnav a:hover {
  50.                         background-color: #ddd;
  51.                         color: black;
  52.                 }
  53.                 /* 创建两列 */
  54.                 /* Left column */
  55.                 .leftcolumn {   
  56.                         float: left;
  57.                         width: 75%;
  58.                 }
  59.                 /* 右侧栏 */
  60.                 .rightcolumn {
  61.                         float: left;
  62.                         width: 25%;
  63.                         background-color: #f1f1f1;
  64.                         padding-left: 20px;
  65.                 }
  66.                 /* 图像部分 */
  67.                 .fakeimg {
  68.                         background-color: #aaa;
  69.                         width: 100%;
  70.                         padding: 20px;
  71.                 }
  72.                 /* 文章卡片效果 */
  73.                 .card {
  74.                         background-color: white;
  75.                         padding: 20px;
  76.                         margin-top: 20px;
  77.                 }
  78.                 /* 列后面清除浮动 */
  79.                 .row:after {
  80.                         content: "";
  81.                         display: table;
  82.                         clear: both;
  83.                 }
  84.                 /* 底部 */
  85.                 .footer {
  86.                         padding: 20px;
  87.                         text-align: center;
  88.                         background: #ddd;
  89.                         margin-top: 20px;
  90.                 }
  91.                 /* 响应式布局 - 屏幕尺寸小于 800px 时,两列布局改为上下布局 */
  92.                 @media screen and (max-width        : 800px) {
  93.                         .leftcolumn, .rightcolumn {   
  94.                                         width: 100%;
  95.                                 padding: 0;
  96.                                 }
  97.                 }
  98.                 /* 响应式布局 -屏幕尺寸小于 400px 时,导航等布局改为上下布局 */
  99.                 @media screen and (max-width: 400px) {
  100.                                 .topnav a {
  101.                                 float: none;
  102.                                 width: 100%;
  103.                                 }
  104.                         }
  105.         </style>
  106. </head>

  107. </html>
复制代码

效果如图

可以到官网查看:[主页](https://codecraft.czlj.net "主页")

对于我这种前端萌新,我选择借助专ren业gong人zhi士neng来帮助我开发。我使用了科大讯飞ai学习机上的ai编程助手,再经过我的沟通下,我做出了一个最基本的CMS

)


文件目录树:
<根目录>/[-]  ━━📖application[-]━━📖db_api[-]━━📝db.php
                     │                                                                          ┕━━  📝submit_post.php
                    ┝━━━📖data[-]
                    ┝━━━📝editor.php
                    ┝━━━📝viewer.php
                    ┕━━━📝index.php


说明:
1. application文件夹含处理页面的请求发送数据的文件
其中1.db_api文件夹含处理有关数据库交互的文件
其中其中1.db.php用于与数据库进行连接,方便其他文件与数据库交互
其中其中2.submit_post.php用于把用户发表的内容数据存进数据库
2. data文件夹含数据文件(暂时为空,以后可能会用)
3. editor.php文件为编辑帖子页面
4. viewer.php文件为查看帖子页面
5. index.php文件为主页,含链接至其及以上两个页面


db.php的代码&原理:

  1. <?php
  2. $servername = "localhost";//数据库地址
  3. $username = "*******";//数据库用户名
  4. $password = "*******";//数据库密码
  5. $dbname = "*******";//要访问的数据库名
  6. //这里*是不可见内容   :P   实际使用时需要换成你自己的数据库信息
  7. // 创建连接
  8. $conn = new mysqli($servername, $username, $password, $dbname);

  9. // 检查连接
  10. if ($conn->connect_error) {
  11.     die("Connection failed: " . $conn->connect_error);
  12. }
  13. ?>
复制代码


原理:使用mysqli函数,填入数据库地址,用户名,密码,需要访问的数据库这样就打通了网页与数据库的通道,其他文件才能读写数据库*

submit_post.php的代码&原理:

  1. <?php
  2. include 'db.php';

  3. if ($_SERVER["REQUEST_METHOD"] == "POST") {
  4.     $title = $_POST['title'];
  5.     $author = $_POST['author'];
  6.     $content = $_POST['content'];
  7.     $time = date('Y-m-d H:i:s'); // 获取当前时间

  8.     $stmt = $conn->prepare("INSERT INTO posts (author, time, title, content) VALUES (?, ?, ?, ?)");
  9.     $stmt->bind_param("ssss", $author, $time, $title, $content);
  10.    
  11.     if ($stmt->execute()) {
  12.         header("Location:/viewer.php"); // 重定向到帖子页
  13.     } else {
  14.         echo "Error: " . $stmt->error;
  15.     }
  16.    
  17.     $stmt->close();
  18.     $conn->close();
  19. }
复制代码

原理:这个文件要与editor.php,db.php一起调用。
首先include 'db.php',就是应用在它同目录下的db.php这样db.php的代码会运行,就打通了网页与数据库的通道
在已选数据库中,我提前建了一个叫posts的表格,用于存放帖子数据。这个表格有5列,分别为
列名存放数据类型最大长度
idint3位数字
authorchar20位字符串
titlechar30位字符串
timedatetime6位日期时间
contentlongtext3000位字符串

接着获取editor.php页面三个输入框标题作者内容)的数据并获取当前时间把这4个数据组合成一条SQL语句(见代码第九行),然后这条语句发送给SQL数据库,数据库就会运行这条语句,上面的四个数据插入已选数据库中的一个叫posts的表格
phpmyadmin页面查看已选数据库的posts表格就会多出一条。

idauthortimetitlecontent
0Admin_ni2025-2-1-9:00:00.000000000000测试帖这是一个测试帖........

editor.php的代码&原理:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <title>Create Post</title>
  6.     <style>
  7.         body {


  8.             background-color: #f0f0f0;
  9.         }
  10.         /* 导航条 */
  11.                         .topnav {
  12.                         overflow: hidden;
  13.                         background-color: #333;
  14.                         top:0;
  15.                         padding:5px;
  16.                         position:sticky;
  17.                         position:-webkit-sticky;
  18.                 }
  19.                 /* 导航条链接 */
  20.                 .topnav a {
  21.                         float: left;
  22.                         display: block;
  23.                         color: #f2f2f2;
  24.                         text-align: center;
  25.                         padding: 14px 16px;
  26.                         text-decoration: none;
  27.                 }
  28.                 /* 链接颜色修改 */
  29.                 .topnav a:hover {
  30.                         background-color: #ddd;
  31.                         color: black;
  32.                 }
  33.         .form-container {
  34.             background-color: white;
  35.             margin: 20px auto;
  36.             padding: 20px;
  37.             width: 450px;
  38.             border-radius: 5px;
  39.             box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
  40.         }
  41.                 .form-container input, .form-container textarea {
  42.             width: 100%;
  43.             padding: 10px;
  44.             margin: 10px 0;
  45.             border: 1px solid #ccc;
  46.             border-radius: 5px;
  47.         }
  48.         .form-container button {
  49.             padding: 10px 20px;
  50.             background-color: #28a745;
  51.             color: white;
  52.             border: none;
  53.             border-radius: 5px;
  54.             cursor: pointer;
  55.                         }
  56.         .form-container button:hover {
  57.             background-color: #218838;
  58.         }
  59.     </style>
  60. </head>



  61. <body>
  62.     <div class="topnav">
  63.                 <a href="viewer.php" target="_blank">论坛bbs</a>
  64.                 <a href="editor.php" target="_blank">创作edit</a>
  65.                 <a href="index.php">主页</a>
  66.                 <a href="#" style="float:right">登陆</a>
  67.         </div>
  68.     <div class="form-container">
  69.         <form action="application/db_api/submit_post.php" method="post">
  70.             <input type="text" name="title" placeholder="Title" required><br>
  71.             <input type="text" name="author" placeholder="Author" required><br>
  72.             <textarea name="content" placeholder="Content" maxlength="500" required></textarea><br>
  73.             <button type="submit">;Publish</button>
  74.         </form>
  75.     </div>
  76. </body>
  77. </html>        
复制代码

原理:只是一个框架,有三个输入框(作者,标题,内容),等用户写完点击submit按钮后,三个输入框的数据就会传递给上面的submit_post.php文件传输,与数据库交互。如果submit_post.php文件发生异常,比如db.php连接到数据库失败,就会显示Error。

viewer.php的代码&原理:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <title>;Posts Page</title>
  6.     <style>
  7.         body {
  8.             background-color: #f0f0f0;
  9.         }
  10.        /* 导航条 */
  11.                         .topnav {
  12.                         overflow: hidden;
  13.                         background-color: #333;
  14.                         top:0;
  15.                         padding:5px;
  16.                         position:sticky;
  17.                         position:-webkit-sticky;
  18.                 }
  19.                 /* 导航条链接 */
  20.                 .topnav a {
  21.                         float: left;
  22.                         display: block;
  23.                         color: #f2f2f2;
  24.                         text-align: center;
  25.                         padding: 14px 16px;
  26.                         text-decoration: none;
  27.                 }
  28.                 /* 链接颜色修改 */
  29.                 .topnav a:hover {
  30.                         background-color: #ddd;
  31.                         color: black;
  32.                 }
  33.         .post {
  34.             background-color: white;
  35.             margin: 20px auto;
  36.             padding: 20px;
  37.             width: 450px;
  38.             border-radius: 5px;
  39.             box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
  40.         }
  41.                 .post h3 {
  42.             margin: 0;
  43.         }
  44.         .post small {
  45.             color: gray;
  46.         }
  47.         .post span {
  48.             display: block;


  49.             font-size: 20px;
  50.             margin-top: 10px;
  51.         }
  52.     </style>
  53. </head>
  54. <body>
  55.     <div class="topnav">
  56.                 <a href="viewer.php" target="_blank">论坛bbs</a>
  57.                 <a href="editor.php" target="_blank">创作edit</a>
  58.                 <a href="index.php">主页</a>
  59.                 <a href="#" style="float:right">登陆</a>
  60.         </div>
  61.     <?php include 'application/db_api/db.php'; ?>
  62.     <?php
  63.     $sql = "SELECT id, author, time, title, content FROM posts";
  64.     $result = $conn->query($sql);

  65.     if ($result->num_rows > 0) {
  66.         while($row = $result->fetch_assoc()) {
  67.             echo '<div class="post">';
  68.             echo '<h3>' . htmlspecialchars($row['title']) . '</h3>';
  69.             echo '<small>' . htmlspecialchars($row['author']) . ' | ' . htmlspecialchars($row['time']) . '</small><br>';
  70.             echo '<span>' . htmlspecialchars($row['content']) . '</span>';
  71.             echo '</div>';
  72.         }
  73.     } else {
  74.         echo "No posts found.";
  75.     }
  76.     $conn->close();
  77.     ?>
  78. </body>
  79. </html>
复制代码

原理:
html部分有三个链接,分别链接到viewer.php,editor.php和index.php;
php部分首先构建一条查询posts表格的SQL语句,把这个语句发送给数据库,数据库就会把posts表格里的内容返回给网页,然后网页用while循环把帖子按标题作者日期内容的顺序输出成html就达到了查看帖子的效果。如果数据库返回的结果为null,则输出no posts.没有帖子。

index.php的代码&原理:就是一个主页模板,其中的文章是假的,唯一用处就是上面的3个链接。代码在上文

## 最终这个CMS的效果如图
发帖
)
看帖
)

Part3 总结与后续
本期,我在ai助手的帮助下完成了这个CMS的基础功能:
1. 一个简约好看的主页
2. 查看帖子的页面和看帖功能
3. 发布帖子的页面和发帖功能


不过这个cms系统仍有不足:
1.查看帖子页面应该在主页
2.发帖虽然格式化的其中内容,不会有XSS攻击,但无法换行,其UI和字体功能等任待开发
3.这个cms没有任何sql注入防御机制,攻击者可能在发帖页面输入SQL注入命令,安全问题较大

4.主页的 登陆 按钮和 文章(假)仍是摆设

更新方向:
**1编写登录、用户系统
2完善发帖、看帖UI界面和完善SQL注入漏洞**
3完善更多论坛功能



最后,我为这个cms系统起名为:
>_    CodeCMS

版本v0.1  [点击下载](https://codecraft.czlj.net/data/backup/v0.1.zip "点击下载")
敬请期待下一版本更新!

11

主题

54

回帖

1059

积分

管理员

积分
1059
 楼主| 发表于 2025-2-2 07:33:39 | 显示全部楼层
@_CX_
@_CX_
@_CX_
回复

使用道具 举报

Archiver|手机版|小黑屋|CZLJ

GMT+8, 2025-3-12 23:59 , Processed in 0.064428 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表