基于C#开发web网页管理系统模板流程-主界面管理员录入和编辑功能完善

前言

紧接上篇->基于C#开发web网页管理系统模板流程-登录界面和主界面_c#的网页编程-CSDN博客

已经完成了登录界面和主界面,本篇将完善主界面的管理员录入和编辑功能,事实上管理员录入和编辑的设计套路适用于所有静态表的录入和编辑

首先还是介绍一下本项目将要实现的功能

(一)管理员-录入

点击菜单中的管理员-录入,网页给出输入信息的界面,用户输入完信息后判断其合法性

如果不合法提示重新输入,合法则保留信息到本地数据库

(二)管理员--编辑


一,新建gly文件夹

在admin文件下再新建一个gly文件夹以方便脚本管理,我们将把实现管理员录入和编辑功能的脚本放在这个文件夹下,以此类推,当你实现菜单的其它选项的功能时,也应采用这个思路


二,设计管理员-录入界面

(注:部分操作与上一篇的基本雷同,因此省去不必要的图片操作,自行根据文字提示完成操作)

(一)添加设计工作台

在gly文件下【右键】->【添加新建项】创建一个【包含母版页的Web窗体】,将其命名为glyadd.aspx

点击添加后再弹出的【选择母版页】窗口中选择唯一一个母版页Site.Master

(二)插入与调整表格

在刚刚新建的文件中点击右下角的【设计】,在紫色窗口中键入几个回车方便操作

顶部点击【表】->插入表格

重点!该表格的列数为2,行数=你数据库中管理员表的字段数+2

例如:我的管理员表有6个字段,因此设置该表为8(6+2)行

(三)修改表格背景色

这一步在上一篇的标题【三.(一).(3)】已经详细讲过,要重点注意的问题还是表格的选中问题(要点一下表头才能全选表格,而不是只选中表格中的4行,两者是有区别的!如果全选表格的话表的边框会加粗、而且右边的属性栏会有【TABLE】的标签而不是【TD】之类的标签,如果不正确的全选表格,对表格的一些整体操作会只作用于部分单元格从而导致最终显示结果乱版)

确认全选表格后,右边下滑找到【style】属性(如果右边没有属性窗口,对表格右键可以找到),点击该属性右边的三个小点,会弹出修改样式窗口,点击【背景】,在【background-color】中选择想要的背景色,点击确定,表格颜色成功修改

(四)添加提示用户输入的信息

本步操作就是美化以下录入界面,给用户提示在哪里输入信息,合并单元格、居中、放大字体、加粗字体等操作不再赘述,顺便调整一下表格的大小

读者在设计时应符合自己对用户的预期输入,并贴合数据库中字段需要录入的数据

 (五)添加控件

给表格右边添加相应的文本框等录入控件,这样才能接收用户的输入

我们需要用到如下图红框中的这三个控件

(工具箱点左边的【工具箱】按钮展开)

这里我添加了5个【TextBox】、2个【RadioButton】、2个【Button】等控件,读者请根据实际需要添加合适的控件

(1)性别单选按钮

这里重点解释一下【RadioButton】的作用,因为需要录入性别信息,性别只有两种选择,【RadioButton】则能实现这一操作

点击控件后在属性栏中的【Text】修改他们的名字分别为男、女,再将这两个按钮的属性中的【GroupName】修改为同一名字,确保两个按钮在同一分组(这样才能实现非男即女的按钮单选)

(2)日历输入生日

然后再解释一下怎么设计成以日历的形式让用户快速输入日期信息

单击输入日期的文本框控件,在属性中找到【TextMode】属性,修改为【Date】,如果你需要用户的输入精确到时分秒,也可以修改为【DateTime

(3)两个按钮改名

改一下两个【Button】控件的名字,方便用户明白它们的功能,也是在属性栏中的【Text】修改

(4)为录入按钮和重置按钮添加脚本以实现其功能

双击录入按钮,将下面的脚本复制到弹出的文件【glyadd.aspx.cs】中并【Ctrl+S】快捷键保存,脚本的功能已经在注释中做出了详细解释,请仔细查看!

(注:这整个脚本包含录入和重置这两个按钮的脚本)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.Odbc;   //ODBC命名空间

namespace ckgl.admin.gly
{
    public partial class glyadd : System.Web.UI.Page
    {
        protected void Button1_Click(object sender, EventArgs e)//录入按钮脚本
        {
            //根据你实际的设计进行对应的输入内容合法判断
            if (TextBox1.Text == "" || TextBox2.Text == "")
            {
                Response.Write("<script language=javascript> alert('管理员编号或密码不得为空!');</script>");
                return;
            }
            if (TextBox3.Text == "")
            {
                Response.Write("<script language=javascript> alert('管理员姓名不得为空!');</script>");
                return;
            }
            if (RadioButton1.Checked == false && RadioButton2.Checked == false)
            {
                Response.Write("<script language=javascript> alert('请选择管理员性别!');</script>");
                return;
            }
            if (TextBox4.Text == "" || TextBox5.Text == "")
            {
                Response.Write("<script language=javascript> alert('管理员生日或电话不得为空!');</script>");
                return;
            }
            if (TextBox1.Text.Length != 6)
            {
                Response.Write("<script language=javascript> alert('管理员编号为六位长度!');</script>");
                return;
            }
            //创建连接对象、打开数据库
            OdbcConnection con = DB.Lianjie();
            con.Open();

            //编写sql语句,查询重复的管理员编号
            string sql1 = " select * from glyb where gno='" + TextBox1.Text + "' ";
            OdbcCommand mycommand1 = new OdbcCommand(sql1, con);
            OdbcDataReader sdr = mycommand1.ExecuteReader();
            if (sdr.Read())//如果有重复,给出提示信息
            {
                Response.Write("<script language=javascript> alert('管理员编号已存在,请更换!');</script>");
                return;
            }
            //管理员录入,对于性别信息需要特殊处理成男、女文本
            string xb = "";
            if (RadioButton1.Checked == true)
                xb = "男";
            if (RadioButton2.Checked == true)
                xb = "女";
            string sql2 = " insert into glyb values('" + TextBox1.Text + "', '" + TextBox2.Text + "' , '" + TextBox3.Text + "','" + xb + "', ";
            sql2 += " '" + TextBox4.Text + "','" + TextBox5.Text + "') ";
            OdbcCommand mycommand2 = new OdbcCommand(sql2, con);
            // Response.Write(sql2);//调试用,正常不用这两行
            // return;
            mycommand2.ExecuteNonQuery();   //用于录入,修改,删除时
            Response.Write("<script language=javascript> alert('录入成功!');</script>");
            con.Close();  //关闭数据库
        }

        protected void Button2_Click(object sender, EventArgs e)//重置按钮脚本
        {
            //重置的思想很简单,直接把所有文本框置为空字符串,所有选择按钮置为false(即未选状态)
            //我这里有5个文本框,依次置空
            TextBox1.Text = TextBox2.Text = TextBox3.Text = TextBox4.Text = TextBox5.Text = "";
            //两个选择性别的按钮,置为false
            RadioButton1.Checked = RadioButton2.Checked = false;
        }
    }
}


三,设计管理员-编辑界面

(一)添加设计工作台

在gly文件下【右键】->【添加新建项】创建一个【包含母版页的Web窗体】,将其命名为glyedit.aspx

 点击添加后再弹出的【选择母版页】窗口中选择唯一一个母版页Site.Master

(二)插入与调整表格

管理员编辑界面的表格的列数固定为3,行数需要根据你自己管理系统需要查询的字段数来决定,行数=你需要查询的字段数+2

例如:在我的管理员表中,我需要查询的字段只有编号、姓名、电话这三个(其它字段基本没有查询的必要,密码不能展示给其它用户、性别要么查男要么查女,查出来很多记录没有意义,生日也属于隐私没必要查,总之根据你自己需要用户能够查询到的字段来设计即可)

因此设置该表为5(3+2)行

(三)修改表格背景色

(四)添加提示用户输入的信息

(五)添加控件

以上这四块内容基本是重复的套路操作,因此省去大量篇幅(如果忘了操作则重看本篇标题【】的(2)(3)(4)(5),都是一样的套路),自由发挥设计即可,参考下图

完成以上操作之后,我们还要在上图绿框部分的大单元格处添加一个用于显示数据的控件,点击选中它之后,在【工具箱】->【数据】中找到【GridView】,双击后添加

(六)配置odbc数据源

本步操作用于管理系统能够连接到数据源从而显示查询结果,已经在上一篇(基于C#开发web网页管理系统模板流程-登录界面和主界面-CSDN博客)的标题【一.(三).(2)】处做过详细演示,如果你还没建立odbc数据源连接,请自行跳转查看教程

按下图操作,点击【<新建数据源>

按如下图操作创建数据源

点完确定后回到这个窗口,点【下一步】,下一个窗口(这个窗口的截图我省略了)再点下一步

配置Select语句,在这里选择你数据库中的管理员表

注:如果在本步操作你无法选择【指定来自表或视图的列】这个选项,从而导致你无法选择你的管理员表,错误原因在于你创建的odbc数据源未指定你的数据库),即下图绿框部分中红字特地强调的内容你没有做,此时你必须重新创建数据源

严格按照 上一篇(基于C#开发web网页管理系统模板流程-登录界面和主界面-CSDN博客)的标题【一.(三).(2)】所说的做,且新的数据源不能和原来错误的数据源同名(除非你删除原来错误的数据源,但如果你是5.1版本的odbc可能会发现删除不了,如果你想删除参考本篇->odbc用户dsn点删除点配置没反应个人解决经验-CSDN博客)

然后选【指定自定义SQL语句或存储过程(S)】再点下一步

接下来我们要创建SELECT、UPDATE、DELETE这三部分的SQL语句

SELECT的SQL语句就是【select * from 管理员表名】这样的形式

UPDATE的SQL语句是【update 管理员表名 set 字段1=? ,字段2=?,字段3=?,... where 管理员编号字段=?】的形式

DELETE的SQL语句是【delete from 管理员表名 where 管理员编号字段=?

你需要确认自己管理员表名及其中的字段来对这3条语句进行适当修改,很简单的(但要求你仔细确认字段名是否正确,否则会导致后续的查询bug),你看看就知道了,参考下图

做完三条SQL编写的工作后,继续点下一步,在这个【测试查询】的窗口中也可以点测试查询(T)验证一下SELECT语句(其它更新、删除语句无法在此处验证),确认无误后点完成(实在后期遇到bug也没多大关系,可以修改配置的)

此时可以发现管理员表中的字段已经被绑定到控件中了

(七)设计编辑和删除功能

展开控件菜单,将【启用分页】、【启用编辑】、【启用删除】勾选上,此时可能需要你调整一下表格大小以适应这些内容

(1)设置分页

选中GridView控件后在属性栏中的【PageSize】处可以修改每页显示的记录数,可以根据自己设计需求进行设置

(2)将编辑、删除功能置于查询结果后方

一般来说习惯将编辑、删除功能置于查询结果后方,当然这也根据你自己喜好去设置

但是将【CommandField】列设置为TemplateField(模板列)是必须进行的操作!这关系到下文设置删除提示的操作!

(3)编辑和删除功能测试

在编辑界面直接运行,我们来测试一下编辑和删除功能,这一步可能产生的bug会非常多,博主也是被硬控了一天半多的时间

运行来到编辑界面,这里我随便准备了4条数据

点击第四条数据的删除,成功删除

点击第一条的编辑功能,修改其gname的值

点更新,成功修改

读者需要确保自己的编辑和删除功能能够实现上文所描述的,如果无法实现,提供以下可能的处理措施——

①检查自己在本篇标题【三.(6)】编写的三条SQL语句是否正确(语法、字段名、关键字之间是否空格隔开等)

②点击删除功能时弹出如下错误

解决方法是:再点开配置数据源,在【配置Select语句】的窗口选择【高级】,将【使用开放式开发(O)】这个选项勾选,最后点确定

(注:最好再去检查一下那三条自定义SQL语句是否错误,有可能会被系统修改成默认值,需要你手动再改回来)

③点击编辑功能,修改值后点更新,但是数据没有被修改

解决方法是:点击【编辑列】,确认你的【管理员编号】(这里我是gno)字段的属性【ReadOnly】是否为True,因为前文已经说过这个字段是不能被更改的,所以要设置为只可读

(补充必看)(4)给删除功能添加确认删除提示

为避免用户误删记录,必须给删除功能添加对应的确认提示

点击右下角的【】,在模板列的后台代码(即绿色框起来的部分,如果没有绿框内的代码,说明你为进行本篇标题【三.(7).2】处内容的操作)中找到如下图红色下划线所在行的删除按钮后台代码,添加如红色下划线所示的代码在【Text="删除"】的后面

OnClientClick="return confirm('真的要删除吗?')"

测试功能:

做完修改后注意保存,运行后来到管理员编辑界面,对任意一条记录进行删除操作,出现如下确认删除的提示,证明功能无误

 (5)为录入按钮和重置按钮添加脚本以实现其功能

双击录入按钮,将下面的脚本复制到弹出的文件【glyedit.aspx.cs】中并【Ctrl+S】快捷键保存,脚本的功能已经在注释中做出了详细解释,请仔细查看!

(注:这整个脚本包含录入和重置这两个按钮的脚本)

using System;
using System.Collections.Generic;
using System.Data.Odbc;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace ckgl.admin.gly
{
    public partial class glyedit : System.Web.UI.Page
    {

        protected void Button1_Click(object sender, EventArgs e)
        {
            OdbcConnection con = DB.Lianjie();
            con.Open();
            string sql = " select * from glyb where ";
            if (TextBox1.Text != "")
                sql += " gno='" + TextBox1.Text + "' and ";
            if (TextBox2.Text != "")
                sql += " gname='" + TextBox2.Text + "' and ";
            if (TextBox3.Text != "")
                sql += " gtele='" + TextBox3.Text + "' and ";
            sql += " '1'='1' "; //复合查询关口语句,这样的设计代码的思路是:如果三个文本框都为空,即用户未输入任何匹配信息,那么查询结果就是所有记录
            OdbcCommand mycommand1 = new OdbcCommand(sql, con);
            OdbcDataReader sdr = mycommand1.ExecuteReader();
            if (sdr.Read())
            {
                SqlDataSource1.SelectCommand = sql;
                GridView1.DataBind();   //刷新查询窗口,刷新才能显示查询结果
            }
            else
            {
                Response.Write("<script language=javascript> alert('查无此人!');</script>");
                return;
            }
            con.Close();
        }

        protected void Button2_Click(object sender, EventArgs e)
        {
            //重置的思想很简单,直接把所有文本框置为空字符串
            //我这里有3个文本框,依次置空
            TextBox1.Text = TextBox2.Text = TextBox3.Text = "";
        }
    }
}


四,添加菜单

我们先找到上一篇的标题【三.(二).(4)】处(如下图)创立的主菜单(即母版页Site1.Master),当时我们只是草率的创立了几个新节点,出了【退出】这个选项的功能,其它菜单还没有完善

在项目中找到之前创建在admin文件夹下的Site.Master这个母版页

右键点击这个菜单栏->【编辑节点】,给它的子节点命名成几个有意义的菜单选项名,比如本篇我们是实现管理员的录入和编辑功能,因此将第一个节点命名成【管理员】,然后给该节点添加两个子节点,分别命名为【录入】和【编辑】,两个平行关系子节点的创建不好描述,但你试试就知道很简单的

但是仅是修改它的文本可做不到对应的跳转到录入页面的功能,我们需要实现的功能是点击录入后就跳转到录入页面,需要做的是修改【NavigateUrl】的值

同理,点击编辑就跳转到编辑页面,也是修改【NavigateUrl】的值

菜单效果效果如下,至于其它节点的名称和关系,则根据读者自己的管理系统来进行设计


五,测试

建议从登录窗口开始完整测试一遍,这里为了节省篇幅就直接从管理员功能的界面开始测试

(一)录入界面功能测试

(1)空输入拦截测试

读者自行测试所有信息的空输入拦截

(2)管理员编号长度合法性测试

因为前面的脚本有规定管理员的编号长度固定为6,因此此处进行测试

(3)重置输入测试

点击重置,应该把输入的信息清空


(二)编辑界面功能测试

(1)查询测试

匹配信息全为空时,查询结果为所有记录

编号匹配测试

姓名匹配测试

电话匹配测试

无记录查询测试

(2)重置输入测试

(3)编辑与删除测试

先故意录入一条测试用的记录

删除记录测试

编辑记录测试

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

声学特征在膝关节健康诊断中的应用分析

关键词&#xff1a;膝关节声发射、膝关节生物标志物、因果关系、机器学习 声学膝关节健康评估长期以来一直被看作是一种替代临床可用医学成像工具的替代方法&#xff0c;如声发射技术是通过检测膝关节在运动过程中产生的微小裂纹或损伤引起的声波信号&#xff0c;从而评估关节的…

学习Uni-app开发小程序Day17

今天开始&#xff0c;就把uni-app前期使用的全部学完了&#xff0c;现在就把以前学习的&#xff0c;做成一案例&#xff0c;中间有未讲的&#xff0c;在进行补充&#xff0c;这里是根据老师视频进行项目案例编写的。 先弄出效果图&#xff0c;然后在根据效果图进行代码的编辑 …

linux 中 fd 申请和释放管理(两级 bitmap)

linux 中 fd 的几点理解_linux fd-CSDN博客 通过上边的文章&#xff0c;我们可以知道&#xff0c;在 linux 中&#xff0c;fd 有以下几点需要了解&#xff1a; &#xff08;1&#xff09;fd 表示进程打开的文件&#xff0c;是进程级别的资源&#xff0c;不是系统级别的资源 …

【鱼眼镜头11】Kannala-Brandt模型和Scaramuzza多项式模型区别,哪个更好?

Kannala-Brandt模型和Scaramuzza多项式模型在描述鱼眼相机畸变时都有其特定的数学表示和应用&#xff0c;但它们之间存在一些区别。以下是对两者区别的分点表示和归纳&#xff1a; 数学表示&#xff1a; Kannala-Brandt模型&#xff1a;它假设图像光心到投影点的距离和角度的多…

字符串和字符串函数(1)

前言&#xff1a; 字符串在C语言中比较特别&#xff0c;没有单另的字符串类型&#xff0c;想要初始化字符串必须用字符变量的数组初始化&#xff0c;但是在C语言标准库函数中提供了大量能对字符串进行修改的函数&#xff0c;比如说可以实现字符串的的拷贝&#xff0c;字符串的追…

直播预告:TinyVue 组件库实战解析,提升组件库构建技能!

在复杂的编码世界里&#xff0c;大家总希望能够寻找更高效、更简洁的解决方案来优化工作流程&#xff0c;提升开发效率。在5月28日晚7点 OpenTiny B站直播间&#xff0c;OpenTiny 非常荣幸地为大家带来一场关于 TinyVue 组件库实战分享的直播。届时&#xff0c;TinyVue 组件库成…

【java程序设计期末复习】chapter4 类和对象

类和对象 编程语言的几个发展阶段 &#xff08;1&#xff09;面向机器语言 计算机处理信息的早期语言是所谓的机器语言&#xff0c;使用机器语言进行程序设计需要面向机器来编写代码&#xff0c;即需要针对不同的机器编写诸如0101 1100这样的指令序列。 &#xff08;2&#x…

优优嗨聚集团:快速摆脱个人债务束缚的秘诀

在快节奏的现代生活中&#xff0c;个人债务问题时常困扰着许多人。面对日益增长的债务压力&#xff0c;如何快速有效地处理成为众多人的迫切需求。本文将为你提供一套实用的债务清零攻略&#xff0c;帮助你摆脱债务的束缚&#xff0c;重获财务自由。 一、认清债务现状&#xff…

[NISACTF 2022]easyssrf、[NISACTF 2022]level-up

[NISACTF 2022]easyssrf 使用dirsearch扫描后没发现什么路径 尝试访问127.0.0.1&#xff0c;成功了 访问127.0.0.1/flag.php提示有文件/fl4g 使用file://协议读取文件/fl4g&#xff0c;提示除此页面外还有一个ha1x1ux1u.php页面。 file:///fl4g 直接访问&#xff0c;发现GET…

WDW-20B微机控制人造板试验机

一&#xff0e;设备外观照片&#xff1a; 项目简介&#xff1a; 微机控制电子式万能试验机是专门针对高等院校、各种金属、非金属科研厂家及国家级质检单位而设计的高端微机控制电子式万能试验机、计算机系统通过全数字控制器&#xff0c;经调速系统控制伺服电机转动&#xff…

JavaWeb_HTTP协议

HTTP&#xff1a; 概念&#xff1a; HTTP&#xff08;Hyper Text Transfer Protocal&#xff09;&#xff0c;超文本传输协议&#xff0c;规定了浏览器和服务器之间数据传输的规则。 特点&#xff1a; 1.基于TCP协议&#xff1a;面向连接&#xff0c;安全 2.基于请求-响应模型…

【Linux】升级GCC(版本9.3),补充:binutils

GCC&#xff1a;GNU Compiler Collection 。编译器&#xff0c;几乎Linux中所有程序&#xff08;包括内核&#xff09;都是gcc编译的&#xff0c;包括libc。 gcc不仅仅是编译器&#xff0c;gcc也有很多库&#xff0c;依赖libc。gcc和libc互相依赖。 GCC官网&#xff1a;GCC, …

如何注册Claude3?解决Claude3无海外手机号接收验证码的问题以及如何订阅Claude Pro

原文链接&#xff1a;如何注册 Claude3&#xff1f;解决 Claude3 无海外手机号接收验证码的问题以及如何订阅 Claude Pro 前言 Claude3已经出来有一段时间了&#xff0c;大家有没有体验过呢&#xff1f;不过从目前来看&#xff0c;Anthropic公司总共推出了3个模型&#xff1…

Java项目:基于SSM框架实现的学生就业管理系统分前后台(ssm+B/S架构+源码+数据库+毕业论文+开题报告)

一、项目简介 本项目是一套基于SSM框架实现的学生就业管理系统 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c;eclipse或者idea 确保可以运行&#xff01; 该系统功能完善、界面美观、操作简单、功能…

【Chapter5】死锁与饥饿,计算机操作系统教程,第四版,左万利,王英

文章目录 1.1 什么是死锁1.2 死锁的类型1.2.1 竞争资源引起的死锁1.2.2 进程间通信引起的死锁1.2.3 其他原因引起的死锁 1.3 死锁产生必要条件1.4 死锁的处理策略1.5 死锁的预防1.5.1 破坏资源独占条件1.5.2 破坏不可剥夺条件1.5.3 破坏保持申请条件1.5.4 破坏循环等待条件 1.6…

ip反解域名-python脚本

import sys import socket from requests.packages.urllib3.contrib import pyopenssl def domain_dns(ip, port, timeout0.09): try: # 创建一个 socket sock socket.create_connection((ip, port), timeouttimeout) # 设置超时 sock.settimeout(timeout) # 加载 SSL 证书 x5…

第十七届全国大学生信息安全竞赛创新实践能力赛初赛部分复现

Misc 神秘文件 1.根据提示信息&#xff0c;均需要从ppt中提取信息 2.在ppt的属性中发现一串密文和key&#xff0c;解密之后得到第一部分&#xff0c;根据提示Bifid chipher&#xff0c;为双歧密码解密&#xff0c;使用Bifid Cipher Decode解码 3.在第五张幻灯片&#xff0c;…

neo4j docker安装使用,py2neo python包使用

参考&#xff1a;https://neo4j.com/docs/operations-manual/current/docker/introduction/ 运行&#xff1a; docker run --publish7474:7474 --publish7687:7687 neo4j查看&#xff1a; http://192***ip:7474 username/password 都是 neo4j/neo4j 简单案例 创建例子&am…

基于Docker部署GitLab环境搭建

文件在D:\E\学习文档子目录压缩\专项进阶&#xff0c;如ngnix,webservice,linux,redis等\docker 建议虚拟机内存2G以上 1.下载镜像文件 docker pull beginor/gitlab-ce:11.0.1-ce.0 注意&#xff1a;一定要配置阿里云的加速镜像 创建GitLab 的配置 (etc) 、 日志 (log) 、数…

【CTF Web】CTFShow web2 Writeup(SQL注入+PHP+UNION注入)

web2 1 管理员赶紧修补了漏洞&#xff0c;这下应该没问题了吧&#xff1f; 解法 注意到&#xff1a; <!-- flag in id 1000 -->但是 or 被拦截了。 if(preg_match("/or|\/i",$id)){die("id error");}使用UNION注入&#xff1a; ?id1 union sele…