`
yxgyh
  • 浏览: 275516 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

前台拼接SQL语句

阅读更多

<?xml version="1.0" encoding="gb2312"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>查询条件表单</title>
<style>
*{
font-size:12px;
padding:0;
margin:0;
}
body{
padding:40px;
}
#MainBox{
border:#666 1px solid;
background-color:#eee;
width:700px;
}
#MainBox td{
padding:4px;
}
#ConditionBox{
height:150px;
width:100%;
overflow-y:auto;
border:#bbb 1px solid;
padding:2px;
background-color:#fff;
}
.tmFrame{
border:#eee 1px solid;
padding:2px;
width:100%;
}
.tmFrame_highlight{
border:#666 1px solid;
padding:2px;
width:100%;
background-color:#f7f7f7;
}
.fname{
float:left;
width:200px;
}
.conn{
float:left;
width:100px;
}
.fvalue{
float:left;
width:100px;
}
.handlebox{
float:right;
width:180px;
display:none;
}
.handlebox_view{
float:right;
width:180px;
display:block;
}
.rbox{
float:right;
margin:1px;
background-color:#999;
color:#fff;
padding:1px;
width:15px;
cursor:hand;
}
legend{
border:#bbb 1px solid;
padding:4px;
}
fieldset{
border:#bbb 1px solid;
padding:4px;
}
.sqlwords{
margin:2px;
border:#bbb 1px solid;
width:100%;
}
</style>
<script>
////构造函数
function ce(e){return document.createElement(e)}

/* Example:
* var a = cex("DIV", {onmouseover:foo, name:'div1', id:'main'});
*/
function cex(e, x){
var a = ce(e);
for (prop in x){
a[prop] = x[prop];
}
return a;
}


/*
* function ge
* Shorthand function for document.getElementById(i)
*/
function ge(i){return document.getElementById(i)}

 

/*
* function ac
* Example: ac( house, ac(roof, shingles), ac(floor, ac(tiles, grout)))
*/
function ac(){
if (ac.arguments.length > 1){
var a = ac.arguments[0];
for (i=1; i<ac.arguments.length; i++){
if (arguments[i])
a.appendChild(ac.arguments[i]);
}
return a;
} else {
return null;
}

}
/////ID增量
function guid(){
if (!window.__id) window.__id = 0;
return ++window.__id;
}
//======建立条件类
function term(tname,fname,conn,fvalue,ttype){
this.tname=tname;
this.fname=fname;
this.conn=conn;
this.fvalue=fvalue;
this.id= guid();
this.ttype=ttype;
}

term.prototype.getHTML = function(){

var termFrame = cex("DIV", {
id:this.id,
className:'tmframe',
onmouseover:this.fc_term_onmouseover(),
onmouseout:this.fc_term_onmouseout()
});

//var module = cex("DIV", {
//id:'module'+this.id,
//className:'module'
//});
var tttt=this.tname+"."+this.fname;
if(this.ttype!='fset')
tttt=this.tname;

var mtt = cex("input", {
id:'tp'+this.id,
name:'fname'+this.id,
type:"hidden",
value:this.ttype
});
var fname = cex("DIV", {
id:'fname'+this.id,
className:'fname',
innerHTML:tttt
});

var conn = cex("DIV", {
id:'conn'+this.id,
className:'conn',
innerHTML:this.conn
});
var fvalue = cex("DIV", {
id:'fvalue'+this.id,
className:'fvalue',
innerHTML:this.fvalue
});

var handlebox = cex("div", {
id:'handlebox'+this.id,
className:"handlebox"
});
var mdel = cex("div", {
id:'tmdel'+this.id,
onclick:this.fc_mdel_onclick(),
className:"rbox",
title:"删除此条件",
innerHTML: 'X'
});
var mup = cex("div", {
id:'tmup'+this.id,
onclick:this.fc_mup_onclick(),
className:"rbox",
title:"向上移动",
innerHTML: '↑'
});
var mdown = cex("div", {
id:'tmdown'+this.id,
onclick:this.fc_mdown_onclick(),
className:"rbox",
title:"向下移动",
innerHTML: '↓'
});
var mzkh = cex("div", {
id:'tzkh'+this.id,
onclick:this.fc_mzkh_onclick(),
className:"rbox",
title:"添加左括号",
innerHTML: '('
});
var mykh = cex("div", {
id:'tykh'+this.id,
onclick:this.fc_mykh_onclick(),
className:"rbox",
title:"添加右括号",
innerHTML: ')'
});
var mand = cex("div", {
id:'tand'+this.id,
onclick:this.fc_mand_onclick(),
className:"rbox",
title:"添加并条件",
innerHTML: 'and'
});
var mor = cex("div", {
id:'tor'+this.id,
onclick:this.fc_mor_onclick(),
className:"rbox",
title:"添加或条件",
innerHTML: 'or'
});

// Build DIV
ac (termFrame,
mtt,
ac (handlebox,
mdel,
mup,
mdown,
mykh,
mzkh,
mand,
mor
),
fname,
conn,
fvalue
);

return termFrame;
}

term.prototype.highlight = function(){
ge("handlebox"+this.id).className = 'handlebox_view';
ge(this.id).className = 'tmFrame_highlight';

}

term.prototype.lowlight = function(){
ge("handlebox"+this.id).className = 'handlebox';
ge(this.id).className = 'tmFrame';
}

term.prototype.remove = function(){
var _this = ge(this.id);
_this.parentNode.removeChild(_this);
}
term.prototype.moveup = function(){
var _this = ge(this.id);
var pre_this = _this.previousSibling;
if(pre_this!=null){
_this.parentNode.insertBefore(_this,pre_this);
this.lowlight();
}
}
term.prototype.movedown = function(){
var _this = ge(this.id);
var next_this = _this.nextSibling;
if(next_this!=null){
_this.parentNode.insertBefore(next_this,_this);
this.lowlight();
}
}
term.prototype.addzkh = function(){
var _this = ge(this.id);
var tzkh = new term('╭----------------','','','','zkh');
var node_zkh = tzkh.getHTML();
_this.parentNode.insertBefore(node_zkh,_this);
}
term.prototype.addykh = function(){
var _this = ge(this.id);
var tykh = new term('╰----------------','','','','ykh');
var node_ykh = tykh.getHTML();
if(_this.nextSibling!=null)
_this.parentNode.insertBefore(node_ykh,_this.nextSibling);
else
_this.parentNode.appendChild(node_ykh);
}
term.prototype.addand = function(){
var _this = ge(this.id);
var tand = new term(' 并且','','','','tand');
var node_and = tand.getHTML();
if(_this.nextSibling!=null)
_this.parentNode.insertBefore(node_and,_this.nextSibling);
else
_this.parentNode.appendChild(node_and);
}
term.prototype.addor = function(){
var _this = ge(this.id);
var tor = new term(' 或者','','','','tor');
var node_or = tor.getHTML();
if(_this.nextSibling!=null)
_this.parentNode.insertBefore(node_or,_this.nextSibling);
else
_this.parentNode.appendChild(node_or);
}


///对象控制函数
term.prototype.fc_term_onmouseover = function(){
var _this = this;
return function(){
//if (!_this.isDragging)
_this.highlight();
}
}

term.prototype.fc_term_onmouseout = function(){
var _this = this;
return function(){
//if (!_this.isDragging)
_this.lowlight();
}
}
term.prototype.fc_mdel_onclick = function(){
var _this = this;
return function(){
_this.remove();
}
}
term.prototype.fc_mup_onclick = function(){
var _this = this;
return function(){
_this.moveup();
}
}
term.prototype.fc_mdown_onclick = function(){
var _this = this;
return function(){
_this.movedown();
}
}
term.prototype.fc_mzkh_onclick = function(){
var _this = this;
return function(){
_this.addzkh();
}
}
term.prototype.fc_mykh_onclick = function(){
var _this = this;
return function(){
_this.addykh();
}
}
term.prototype.fc_mand_onclick = function(){
var _this = this;
return function(){
_this.addand();
}
}
term.prototype.fc_mor_onclick = function(){
var _this = this;
return function(){
_this.addor();
}
}

/////插入页面
function insertterm(){
var tname = document.all.tname.value;
var fname = document.all.fname.value;
var conn = document.all.conn.value;
var fvalue = document.all.fvalue.value;
//xl(tname+"|"+fname+"|"+conn+"|"+fvalue);
var tm = new term(tname,fname,conn,fvalue,"fset");
var tmHTML = tm.getHTML();
ac(ge("ConditionBox"),tmHTML);
//ZA.addterm(tm);
addtofrom(tname);
}
var tt = new Array();
function addtofrom(tname){
var ttexit="no";
for(var i=0;i<tt.length;i++){
if(tt[i]==tname)
ttexit="yes";
}
if(ttexit=="no"){
tt[i]=tname;
//alert(tt[i]);
}
}
//====条件控制窗口函数
function CBadd(){
var h = document.all.ConditionBox.offsetHeight;
document.all.ConditionBox.style.height = h + 20 + "px";
}
function CBcut(){
var h = document.all.ConditionBox.offsetHeight;
if(h>=150)
document.all.ConditionBox.style.height = h - 20 + "px";
else
return false;
}
////////SQL语句处理函数

function getSQL(){
var sql="";
var ma = ge("ConditionBox").childNodes;
//alert(ma.length);
for(i=0;i<ma.length;i++){
var id = ma[i].getAttribute("id");
var tp = ge("tp"+id).value;
if(tp=="fset"){
//sql+=" "+ge("fname"+id).innerHTML;
//sql+=" "+ge("conn"+id).innerHTML;
//sql+=" \""+ge("fvalue"+id).innerHTML+"\"";
var fname=ge("fname"+id).innerHTML;
var conn=ge("conn"+id).innerHTML;
var fvalue=ge("fvalue"+id).innerHTML;
sql+=" "+fname;
if(conn=="等于")
sql+=" = "+"\'"+fvalue+"\'";
if(conn=="大于")
sql+=" > "+"\'"+fvalue+"\'";
if(conn=="小于")
sql+=" < "+"\'"+fvalue+"\'";
if(conn=="不等于")
sql+=" <> "+"\'"+fvalue+"\'";
if(conn=="为空")
sql+=" is null ";
if(conn=="不为空")
sql+=" is not null ";
if(conn=="包含")
sql+=" like \'%"+fvalue+"%\'";
}
else{
//sql+=" "+ge("fname"+id).innerHTML;
if(tp=="zkh")
sql+=" (";
if(tp=="ykh")
sql+=" )";
if(tp=="tand")
sql+=" and";
if(tp=="tor")
sql+=" or";

}

//var mn = ma.childNodes;

}
var ffrom = "FROM "+getFrom();
ge("sqlwords").value ="SELECT * "+ ffrom+" WHERE "+sql;
}
function getFrom(){
var ff=tt.toString();
return ff;
}
//////////////term数组处理
//var ZA = {};
//ZA.terms = new Array();
//ZA.addterm = function(term){
// var ZAl = ZA.terms.length;
// ZA.terms[ZAl] = term;
//alert(ZA.terms[ZAl].ttype);
// ZAl++;
//}
//ZA.insert_bef_term = function(term,tm){

//}
</script>

</head>

<body>
<table border="0" cellspacing="0" cellpadding="0" id="MainBox">
<tr>
<td colspan="2" style="background-color:#999;color:#000;font-weight:bolder;font-size:14px">复杂查询表单</td>
</tr>
<tr>
<td><div id="ConditionBox"></div>
<div style="width:100%"><SPAN title='放大显示框' style='float:right;FONT-SIZE: 14px; CURSOR: hand;FONT-FAMILY: webdings' onclick='CBadd()'>6</SPAN><SPAN title='缩小显示' style='float:right;FONT-SIZE: 14px; CURSOR: hand;FONT-FAMILY: webdings' onclick='CBcut()'>5</SPAN></div></td>
</tr>
<tr>
<td>
<fieldset>
<legend>SQL表达式</legend>
<input type="text" id="sqlwords" class="sqlwords" /><input type="submit" name="Submit" value="GET SQL" onclick="getSQL()" style="float:right"/>
</fieldset>
</td>
</tr>
<tr>
<td>
<fieldset>
<legend>定义条件</legend>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td>表</td>
<td><select name="tname" id="tname">
<option value="table1" selected="selected">表1</option>
<option value="table2">表2</option>
<option value="table3">表3</option>
<option value="table4">表4</option>
<option value="table5">表5</option>
</select></td>
<td>字段</td>
<td><select name="fname" id="fname">
<option value="f1">字段1</option>
<option value="f2">字段2</option>
<option value="f3">字段3</option>
<option value="f4">字段4</option>
<option value="f5">字段5</option>
<option value="f6">字段6</option>
<option value="f7">字段7</option>
</select></td>
<td>关系</td>
<td><select name="conn" id="conn">
<option value="大于">大于</option>
<option value="等于">等于</option>
<option value="小于">小于</option>
<option value="不等于">不等于</option>
<option value="为空">为空</option>
<option value="不为空">不为空</option>
<option value="包含">包含</option>
</select></td>
<td>值</td>
<td><input name="fvalue" type="text" id="fvalue" value="111111" /></td>
<td><input type="submit" name="Submit" value="增加新条件" onclick="insertterm()"/></td>
</tr>
</table>
</fieldset>
</td>
</tr>
</table>
</body>
</html>

分享到:
评论
1 楼 夏保森 2016-10-15  
太简单了,而且不是太好用,我现在项目就是要实现这样一个功能,比你这个还要复杂,需要复杂查询等等

相关推荐

    云业CMS(yunyecms)的多处SQL注入审计分析.pdf

    在该文件中,de*_add函数对GET和POST参数进行了判断,但是没有对参数进行安全过滤,导致用户输入的参数可以直接拼接到SQL语句中执行,造成SQL注入漏洞。该漏洞可以被利用来执行任意SQL语句,从而获取敏感数据或控制...

    NUCMS V1.1 前台SQL注入1

    由于没有对`$id`变量进行有效的输入验证或过滤处理,攻击者可以轻易地通过构造恶意SQL语句来绕过正常的数据过滤机制,从而触发SQL注入漏洞。 #### 三、漏洞详细分析 1. **漏洞触发点**: - 当用户访问文章详情页...

    OneThink前台注入分析1

    1. **参数化查询**:使用预编译的SQL语句,并用参数代替直接拼接用户输入,如PDO的预处理语句。 2. **输入验证**:对用户输入进行严格的校验,确保输入的数据类型和格式符合预期。 3. **转义特殊字符**:对用户输入...

    Asp前台后台数据库

    6. **安全性**:为防止SQL注入攻击,应使用参数化查询或存储过程,避免直接拼接SQL语句。此外,对敏感信息(如密码)进行加密存储也是必要的安全措施。 Asp.NET还支持ORM(对象关系映射)框架,如Entity Framework...

    Mybatis4 之Mybatis动态sql的实现代码

    SQL语句不固定, 会根据前台用户的操作而进行变化的SQL语句, 可以被称之为动态SQL. 在MyBatis中, 提供了一组标签, 用于方便的实现动态SQL, 不需要通过java代码拼接字符串了. ###2.动态sql中的标签

    基于asp.net动态网站前台程序安全性设计的研究.docx

    - **参数化查询**:使用参数化查询代替直接将用户输入拼接到SQL语句中,这可以有效防止恶意代码被执行。 - **输入验证**:对所有用户输入的数据进行严格的验证,确保它们符合预期的格式和范围。 - **输出编码**:对...

    maxmall项目是一套电商系统,包括前台商城系统及后台管理系统,基于SpringBoot+MyBatis实现。.zip

    2. 动态SQL:MyBatis的动态SQL功能强大,可以方便地实现条件查询、动态拼接SQL等复杂操作。 3. 缓存机制:MyBatis内置了本地缓存和二级缓存,能够提高数据读取速度。 4. 易于集成:MyBatis可以方便地与其他Java框架...

    Oracle使用MyBatis中RowBounds实现分页查询功能

    Oracle中分页查询因为存在伪列rownum,sql语句写起来较为复杂,现在介绍一种通过使用MyBatis中的RowBounds进行分页查询,非常方便。 使用MyBatis中的RowBounds进行分页查询时,不需要在 sql 语句中写 offset,limit...

    PHPOK 5.3 最新版前台注入 - 先知社区1

    - 使用参数化查询或预编译语句来防止SQL注入,而不是拼接字符串来构造SQL。 - 对输出到HTML的内容进行适当的转义,如使用 `htmlspecialchars()` 或类似的安全函数。 - 避免在不进行转义的情况下将用户输入直接写入...

    WEB UI框架的成熟引领新的开发模式 JEECG(J2EE Code Generation)

    3. 查询条件生成器:允许用户在页面上添加查询条件,后台代码无需编写逻辑判断,动态拼接SQL语句来追加查询条件。 4. 页面校验器:利用EasyUI的页面校验机制,实现前端页面字段的校验功能。 5. 常用共通封装:包括...

    EasyUI高级使用jeecg指南

    查询条件生成器是Jeecg中的另一个强大功能,它可以动态拼接SQL语句,自动添加各种查询条件。这样开发者就不需要手动编写复杂的SQL语句来处理查询逻辑,大大简化了开发流程。 #### 五、页面校验器 页面校验器采用了...

    jeecg开发教程

    - 查询条件生成器:动态拼接SQL语句,实现复杂的查询功能。 - 页面校验器:利用EasyUI提供的校验机制,自动生成页面表单校验。 - 基础用户权限封装:包括用户、角色、权限、菜单等,权限控制可以细致到按钮级别。 - ...

    dscmsV2.0二次注入及任意文件删除漏洞分析1

    攻击者可能通过精心构造的SQL语句,绕过原有的安全防护措施,对数据库进行非法操作,如读取敏感数据、修改记录甚至破坏数据库结构。 为了防止此类漏洞的发生,开发者应遵循以下最佳实践: 1. 对所有用户输入进行...

    基于SSM架构的校园二手小商品交易平台的设计与实现.docx

    MyBatis通过XML配置文件或注解将SQL语句与Java代码分离,使得SQL的编写和维护更加直观。它支持动态SQL,可以根据条件动态拼接SQL,提供了更灵活的数据库操作方式。MyBatis将Java对象与数据库表记录映射,使得开发...

    动网论坛 asp8.3 整站程序 asp

    开发者需要了解SQL语句,如SELECT、INSERT、UPDATE、DELETE等,以便进行数据操作。 5. 安全与优化 - SQL注入防护:避免在代码中直接拼接SQL,应使用参数化查询或存储过程。 - XSS防护:过滤或转义用户输入,防止...

    在线购物(功能、界面友好)

    - 防止SQL注入:在处理用户输入时,应使用预编译的SQL语句或参数化查询,避免直接拼接SQL,防止恶意用户通过注入SQL代码来获取敏感信息或破坏数据库。 - 保护用户隐私:用户的密码应使用安全的哈希算法进行存储,...

    JEECG 开发指南v2.1.0

    2. 查询条件生成器:此功能允许动态拼接SQL语句,并动态追加查询条件。开发者可以根据实际需求灵活配置查询条件,而无需编写复杂的逻辑代码。 3. 页面校验器:JEECG采用EasyUI的校验机制,能够自动生成表单校验代码...

    ssm+mysql+easyui-tree省市区三级联动

    在描述中提到,数据是“拼接后传到前台”的。这意味着后台可能将所有省市区的数据一次性获取并组合成适合前端展示的格式,例如JSON对象,每个对象包含省、市、区的信息。前端接收到数据后,解析JSON并构建树结构。 ...

Global site tag (gtag.js) - Google Analytics