PHP+MySQL实现后台管理系统增删改查之够用就好

说明

最近要给博客弄个后台,不想搞得很复杂,有基本的增删改查就够了,到网上找了一圈发现这个不错,很实用,希望可以帮到大家,需要的朋友评论区留下邮箱,我安排发送。

在这里插入图片描述

演示效果

在这里插入图片描述

项目介绍

本项目基于Php开发,实现最基本的增删改查页面,通常作为简单的后台管理系统使用。

技术栈

  • php7+
  • mysql5.7+

运行步骤

  1. 本机搭建好mysql数据库和php运行环境(推荐下载安装phpstudy软件,运行mysql和apache,PHP建议选择7.4+)
  2. 将本项目文件夹复制到web运行目录,例如:d:/phpstudy/www,phpstudy中创建网站并指向该目录
  3. mysql中创建数据库: phpcrud,执行脚本:phpcrud.sql
  4. 修改db.php文件中数据库密码
  5. 浏览器访问:localhost:端口/phpcrud

核心代码

首页

<?php
include 'functions.php';
// Your PHP code here.// Home Page template below.
?><?= template_header('Home') ?><div class="content"><h2>首页</h2><p>欢迎来到首页!</p>
</div><?= template_footer() ?>

列表查询

<?php
include 'functions.php';
// Connect to MySQL database
$pdo = pdo_connect_mysql();
// Get the page via GET request (URL param: page), if non exists default the page to 1
$page = isset($_GET['page']) && is_numeric($_GET['page']) ? (int)$_GET['page'] : 1;
// Number of records to show on each page
$records_per_page = 5;
// Prepare the SQL statement and get records from our contacts table, LIMIT will determine the page
$stmt = $pdo->prepare('SELECT * FROM contacts ORDER BY id LIMIT :current_page, :record_per_page');
$stmt->bindValue(':current_page', ($page - 1) * $records_per_page, PDO::PARAM_INT);
$stmt->bindValue(':record_per_page', $records_per_page, PDO::PARAM_INT);
$stmt->execute();
// Fetch the records so we can display them in our template.
$contacts = $stmt->fetchAll(PDO::FETCH_ASSOC);
// Get the total number of contacts, this is so we can determine whether there should be a next and previous button
$num_contacts = $pdo->query('SELECT COUNT(*) FROM contacts')->fetchColumn();
?><?= template_header('Read') ?><div class="content read"><h2>联系人列表</h2><a href="create.php" class="create-contact">新增</a><table><thead><tr><td>#</td><td>姓名</td><td>邮箱</td><td>电话</td><td>级别</td><td>创建时间</td><td></td></tr></thead><tbody><?php foreach ($contacts as $contact) : ?><tr><td><?= $contact['id'] ?></td><td><?= $contact['name'] ?></td><td><?= $contact['email'] ?></td><td><?= $contact['phone'] ?></td><td><?= $contact['title'] ?></td><td><?= $contact['created'] ?></td><td class="actions"><a href="update.php?id=<?= $contact['id'] ?>" class="edit"><i class="fas fa-pen fa-xs"></i></a><a href="delete.php?id=<?= $contact['id'] ?>" class="trash"><i class="fas fa-trash fa-xs"></i></a></td></tr><?php endforeach; ?></tbody></table><div class="pagination"><?php if ($page > 1) : ?><a href="read.php?page=<?= $page - 1 ?>"><i class="fas fa-angle-double-left fa-sm"></i></a><?php endif; ?><?php if ($page * $records_per_page < $num_contacts) : ?><a href="read.php?page=<?= $page + 1 ?>"><i class="fas fa-angle-double-right fa-sm"></i></a><?php endif; ?></div>
</div><?= template_footer() ?>

新增页面

在这里插入图片描述

<?php
include 'functions.php';
$pdo = pdo_connect_mysql();
$msg = '';
// Check if POST data is not empty
if (!empty($_POST)) {// Post data not empty insert a new record// Set-up the variables that are going to be inserted, we must check if the POST variables exist if not we can default them to blank$id = isset($_POST['id']) && !empty($_POST['id']) && $_POST['id'] != 'auto' ? $_POST['id'] : NULL;// Check if POST variable "name" exists, if not default the value to blank, basically the same for all variables$name = isset($_POST['name']) ? $_POST['name'] : '';$email = isset($_POST['email']) ? $_POST['email'] : '';$phone = isset($_POST['phone']) ? $_POST['phone'] : '';$title = isset($_POST['title']) ? $_POST['title'] : '';$created = isset($_POST['created']) ? $_POST['created'] : date('Y-m-d H:i:s');// Insert new record into the contacts table$stmt = $pdo->prepare('INSERT INTO contacts VALUES (?, ?, ?, ?, ?, ?)');$stmt->execute([$id, $name, $email, $phone, $title, $created]);// Output message$msg = '新增成功!';
}
?><?= template_header('Create') ?><div class="content update"><h2>Create Contact</h2><form action="create.php" method="post"><label for="id">ID</label><label for="name">姓名</label><input type="text" name="id" placeholder="26" value="auto" id="id"><input type="text" name="name" placeholder="John Doe" id="name"><label for="email">邮箱</label><label for="phone">电话</label><input type="text" name="email" placeholder="johndoe@example.com" id="email"><input type="text" name="phone" placeholder="2025550143" id="phone"><label for="title">级别</label><label for="created">创建时间</label><input type="text" name="title" placeholder="Employee" id="title"><input type="datetime-local" name="created" value="<?= date('Y-m-d\TH:i') ?>" id="created"><input type="submit" value="Create"></form><?php if ($msg) : ?><p><?= $msg ?></p><?php endif; ?>
</div><?= template_footer() ?>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/512491.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

吴恩达机器学习笔记:第5周-9 神经网络的学习1(Neural Networks: Learning)

目录 9.1 代价函数9.2 反向传播算法9.3 反向传播算法的直观理解 9.1 代价函数 首先引入一些便于稍后讨论的新标记方法&#xff1a; 假设神经网络的训练样本有&#x1d45a;个&#xff0c;每个包含一组输入&#x1d465;和一组输出信号&#x1d466;&#xff0c;&#x1d43f;…

2024大广赛参赛流程分享

自2005年第一届以来&#xff0c;全国大学生广告艺术大赛&#xff08;以下简称大广赛&#xff09;遵循“促进教育改革、启迪智慧、增强能力、提高素质、培养人才”的竞赛宗旨&#xff0c;成功举办了14届15届大赛&#xff0c;共有1857所高校参加&#xff0c;100多万学生提交作品。…

【详识JAVA语言】String类oj练习

1. 第一个只出现一次的字符 class Solution { public int firstUniqChar(String s) {int[] count new int[256];// 统计每个字符出现的次数for(int i 0; i < s.length(); i){count[s.charAt(i)];}// 找第一个只出现一次的字符for(int i 0; i < s.length(); i){if(1 …

生产工厂数据中台解决方案:打造可视化平台,为工业搭建智慧大脑-亿发

制造数据中台是将企业现有的业务软件系统进行整合并打通&#xff0c;形成一套标准模块化框架&#xff0c;然后在此基础上构建一个统一的信息服务和应用平台。数据中台的建设涵盖了诸如 ERP&#xff08;供应链管理&#xff09;、MES&#xff08;制造执行管理&#xff09;、SRM&a…

激光雷达点云数据邻域特征计算理论知识学习

一、数学理论 &#xff08;一&#xff09;SVD奇异值分解&#xff08;Singular value decomposition&#xff09; 奇异值分解是线性代数中一种重要的矩阵分解&#xff0c;在信号处理、统计学等领域有重要应用。奇异值分解在某些方面与对称矩阵或埃尔米特矩阵基于特征向量的对角…

哪些型号的高速主轴适合PCB分板机

在选择适合PCB分板机的高速主轴时&#xff0c;SycoTec品牌提供了丰富的型号选择&#xff0c;主要型号包括4025 HY、4033 AC&#xff08;电动换刀&#xff09;、4033 AC-ESD、4033 DC-T和4041 HY-ESD等。 那么如何选择合适的PCB分板机高速主轴型号呢&#xff1f;在选择适合PCB分…

06. Nginx进阶-Nginx代理服务

proxy代理功能 正向代理 什么是正向代理&#xff1f; 正向代理&#xff08;forward proxy&#xff09;&#xff0c;一个位于客户端和原始服务器之间的服务器。 工作原理 为了从原始服务器获取内容&#xff0c;客户端向代理发送一个请求并指定目标&#xff08;即原始服务器…

VS Code插件之Rainbow Fart,一边写代码妹子一边叫

1、下载Rainbow Fart 2、安装完成后打开这个插件 点击菜单中的“查看”——>命令面板 3、点击授权

数据可视化原理-腾讯-3D热力图

在做数据分析类的产品功能设计时&#xff0c;经常用到可视化方式&#xff0c;挖掘数据价值&#xff0c;表达数据的内在规律与特征展示给客户。 可是作为一个产品经理&#xff0c;&#xff08;1&#xff09;如果不能够掌握各类可视化图形的含义&#xff0c;就不知道哪类数据该用…

Ubantu 18.04 配置固定IP

1.首先在终端里输入命令,将你的网关和ip&#xff0c;记下来 ifconfig 2. 执行命令&#xff1a; sudo gedit /etc/network/interfaces 3.在弹出来的框里输入 auto后面的就是网关&#xff0c;address是你虚拟机的ip&#xff0c;gateway是你的网关ip&#xff0c;netmask是你的子…

TensorRT入门:trtexec开发辅助工具的使用

文章目录 一、trtexec简介二、trtexec使用1.trtexec常用参数1. 构建阶段2. 运行阶段 2.基本使用方法1. trtexec最基本的使用方法&#xff0c;读取onnx模型并通过trtexec测试推理性能。2. trtexec解析ONNX文件&#xff0c;使用优化选择构建TensorRT引擎并保存至.plan文件补充&am…

Upsert api写s3的流程源码分析

Upsert api写s3的流程 milvus版本:v2.3.2 实现:先insert再delete&#xff0c;并限制不能修改主键列。 整体架构: Upsert 的数据流向 upsert写入s3的流程 upsert先insert&#xff0c;再delete。从proxy的execute()方法可以看出。 func (it *upsertTask) Execute(ctx contex…