期末大作业——许愿墙

简介: 文章目录

文章目录

项目展示

首页访问地址 http://localhost/WISH/index.php

image.png image.png image.png image.png image.png image.png 

代码

│  index.php
│  php_wish.sql
│  save.php
├─common
│      function.php
│      init.php
├─css
│      style.css
├─js
│      common.js
│      jquery-1.12.4.min.js
└─view
    │  index.html
    └─common
            add.html
            edit.html
            password.html

<?php
require './common/init.php';
require './common/function.php';
// 获取当前页码
$page = max(input('get', 'page', 'd'), 1);
// 每页显示的条数
$size = 4;
$sql = 'SELECT count(*) FROM `wish`';
if (!$res = mysqli_query($link, $sql)) {
    exit("SQL[$sql]执行失败:" . mysqli_error($link));
}
$total = (int) mysqli_fetch_row($res)[0];
// 查询所有愿望
$sql = 'SELECT `id`,`name`,`content`,`time`,`color` FROM `wish` ORDER BY `id` DESC LIMIT ' . page_sql($page, $size);
if (!$res = mysqli_query($link, $sql)) {
    exit("SQL[$sql]执行失败:" . mysqli_error($link));
}
$data = mysqli_fetch_all($res, MYSQLI_ASSOC);
mysqli_free_result($res);
// 查询结果为空时,自动返回第1页
if (empty($data) && $page > 1) {
    header('Location: ./index.php?page=1');
    exit;
}
// 编辑或删除愿望
$id = max(input('get', 'id', 'd'), 0);
$action = input('get', 'action', 's');
if ($id) {
    $password = input('post', 'password', 's');
    $sql = 'SELECT `name`,`content`,`color`,`password` FROM `wish` WHERE `id`=' . $id;
    if (!$res = mysqli_query($link, $sql)) {
        exit("SQL[$sql]执行失败:" . mysqli_error($link) . $sql);
    }
    if (!$edit = mysqli_fetch_assoc($res)) {
        exit('该愿望不存在!');
    }
    mysqli_free_result($res);
    $checked = isset($_POST['password']) || empty($edit['password']);
    if ($checked && $password !== $edit['password']) {
        $tips = '密码不正确!';
        $checked = false;
    }
    // 删除愿望
    if ($checked && $action == 'delete') {
        $sql = 'DELETE FROM `wish` WHERE `id`=' . $id;
        if (!mysqli_query($link, $sql)) {
            exit('SQL执行失败:' . mysqli_error($link));
        }
        header('Location: ./index.php');
        exit;
    }
}
mysqli_close($link);
require './view/index.html';

<?php
/**
 * 接收输入的函数
 * @param array $method 输入的数组(可用字符串get、post来表示)
 * @param string $name 从数组中取出的变量名
 * @param string $type 表示类型的字符串
 * @param mixed $default 变量不存在时使用的默认值
 * @return mixed 返回的结果
 */
function input($method, $name, $type = 's', $default = '')
{
    switch ($method) {
        case 'get': $method = $_GET;
            break;
        case 'post': $method = $_POST;
            break;
    }
    $data = isset($method[$name]) ? $method[$name] : $default;
    switch ($type) {
        case 's': return is_string($data) ? $data : $default;
        case 'd': return (int) $data;
        default: trigger_error('不存在的过滤类型“' . $type . '”');
    }
}
/**
 * 格式化日期
 * @param type $time 给定时间戳
 * @return string 从给定时间到现在经过了多长时间(天/小时/分钟/秒)
 */
function format_date($time)
{
    $diff = time() - $time;
    $format = [86400 => '天', 3600 => '小时', 60 => '分钟', 1 => '秒'];
    foreach ($format as $k => $v) {
        $result = floor($diff / $k);
        if ($result) {
            return $result . $v;
        }
    }
    return '0.5秒';
}
/**
 * 生成分页导航HTML
 * @param string $url 链接地址
 * @param int $total 总记录数
 * @param init $page 当前页码值
 * @param int $size 每页显示的条数
 * @return string 生成的HTML结果
 */
function page_html($url, $total, $page, $size)
{
    // 计算总页数
    $maxpage = max(ceil($total / $size), 1);
    // 如果不足2页,则不显示分页导航
    if ($maxpage <= 1) {
        return '';
    }
    if ($page == 1) {
        $first = '<span>首页</span>';
        $prev = '<span>上一页</span>';
    } else {
        $first = "<a href=\"{$url}1\">首页</a>";
        $prev = '<a href="' . $url . ($page - 1) . '">上一页</a>';
    }
    if ($page == $maxpage) {
        $next = '<span>下一页</span>';
        $last = '<span>尾页</span>';
    } else {
        $next = '<a href="' . $url . ($page + 1) . '">下一页</a>';
        $last = "<a href=\"{$url}{$maxpage}\">尾页</a>";
    }
    // 组合最终样式
    return "<p>当前位于:$page/$maxpage</p>$first $prev $next $last";
}
/**
 * 获取SQL中的分页部分
 * @param int $page 当前页码值
 * @param int $size 每页显示的条数
 * @return string 拼接后的结果
 */
function page_sql($page, $size)
{
    return ($page - 1) * $size . ',' . $size;
}

获取代码

https://github.com/hiszm/wallwish

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
目录
相关文章
|
前端开发 算法 Java
1024程序员节|历经一个月总结使用java实现pdf文件的电子签字+盖章+防伪二维码+水印+PDF文件加密的全套解决方案
🍅程序员小王的博客:程序员小王的博客 🍅CSDN地址:程序员小王java 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 🍅 如有编辑错误联系作者,如果有比较好的文章欢迎分享给我,我会取其精华去其糟粕 🍅java自学的学习路线:java自学的学习路线
3157 0
1024程序员节|历经一个月总结使用java实现pdf文件的电子签字+盖章+防伪二维码+水印+PDF文件加密的全套解决方案
|
存储 关系型数据库 MySQL
MySQL安装优化
MySQL安装优化
219 0
|
9月前
|
人工智能 供应链 监控
千星计划如何解决引流裂变留存复购的难题?
千星计划通过零成本裂变引擎、指数级收益设计、AI风控及私域闭环,解决引流、裂变、留存和复购难题。其核心策略包括3人裂变层级叠加、强制任务机制、清流算法和视频号带货绑定等,大幅降低获客成本(从50元降至10元),提升留存率(85%以上)和复购频次(2.1次/月)。实际案例显示,采用该模型的企业30天内用户LTV从89元提升至217元。
|
安全 关系型数据库 Go
远程连接PostgreSQL:配置指南与安全建议
远程连接PostgreSQL:配置指南与安全建议
1240 0
|
存储 关系型数据库 MySQL
深入解析MySQL 8:事务数据字典的变革
深入解析MySQL 8:事务数据字典的变革
|
存储 JSON API
Elasticsearch Pipeline 详解
Elasticsearch Pipeline 详解
823 0
|
存储 缓存 算法
数据空间
数据空间(Data Space)是计算机系统中用于存储和管理数据的区域。数据空间包括处理器内部的寄存器、数据缓存(Data Cache)以及内存中的数据段(Data Segment)等。数据空间的作用是接收、存储和处理来自外部设备或程序的数据,从而实现计算机系统的功能。
1480 4
|
机器学习/深度学习 数据采集 算法
聚类分析实战:scikit-learn助你轻松上手
【4月更文挑战第17天】使用scikit-learn进行聚类分析,包括K-Means、DBSCAN、Mean Shift和Hierarchical Clustering等算法。实战步骤涉及数据预处理、选择算法、确定簇数量、训练模型和评估结果。以鸢尾花数据集为例,展示如何应用K-Means进行聚类,并强调理解结果的重要性。
|
Kubernetes 负载均衡 Serverless
通过EDAS部署并访问应用
本实验旨在通过使用分布式应用服务EDAS纳管容器服务ASK,掌握微服务应用的部署和访问。
|
存储 Linux 编译器
Linux平台上DPDK入门指南:快速提升网络性能的利器
Linux平台上DPDK入门指南:快速提升网络性能的利器