1.分析

index.php是呈现列表,通过点击列表页上的添加和删除按钮,对列表页上面的进行操作

index.php

TODO:要将数据库里面的内容呈现到页面中

(1)连接数据库

(2)查询数据

(3)混编

<?php
//连接数据库
$connection=mysqli_connect('localhost','root','123','test');
if(!$connection){
exit('<h1>数据库连接失败</h2>');
} //建立查询
$query = mysqli_query($connection,'select * from users;');
if(!$query){
exit('数据库查询失败');
} //转为数组
/*while($item = mysqli_fetch_assoc($query)){
var_dump($item);
}*/
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>XXX管理系统</title>
<link rel="stylesheet" href="assets/css/bootstrap.css">
<link rel="stylesheet" href="assets/css/style.css">
</head>
<body>
<nav class="navbar navbar-expand navbar-dark bg-dark fixed-top">
<a class="navbar-brand" href="#">XXX管理系统</a>
<ul class="navbar-nav mr-auto">
<li class="nav-item active">
<a class="nav-link" href="index.html">用户管理</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">商品管理</a>
</li>
</ul>
</nav>
<main class="container">
<h1 class="heading">用户管理 <a class="btn btn-link btn-sm" href="add.php">添加</a></h1>
<table class="table table-hover">
<thead>
<tr>
<th><input type="checkbox" name="check[]"></th>
<th>#</th>
<th>头像</th>
<th>姓名</th>
<th>性别</th>
<th>年龄</th>
<th class="text-center" width="140">操作</th>
</tr>
</thead>
<tbody>
<?php while($item = mysqli_fetch_assoc($query)): ?>
<tr>
<th><input type="checkbox" name="check[]"></th>
<th scope="row"><?php echo $item['id']; ?></th>
<td><img src="<?php echo $item['src']; ?>" class="rounded" alt="<?php echo $item['name']; ?>"></td>
<td><?php echo $item['name']; ?></td>
<td><?php echo $item['gender'] == 0 ? '♀' : '♂'; ?></td>
<td><?php echo $item['birthday']; ?></td>
<td class="text-center">
<a class="btn btn-info btn-sm" href="edit.php?id=<?php echo $item['id'];?>">编辑</a>
<a class="btn btn-danger btn-sm" href="delete.php?id=<?php echo $item['id'];?>">删除</a>
</td>
</tr> <?php endwhile ?> </tbody>
</table>
<ul class="pagination justify-content-center">
<li class="page-item"><a class="page-link" href="#">&laquo;</a></li>
<li class="page-item"><a class="page-link" href="#">1</a></li>
<li class="page-item"><a class="page-link" href="#">2</a></li>
<li class="page-item"><a class="page-link" href="#">3</a></li>
<li class="page-item"><a class="page-link" href="#">&raquo;</a></li>
</ul>
</main>
</body>
</html>

add.php

DOTO:在数据库里面添加数据

(1)表单验证  (2)持久化( 3)响应

需要注意的几个问题:

(1)在单选中,value=-1默认是没有选中

<?php
function add(){ //目标:表单验证,持久化,响应 //表单验证
//验证姓名
if(empty($_POST['name'])){
$GLOBALS['error_message'] = '请输入姓名';
return ;
}
if(!(isset($_POST['gender'])&&$_POST['gender']!=='-1')){
$GLOBALS['error_message'] = '请选择性别';
return;
} if(empty($_POST['birthday'])){
$GLOBALS['error_message'] = '请选择生日'; return;
} $name=$_POST['name'];
$gender=$_POST['gender'];
$birthday=$_POST['birthday'];
//头像验证 if (empty($_FILES['src'])) {
$GLOBALS['error_message'] = '请上传头像';
return;
} $ext = pathinfo($_FILES['src']['name'], PATHINFO_EXTENSION);
// => jpg
$target = '../uploads/avatar-' . uniqid() . '.' . $ext; if (!move_uploaded_file($_FILES['src']['tmp_name'], $target)) {
$GLOBALS['error_message'] = '上传头像失败';
return;
} $src = substr($target, 2); //持久化,将数据保存到数据库中
//连接数据库 $connection=mysqli_connect('localhost','root','123','test');
if(!$connection){
$GLOBALS['error_message'] = '数据库连接失败';
} $query = mysqli_query($connection, "insert into users values (null, '{$name}', {$gender}, '{$birthday}', '{$src}');");
//建立查询 if(!$query){
$GLOBALS['error_message'] = '数据库插入失败';
} //响应
header('Location: index.php');
}
if($_SERVER['REQUEST_METHOD']=='POST'){
add();
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>XXX管理系统</title>
<link rel="stylesheet" href="assets/css/bootstrap.css">
<link rel="stylesheet" href="assets/css/style.css">
</head>
<body>
<nav class="navbar navbar-expand navbar-dark bg-dark fixed-top">
<a class="navbar-brand" href="#">XXX管理系统</a>
<ul class="navbar-nav mr-auto">
<li class="nav-item active">
<a class="nav-link" href="index.html">用户管理</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">商品管理</a>
</li>
</ul>
</nav>
<main class="container">
<h1 class="heading">添加用户</h1>
<?php if (isset($error_message)): ?>
<div class="alert alert-warning">
<?php echo $error_message; ?>
</div>
<?php endif ?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data" autocomplete="off">
<div class="form-group">
<label for="avatar">头像</label>
<input type="file" class="form-control" id="avatar" name="src">
</div>
<div class="form-group">
<label for="name">姓名</label>
<input type="text" class="form-control" id="name" name="name">
</div>
<div class="form-group">
<label for="gender">性别</label>
<select class="form-control" id="gender" name="gender">
<option value="-1">请选择性别</option>
<option value="1">男</option>
<option value="0">女</option>
</select>
</div>
<div class="form-group">
<label for="birthday">生日</label>
<input type="date" class="form-control" id="birthday" name="birthday">
</div>
<button class="btn btn-primary">保存</button>
</form>
</main>
</body>
</html>

edit.php

注意的问题:

(1)这里需要加上一个空格,属性和属性之间必须要有空格,

(2)如果gender=" "  这是不选中的情况,但是null==0,返回的是TRUE,

(3)<input type="text  hidden>可以隐藏该表单

(4)非常重要的问题

在html中,函数里面不能使用函数外面的变量,如果要使用应该都声明为全局变量

<?php

// 接收要修改的数据 ID
if (empty($_GET['id'])) {
exit('<h1>必须传入指定参数</h1>');
} $id = $_GET['id']; // 1. 建立连接
$conn = mysqli_connect('localhost', 'root', '123', 'test'); if (!$conn) {
exit('<h1>连接数据库失败</h1>');
} // 2. 开始查询
// 因为 ID 是唯一的 那么找到第一个满足条件的就不用再继续了 limit 1
$query = mysqli_query($conn, "select * from users where id = {$id} limit 1;"); if (!$query) {
exit('<h1>查询数据失败</h1>');
} // 已经查询到的当前数据
$user = mysqli_fetch_assoc($query); if (!$user) {
exit('<h1>找不到你要编辑的数据</h1>');
} function edit () {
global $user;
global $conn,$query;
// 验证非空
if (empty($_POST['name'])) {
$GLOBALS['error_message'] = '请输入姓名';
return;
} if (!(isset($_POST['gender']) && $_POST['gender'] !== '-1')) {
$GLOBALS['error_message'] = '请选择性别';
return;
} if (empty($_POST['birthday'])) {
$GLOBALS['error_message'] = '请输入日期';
return;
} // 取值
$user['name'] = $_POST['name'];
$user['gender'] = $_POST['gender'];
$user['birthday'] = $_POST['birthday']; // 有上传就修改
if (isset($_FILES['src']) && $_FILES['src']['error'] === UPLOAD_ERR_OK) {
// 用户上传了新头像 -> 用户希望修改头像
$ext = pathinfo($_FILES['src']['name'], PATHINFO_EXTENSION);
$target = '../uploads/avatar-' . uniqid() . '.' . $ext;
if (!move_uploaded_file($_FILES['src']['tmp_name'], $target)) {
$GLOBALS['error_message'] = '上传头像失败';
return;
}
$user['src'] = substr($target, 2);
} // $user => 修改过后的信息
// TODO: 将数据更新回数据库
$newdata=mysqli_query($conn,"update users set name='{$user['name']}', gender={$user['gender']},birthday='{$user['birthday']}',src='{$user['src']}' where id={$user['id']} limit 1;");
if(!$newdata){
$GLOBALS['error-message'] = '更新数据失败';
}
header('Location: index.php');
}
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
edit();
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>XXX管理系统</title>
<link rel="stylesheet" href="assets/css/bootstrap.css">
<link rel="stylesheet" href="assets/css/style.css">
</head>
<body>
<nav class="navbar navbar-expand navbar-dark bg-dark fixed-top">
<a class="navbar-brand" href="#">XXX管理系统</a>
<ul class="navbar-nav mr-auto">
<li class="nav-item active">
<a class="nav-link" href="index.html">用户管理</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">商品管理</a>
</li>
</ul>
</nav>
<main class="container">
<h1 class="heading">编辑“<?php echo $user['name']; ?>”</h1>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>?id=<?php echo $user['id']; ?>" method="post" enctype="multipart/form-data">
<!-- <input type="hidden" id="id" value="<?php echo $user['id']; ?>"> -->
<img src="<?php echo $user['avatar']; ?>" alt="">
<div class="form-group">
<label for="avatar">头像</label>
<!-- 文件域不能设置默认值 -->
<input type="file" class="form-control" id="avatar" name="avatar">
</div>
<div class="form-group">
<label for="name">姓名</label>
<input type="text" class="form-control" id="name" name="name" value="<?php echo $user['name']; ?>">
</div>
<div class="form-group">
<label for="gender">性别</label>
<select class="form-control" id="gender" name="gender">
<option value="-1">请选择性别</option>
<option value="1"<?php echo $user['gender'] === '1' ? ' selected': ''; ?>>男</option>
<option value="0"<?php echo $user['gender'] === '0' ? ' selected': ''; ?>>女</option>
</select>
</div>
<div class="form-group">
<label for="birthday">生日</label>
<input type="date" class="form-control" id="birthday" name="birthday" value="<?php echo $user['birthday']; ?>">
</div>
<button class="btn btn-primary">保存</button>
</form>
</main>
</body>
</html>

delete.php

<?php
$id = $_GET['id'];
//建立数据库连接
$conncetion=mysqli_connect('localhost','root','123','test');
if(!$conncetion){
exit('<h1>数据库连接失败</h1>');
}
//查询
$query=mysqli_query($conncetion,'delete from users where id='.$id.';');
if(!$query){
exit('<h1>数据库查询失败</h1>');
} header('Location: index.php');

php+mysql简单的添加和删除小案例的更多相关文章

  1. EF简单的添加修改删除基本语法

    using ( androidhiveEntities db = new androidhiveEntities() )                {                    #re ...

  2. mysql为字段添加或删除自增属性

    删除自增属性: ALTER TABLE `members` CHANGE uid uid INT(10) UNSIGNED NOT NULL ; 添加自增属性: ALTER TABLE `member ...

  3. hibernate添加数据入门小案例

    1.建立一个java项目,在目录下新建一个lib文件夹引入hibernate架包如图所示: 2. 新建com.LHB.domain包,在包中分别创建一个Employee.java和Employee.h ...

  4. js_提示是否删除小案例

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. vue.js简单添加和删除

    这只是个简单的添加和删除,没有连接后台数据的 <%@ page language="java" contentType="text/html; charset=UT ...

  6. python全栈开发day61-django简单的出版社网站展示,添加,删除,编辑(单表的增删改查)

    day61 django内容回顾: 1. 下载: pip install django==1.11.14 pip install -i 源 django==1.11.14 pycharm 2. 创建项 ...

  7. Ansible 从MySQL数据库添加或删除用户

    mysql_user - 从MySQL数据库添加或删除用户. 概要 要求(在执行模块的主机上) 选项 例子 笔记 状态 支持 概要 从MySQL数据库添加或删除用户. 要求(在执行模块的主机上) My ...

  8. Ansible 从远程主机添加或删除MySQL数据库

    mysql_db - 从远程主机添加或删除MySQL数据库. 概要 要求(在执行模块的主机上) 选项 例子 笔记 状态 支持 概要 从远程主机添加或删除MySQL数据库. 要求(在执行模块的主机上) ...

  9. Django实现简单的用户添加、删除、修改等功能

    一. Django必要的知识点补充 1. templates和static文件夹及其配置 1.1 templates文件夹 所有的HTML文件默认都放在templates文件夹下. 1.2 stati ...

随机推荐

  1. vue 使用技巧总结 19.01

    组件中箭头函数的使用 不要使用箭头来定义任意生命周期钩子函数: 不要使用箭头来定义一个 methods 函数: 不要使用箭头来定义 computed 里的函数: 不要使用箭头定义 watch 里的函数 ...

  2. 转载:实现MATLAB2016a和M文件关联

    转载自http://blog.csdn.net/qq_22186119 新安装MATLAB2016a之后,发现MATLAB没有和m文件关联 每次打开m文件后都会重新打开一次MATLAB主程序 后来发现 ...

  3. 【数学建模】day01-线性规划问题

      线性规划问题是在一组线性约束条件下,求线性目标函数最大/最小值的问题.这些约束条件有不等式约束.等式约束以及边界约束,这和中学讲的线性规划无异. 此类问题的MATLAB标准形式为: 其中,max问 ...

  4. Civil 3D 二次开发 名称模板不能正常工作

    using Autodesk.AECC.Interop.Land; using Autodesk.AECC.Interop.UiLand; using Autodesk.AutoCAD.Applica ...

  5. springMVC (优秀篇)

    本文依然是复制的 Spring3 MVC结构简单,应了那句话简单就是美,而且他强大不失灵活,性能也很优秀. 官方的下载网址是:http://www.springsource.org/download  ...

  6. git 出现错误时

    Your local changes to the following files would be overwritten by merge: 解决办法 如果希望保留生产服务器上所做的改动,仅仅并入 ...

  7. springMVC整理03--处理数据模型 & 试图解析器 & @ResponseBody & HttpEntity

    1.处理模型数据 SpringMVC 中的模型数据是非常重要的,因为 MVC 中的控制(C)请求处理业务逻辑来生成数据模型(M),而视图(V)就是为了渲染数据模型的数据.当有一个查询的请求,控制器(C ...

  8. python学习日记(函数--装饰器)

    楔子 前提,我有一段代码(一个函数). import time def run_time(): time.sleep(0.1) print('我曾踏足山巅') 需求1:现在,我想计算这段代码的运行时间 ...

  9. Codeforces Bubble Cup 11 J. Moonwalk challenge加强版

    题意 有一棵 \(n\) 个节点的树,每条边上有一个字符,有 \(m\) 次询问. 每次会选定两个点 \(u, v\) , \(u\) 到 \(v\) 的路径上的字符形成了一个字符串 \(T\) ,再 ...

  10. android 通过修改图片像素实现CircleImageView

    CircleImageView实现方法有很多种,各有优缺点,因此需要按照不同的场景使用.我们今天使用修改图片像素的方法实现CircleImageView,主要知识点无非是勾股定理和点到圆形的距离. 素 ...