视频网站自己做服务器/长沙靠谱关键词优化公司电话
记得十几年前的时候,每到春节,各大网站都会建一个祝福墙,上面挂满网友的新年寄语。这些年随着移动互联网的高速发展,web的新春祝福墙越来越少了。今天,咱们就来考考古,用快速原型法进行设计。
原型设计
采用MySQL数据库。
创建数据库
CREATE DATABASE new_year_wall;
创建表
CREATE TABLE greetings (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(255) NOT NULL,message TEXT NOT NULL,date_posted TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
创建前端PHP页面
<!DOCTYPE html>
<html>
<head><title>New Year Greeting Wall</title><style>.greeting {margin: 10px;padding: 10px;border: 1px solid #ccc;background-color: #f9f9f9;}</style>
</head>
<body><h1>New Year Greeting Wall</h1><form action="add_greeting.php" method="post"><label for="name">Name:</label><input type="text" id="name" name="name"><label for="message">Message:</label><textarea id="message" name="message"></textarea><input type="submit" value="Post"></form><?php$conn = mysqli_connect("localhost", "username", "password", "new_year_wall");$result = mysqli_query($conn, "SELECT * FROM greetings ORDER BY date_posted DESC");while ($row = mysqli_fetch_assoc($result)) {echo "<div class='greeting'>";echo "<p><strong>" . $row['name'] . "</strong> posted:</p>";echo "<p>" . $row['message'] . "</p>";echo "<p>Date posted: " . $row['date_posted'] . "</p>";echo "</div>";}?>
</body>
</html>
创建后端PHP页面
<?php
$conn = mysqli_connect("localhost", "username", "password", "new_year_wall");
$name = mysqli_real_escape_string($conn, $_POST['name']);
$message = mysqli_real_escape_string($conn, $_POST['message']);
$sql = "INSERT INTO greetings (name, message) VALUES ('$name', '$message')";
mysqli_query($conn, $sql);
header("Location: index.php");
?>
好了,一个支持任何人直接提交祝福的祝福墙已经完成了。
但是,有经验的程序员一眼就看出来了,有两个很大的漏洞:一是用户不需要登录就可以直接发送祝福,且没有过滤用户提交的内容;而是没有管理功能,无法实现增删查改。
提高数据安全性
后端逻辑增加用户登录的判断
<?php
session_start();
if (!isset($_SESSION['logged_in']) || $_SESSION['logged_in'] !== true) {// 用户未登录,跳转到登录页面header('Location: login.php');exit;
}// 用户已登录,处理祝福数据
$blessing = htmlspecialchars(trim($_POST['blessing']));// 连接数据库
$db = mysqli_connect('host', 'username', 'password', 'database');// 插入数据
$query = "INSERT INTO blessings (blessing) VALUES ('$blessing')";
$result = mysqli_query($db, $query);// 检查是否插入成功
if ($result) {echo '祝福发送成功!';
} else {echo '祝福发送失败,请重试。';
}mysqli_close($db);
?>
可以看到,上面的代码增加了用户登录状态的判断,同时对$blessing进行了过滤。
设计登录页面
这是一个简单的login.php的代码示例:
<?php
session_start();
$errorMessage = '';if (isset($_POST['submit'])) {$username = $_POST['username'];$password = $_POST['password'];// 验证用户名和密码是否正确if ($username === 'admin' && $password === 'password') {$_SESSION['logged_in'] = true;header('Location: new_year_wishes_wall.php');exit;} else {$errorMessage = '用户名或密码错误!';}
}
?>
<html><head><title>登录</title></head><body><form action="" method="post"><fieldset><legend>登录</legend><?php if (!empty($errorMessage)) { echo $errorMessage . '<br><br>'; } ?>用户名:<input type="text" name="username"><br>密码:<input type="password" name="password"><br><input type="submit" name="submit" value="登录"></fieldset></form></body>
</html>
在这个代码示例中,首先使用session_start()启动会话。然后,如果表单被提交,它将检查用户提供的用户名和密码是否与预定义的用户名和密码匹配。如果匹配,则将$ _SESSION ['logged_in']设置为true,并重定向到新年祝福墙页面。如果用户名和密码不匹配,则显示错误消息。
上面的登录只设计了单用户登录,后面可以修改成从MySQL用户表查找用户信息。
支持多用户登录
以下是一个简单的用户登录系统的代码,用户信息存储在MySQL数据库中。注意到,现在存储的是明文密码,如需要增强安全性,可以增加md5()函数。
<?php
// 连接数据库
$conn = mysqli_connect("host", "username", "password", "database");// 判断连接是否成功
if (!$conn) {die("连接数据库失败:" . mysqli_connect_error());
}// 获取用户名和密码
$username = mysqli_real_escape_string($conn, $_POST['username']);
$password = mysqli_real_escape_string($conn, $_POST['password']);// 判断用户名和密码是否为空
if (!empty($username) && !empty($password)) {// 构造查询语句$sql = "SELECT * FROM users WHERE username='$username' AND password='$password'";$result = mysqli_query($conn, $sql);// 判断查询结果是否存在if (mysqli_num_rows($result) > 0) {// 设置登录状态$_SESSION['logged_in'] = true;$_SESSION['username'] = $username;// 跳转到祝福墙页面header('Location: wall.php');exit;} else {// 登录失败,显示错误信息echo "用户名或密码错误,请重试。";}
} else {// 用户名和密码为空,显示错误信息echo "请输入用户名和密码。";
}// 关闭数据库连接
mysqli_close($conn);
?>
前端部分未作修改。
管理功能的实现
祝福管理
下面是一种实现管理功能的方法,实现对祝福的增删查改:
数据库设计:首先需要为祝福数据创建一张数据表,表中包含祝福内容、发送者、发送时间等字段。
增加祝福:使用 insert 语句将新的祝福插入数据库中。
删除祝福:使用 delete 语句删除指定的祝福。
查询祝福:使用 select 语句查询祝福,可以根据需要设置查询条件。
修改祝福:使用 update 语句修改指定的祝福。
需要注意的是,为了保证数据的安全性,对于对数据库的操作,需要使用 prepared statements 避免 SQL 注入攻击。
以下是简单的代码示例:
增加祝福:
$conn = mysqli_connect("localhost", "username", "password", "database");
$blessing = "祝大家新春快乐!";$stmt = mysqli_prepare($conn, "INSERT INTO blessings (blessing) VALUES (?)");
mysqli_stmt_bind_param($stmt, "s", $blessing);
mysqli_stmt_execute($stmt);mysqli_stmt_close($stmt);
mysqli_close($conn);
删除祝福:
$conn = mysqli_connect("localhost", "username", "password", "database");
$id = 1;$stmt = mysqli_prepare($conn, "DELETE FROM blessings WHERE id = ?");
mysqli_stmt_bind_param($stmt, "i", $id);
mysqli_stmt_execute($stmt);mysqli_stmt_close($stmt);
mysqli_close($conn);
查询祝福:
$conn = mysqli_connect("localhost", "username", "password", "database");$stmt = mysqli_prepare($conn, "SELECT id, blessing FROM blessings");
mysqli_stmt_execute($stmt);mysqli_stmt_bind_result($stmt, $id, $blessing);
while (mysqli_stmt_fetch($stmt)) {printf("%d, %s\n", $id, $blessing);
}mysqli_stmt_close($stmt);
mysqli_close($conn);
修改祝福:
$conn = mysqli_connect("localhost", "username", "password", "database");
$id = 1;
$blessing = "祝大家新春快乐!";$stmt = mysqli_prepare($conn, "UPDATE blessings SET blessing = ? WHERE id = ?");
mysqli_stmt_bind_param($stmt, "si", $blessing, $id);
mysqli_stmt_execute($stmt);mysqli_stmt_close($stmt);
mysqli_close($conn);
以下是基于HTML, CSS 和 JavaScript 的简单的祝福管理界面的前端代码:
<!DOCTYPE html>
<html><head><meta charset="UTF-8"><title>祝福管理界面</title><style>/* 样式定义 */table {width: 100%;border-collapse: collapse;}th, td {border: 1px solid #dddddd;padding: 8px;text-align: left;}th {background-color: #dddddd;}.btn {background-color: #dddddd;border: none;padding: 8px 16px;text-align: center;cursor: pointer;}.add-btn {background-color: green;color: white;}.edit-btn {background-color: blue;color: white;}.delete-btn {background-color: red;color: white;}</style></head><body><table><tr><th>ID</th><th>祝福内容</th><th>操作</th></tr><!-- 表格数据加载 --><tr><td>1</td><td>新春快乐!</td><td><button class="btn edit-btn">编辑</button><button class="btn delete-btn">删除</button></td></tr><!-- 新增祝福按钮 --><tr><td colspan="3"><button class="btn add-btn">新增祝福</button></td></tr></table></body>
</html>
用户管理
下面是一份用 PHP 实现的用户管理的代码:
<?php// 连接数据库
$conn = mysqli_connect('localhost', 'username', 'password', 'database');// 查询所有用户
$query = "SELECT * FROM users";
$result = mysqli_query($conn, $query);// 输出所有用户
while ($row = mysqli_fetch_assoc($result)) {echo $row['id'] . ' ' . $row['username'] . ' ' . $row['email'] . '<br>';
}// 添加新用户
if (isset($_POST['submit'])) {$username = $_POST['username'];$email = $_POST['email'];$query = "INSERT INTO users (username, email) VALUES ('$username', '$email')";mysqli_query($conn, $query);
}// 修改用户信息
if (isset($_POST['update'])) {$id = $_POST['id'];$username = $_POST['username'];$email = $_POST['email'];$query = "UPDATE users SET username='$username', email='$email' WHERE id=$id";mysqli_query($conn, $query);
}// 删除用户
if (isset($_GET['delete'])) {$id = $_GET['delete'];$query = "DELETE FROM users WHERE id=$id";mysqli_query($conn, $query);
}// 关闭数据库连接
mysqli_close($conn);?>
这段代码实现了从数据库中查询所有用户、添加新用户、修改用户信息和删除用户的功能。使用者可以根据实际情况对代码进行修改,以达到最终的需求。
以下是一个用户管理界面的示例代码:
HTML代码:
<!DOCTYPE html>
<html><head><meta charset="UTF-8"><title>用户管理</title></head><body><h1>用户管理</h1><table><thead><tr><th>用户名</th><th>密码</th><th>操作</th></tr></thead><tbody id="user-list"></tbody></table><button id="add-user-btn">添加用户</button><div id="add-user-modal" style="display:none;"><h2>添加用户</h2><form id="add-user-form"><label>用户名:<input type="text" name="username" required></label><label>密码:<input type="password" name="password" required></label><button type="submit">提交</button><button id="close-add-user-modal">取消</button></form></div><div id="edit-user-modal" style="display:none;"><h2>编辑用户</h2><form id="edit-user-form"><input type="hidden" name="id"><label>用户名:<input type="text" name="username" required></label><label>密码:<input type="password" name="password" required></label><button type="submit">提交</button><button id="close-edit-user-modal">取消</button></form></div><script src="https://code.jquery.com/jquery-3.6.0.min.js"></script><script>$(function() {function loadUsers() {$.ajax({url: 'api/get_users.php',type: 'GET',dataType: 'json',success: function (data) {var html = '';data.forEach(function (user) {html +="<tr>" +"<td>" + user.id + "</td>" +"<td>" + user.username + "</td>" +"<td>" + user.email + "</td>" +"<td>" +"<button class='edit-user-btn' data-id='" + user.id + "'>Edit</button>" +"<button class='delete-user-btn' data-id='" + user.id + "'>Delete</button>" +"</td>" +"</tr>";});$('#users-table tbody').html(html);}});
}
</script></body>
</html>
相关文章:

php设计一个新春祝福墙
记得十几年前的时候,每到春节,各大网站都会建一个祝福墙,上面挂满网友的新年寄语。这些年随着移动互联网的高速发展,web的新春祝福墙越来越少了。今天,咱们就来考考古,用快速原型法进行设计。原型设计采用M…...

KubeSphere 社区双周报 | OpenFunction 集成 WasmEdge | 2023.02.03-02.16
KubeSphere 社区双周报主要整理展示新增的贡献者名单和证书、新增的讲师证书以及两周内提交过 commit 的贡献者,并对近期重要的 PR 进行解析,同时还包含了线上/线下活动和布道推广等一系列社区动态。 本次双周报涵盖时间为:2023.02.03-2023.…...

数字IC/FPGA 秋招知识点不全面整理
1. 引言 这篇文章的由来 秋招的时候,刚开始复习一些知识点的时候没有什么思路,只是盲目的看相关的书籍和资料,结果是留在脑子中的知识很有限,而且不够系统,在我需要它的时候,并不能很快的回忆起来。 于是就想着把一些典型的知识整理成一个文档,在进行刷题的时候可以比…...

你知道java8是如何排序Map嘛?
在Java中,有多种方法可以对Map进行排序,但是我们将重点介绍Java 8 Stream,这是实现目标的一种非常优雅的方法。 学习一下HashMap的merge()函数 在学习Map排序之前,有必要讲一下HashMap的merge()函数,该函数应用场景就…...

【李忍考研传】一、李忍
“老师,我来回答!” “非常好,我记得你是叫……呃……是李念同学吗?” “不,老师,我叫李忍。” “好,你来回答一下这个问题。” “这题用海明码校验的知识,能检错一位纠错一位&a…...

测牛学堂:软件测试python深入之类和对象的属性和方法总结
类对象和实例对象 类对象就是我们定义的类。 在代码执行的时候,解释器会自动创建类对象。 类对象的作用: 1 使用类对象创建实例对象 2 存储类的一些特性,就是类里面定义的属性 创建对象的过程也称为实例化的对象。所以,类创建的对…...

css实例--新闻页面
实现效果 实现代码 html代码: <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" co…...

SpringCloudGateway 动态转发后端服务
API网关的核心功能是统一流量入口,实现路由转发,SpringCloudGateway是API网关开发的技术之一,此外比较流行的还有Kong和ApiSix,这2个都是基于OpenResty技术栈。 简单的路由转发可以通过SpringCloudGateway的配置文件实现…...

使用canvas写一个flappy bird小游戏
简介 canvas 是HTML5 提供的一种新标签,它可以支持 JavaScript 在上面绘画,控制每一个像素,它经常被用来制作小游戏,接下来我将用它来模仿制作一款叫flappy bird的小游戏。flappy bird(中文名:笨鸟先飞&am…...

KVM-2、虚拟化基础
1. 虚拟化概念 什么是虚拟化 **虚拟化是使用所谓虚拟机管理程序从一台物理机上创建若干个虚拟机的过程。**虚拟机的行为和运转方式与物理机一样,但它们会使用物理机的计算资源,如 CPU 、内存和存储。虚拟机管理程序会根据需要将这些计算资源分配给每个虚拟机。 虚拟化有哪…...

设计模式之观察者模式与访问者模式详解和应用
目录1.访问者模式详解1.1 访问者模式的定义1.1.1 访问者模式在生活中的体现1.1.2 访问者模式的适用场景1.2 访问者模式的通用实现1.3 访问者模式的使用案例之KPI考核1.3.1 类图设计1.3.2 代码实现1.4 访问者模式扩展---分派1.4.1 java中静态分派示例代码1.4.2 java中动态分派1.…...

spring注解方式整合Dubbo源码解析
系列文章目录 前言 本节我们的Dubbo源码版本基于2.6.x 在前一章我们的整合案例中,我们有几个比较关键的步骤: 在启动类上标注了EnableDubbo注解在provider类上面标注了Service注解来提供dubbo服务在消费的时候通过Reference注解引入dubbo服务在配置文件…...

大数值金额大写转换(C语言)
关于大数值金额大写转换,在财务管理的应用方面没什么意义。一般来说,千亿级,万亿级的数值就够了。因为在国家级层面是以亿为单位的,也就表达为千万亿,万万亿。在企业层面数值金额转换设置到千亿、万亿就行了。大的集团…...

迷宫问题图解 : 基于骨架提取、四邻域
目录 1. 迷宫的连通域 2. How to remove branch ? 3. 基于4邻域的 remove 分支 3.1 找到分支的端点 3.2 4邻域的 remove 分支 3.3 循环移除分支 3.4 code 4. 迷宫路线 4.1 预处理 4.2 提取骨架 4.3 分支的端点 4.4 去除分支的端点 4.5 循环去除分支 4…...

设计模式 - 如何在库和主程序之间互相调用数据和函数
背景:在项目开发过程中,难免碰到这种情况,当我们想要通过我们开发的库,调用主程序中的一些变量或者函数的时候,就会导致一些问题,因为在项目构建过程中,库都是不依赖于主程序编译的,…...

Redis面试题:1~2亿条数据需要缓存,请问如何设计这个存储案例
目录 前言 一、哈希取余分区 优点 缺点 二、一致性哈希算法分区 背景 步骤 ① 算法构建一致性哈希环 ② 服务器IP节点映射 ③ key落到服务器的落键规则 优点 ① 容错性 ② 扩展性 缺点 三、哈希槽分区 前言 单机单台100%不可能,肯定是分布式存储&am…...

程序员必备的软技能-《如何阅读一本书》
阅读很重要,我们真的会阅读吗? 这本书的初版是 1940年,时隔 80年,其内容仍然不过时。第一次读这本书时,给我最大的影响就是主题阅读,每次学习一个新理论、技术,都入手多本关于这项理论、技术的书…...

Java数据结构-栈、队列常用类(Stack、ArrayDeque、LinkedLList)
数据结构的三要素包括:逻辑结构、存储结构、数据的运算。逻辑结构描述的是数据之间的逻辑关系,分为线性结构(线性表(数组、链表)、栈、队列)和非线性结构(图、树、集合)。物理结构也…...

拯救了大批爬虫程序员,因为一个简单的神器
相信大家应该都写过爬虫,简单的爬虫只需要使用 requests 即可。遇到复杂的爬虫,就需要在程序里面加上请求头和参数信息。类似这种:我们一般的步骤是,先到浏览器的网络请求中找到我们需要的请求,然后将请求头和参数信息…...

2023年美赛C题Wordle预测问题三、四建模及Python代码详细讲解
更新时间:2023-2-19 16:30 相关链接 (1)2023年美赛C题Wordle预测问题一建模及Python代码详细讲解 (2)2023年美赛C题Wordle预测问题二建模及Python代码详细讲解 (3)2023年美赛C题Wordle预测问题三、四建模…...

相关性-回忆录(持续更新)
1.TODO方向 (1)数据增强:finetuning阶段需要大量人工标注样本,消耗时间和成本。用户点击数据作为弱监督学习,可以尝试图网络构建节点和边(query聚合); 使用展现未点击生成对抗网络进…...

(必备技能)使用Python实现屏幕截图
(必备技能)使用Python实现屏幕截图 文章目录 (必备技能)使用Python实现屏幕截图 一、序言二、环境配置 1、下载pyautogui包2、下载opencv-python包3、下载PyQt5包4、下载pypiwin32包 三、屏幕截屏源码与解析 1、使用pyautogui方法实现截屏2、使用PyQt方法实现截屏 a.获取窗口…...

「数据仓库」怎么选择现代数据仓库?
构建自己的数据仓库时要考虑的基本因素我们用过很多数据仓库。当我们的客户问我们,对于他们成长中的公司来说,最好的数据仓库是什么时,我们会根据他们的具体需求来考虑答案。通常,他们需要几乎实时的数据,价格低廉&…...

6.3 使用 Swagger 生成 Web API 文档
第6章 构建 RESTful 服务 6.1 RESTful 简介 6.2 构建 RESTful 应用接口 6.3 使用 Swagger 生成 Web API 文档 6.4 实战:实现 Web API 版本控制 6.3 使用 Swagger 生成 Web API 文档 高质量的 API 文档在系统开发的过程中非常重要。本节介绍什么是 Swaggerÿ…...

Day894.加锁规则的一些问题 -MySQL实战
加锁规则的一些问题 Hi,我是阿昌,今天学习记录的是关于加锁规则的一些问题的内容。 加锁规则,这个规则中,包含了两个“原则”、两个“优化”和一个“bug”: 原则 1:加锁的基本单位是 next-key lock。nex…...

【Flutter入门到进阶】Dart进阶篇---Dart异步编程
1 并行与并发的编程区别 1.1 并发与并行 1.1.1 说明 我们举个例子,如果有条高速公路 A 上面并排有 8 条车道,那么最大的并行车辆就是 8 辆此条高速公路 A 同时并排行走的车辆小于等于 8 辆的时候,车辆就可以并行运行。 CPU 也是这个原理,一个 CPU 相当于一个高速公路 A,核心数…...

点云配准方法原理(NDT、ICP)
配准是点云处理中的一个基础问题,众多学者此问题进行了广泛而深入的研究,也出现了一系列优秀成熟的算法,在三维建模、自动驾驶等领域发挥着重要的作用。 本文主要介绍粗配准NDT (Normal Distribution Transform) 与 精配准ICP (Iterative Cl…...

大规模 IoT 边缘容器集群管理的几种架构-0-边缘容器及架构简介
📚️Reference: IoT 边缘计算系列文章 什么是边缘容器? 边缘容器的概念 边缘容器是分散的计算资源,尽可能靠近最终用户或设备,以减少延迟、节省带宽并增强整体数字体验。 可以访问互联网的设备数量每天都在增加。有包括但不限于…...

代码随想录算法训练营第45天动态规划 背包基础 1 2、 416. 分割等和子集
文章目录01背包基础 (二维数组)思路递推公式初始化遍历顺序一维dp数组(滚动数组)一维数组的递推公式遍历顺序LeetCode 416. 分割等和子集思路总结01背包基础 (二维数组) 思路 根据动态规划五部进行分析&a…...