分类目录归档:Thinks(想法)

想到没有实现的,或者想到将要实现的,或者实现了与想到不符的

巧用JS复制网页内容

最近公司想整理下业务,看看有什么漏掉的订单。万网,息壤的业务比较多。万网的可以导出csv,而息壤就悲剧了。好几百页,只能一条一条的复制,郁闷。受QQ云输入法的影响,将JS保存到收藏夹,点击链接执行JS,加载外部JS创建表单,通过DOM获取内容,提交到本地的数据库。剩下的就好处理了。

1、新建收藏夹项目,路径填写:

javascript:(function(){$tmp=document.createElement("script");$tmp.src='http://192.168.99.29/_app/xirang.js';document.getElementsByTagName("head")[0].appendChild($tmp);})();

2、本地架设好服务器,xirang.js内容如下:

(function(){
  $tmp=document.createElement("div");
  $tmp.innerHTML=' <form action="http://192.168.99.29/_app/xirang.asp" style="display:none" method="post" id="__tmp_form"><textarea name="txtdb"></textarea></form>';
  document.getElementsByTagName("body")[0].appendChild($tmp);}
)();
hostlist = (function(){
  _t=document.getElementsByTagName("table");
  for(i=0;i<_t.length;i++){
    if(_t[i].getAttribute("className") == "listtable"){
      return _t[i];
    }
  }
  return "";
})();
if(typeof(hostlist) == "object"){
  __tmp_frm = document.getElementById("__tmp_form");
  __tmp_frm.txtdb.value = hostlist.innerHTML;
  __tmp_frm.submit();
}else{
  if(confirm("没有找到数据,点确定返回第一页")){
    location.href = "http://www.xrnet.cn/store/member.php?module=mysite&start_item=0&search=&sort_order=expiry_date&sort_order_desc=1";
  };
};

3、现在点击收藏夹中的项目,主机列表的内容(HTML代码)就到了一个表单中,并提交到了:http://192.168.99.29/_app/xirang.asp。

4、建立一个xirang.asp,保存内容。

  set conn = server.createobject("ADODB.Connection")
  conn.open "provider=microsoft.jet.oledb.4.0;data source=" & server.mappath("xirang.mdb")
  set rs = server.createobject("ADODB.Recordset")

  frmstr = request.servervariables("HTTP_REFERER")
  if frmstr = "" then
    rs.open "select txt from txtdb",conn,1,1
    do while not rs.eof
      response.write rs(0)
      response.flush()
      rs.movenext
    loop
  else
    tmpstr = "<table width=""100%"" border=""1"">" & request.form("txtdb") & "</table>"
    stanum = split(mid(frmstr,instr(frmstr,"start_item")+11),"&")(0)
    if isnumeric(stanum) then stanum = cLng(stanum) else stanum = 0
    nxtnum = stanum + 20

    rs.open "select * from txtdb",conn,3,2
    rs.addnew
    rs("txt") = tmpstr
    rs("pag") = stanum
    rs.update
    rs.close
    set rs = nothing
    set conn = nothing

    response.redirect "http://www.xrnet.cn/store/member.php?module=mysite&start_item=" & nxtnum & "&search=&sort_order=expiry_date&sort_order_desc=1"
  end if

5、不停的点击收藏夹的,直到最后一页。

6、直接用浏览器打开,http://192.168.99.29/_app/xirang.asp,就导出了列表的数据。 另存为网页,改后缀名为.xls,用excel打开,另存为excel格式。用access/mssql导入,有脚本处理就可以了。这些不在本文的讨论范围,不提供代码。

这种方法,可以保存任何内容。本人现在对外接单,如果有网站程序开发/重构的需求,欢迎和我联系。QQ:77068320

PHP无限级分类函数

很早之前就想一套PHP无限级分类函数,供以后的项目用,今晚闲了无事,就写一个把。懒得动脑,就按以前的ASP无限级分类函数的思想写一个把。

  /*
    作者:苗启源(Miaoqiyuan.cn)
    函数:getCatagory
    功能:获得分类列表
    参数:cat_arr     -> 分类数组(Rscordset:id:分类编号,pid:上级分类,name:分类名称,childs:子分类)
          cat_pid     -> 上级分类编号
          cat_childs  -> 下级分类编号
          cat_select  -> 选择的分类
          cat_dir     -> 分类级别
    返回:返回分类列表(Option)
  */
  function getCatagory($cat_arr,$cat_pid,$cat_childs,$cat_select,$cat_dir,$format){
    if($cat_pid==0 && $format=="option"){
      echo '<option value="0">根目录</option>';
    }
    if(is_array($cat_arr)){
      foreach($cat_arr as $cat_id =>$cat){
        if($cat['pid'] == $cat_pid && strpos("," . $cat_childs . ",","," . $cat['id'] . ",") == 0){
        #if($cat['pid'] == $cat_pid){
          if($format == "option"){
            echo '<option value="'. $cat['id'] .'" '. (($cat_select == $cat['id'])?"selected":"") . '>' . $cat_dir . '┣ ' . $cat['name'] . '</option>';
          }else{
            #<li>{$cat.dir}┣<a href="?act=edt&id={$cat.id}&type=product">{$cat.name}</a></li>
            $tmp = $format;
            if(strpos($tmp,"{\$cat.dir}")>0)$tmp = str_replace("{\$cat.dir}",$cat_dir,$tmp);
            if(strpos($tmp,"{\$cat.id}")>0)$tmp = str_replace("{\$cat.id}",$cat['id'],$tmp);
            if(strpos($tmp,"{\$cat.pid}")>0)$tmp = str_replace("{\$cat.pid}",$cat['pid'],$tmp);
            if(strpos($tmp,"{\$cat.name}")>0)$tmp = str_replace("{\$cat.name}",$cat['name'],$tmp);
            if(strpos($tmp,"{\$cat.childs}")>0)$tmp = str_replace("{\$cat.childs}",$cat['childs'],$tmp);
            echo $tmp;
          }
          getCatagory($cat_arr,$cat['id'],$cat_childs,$cat_select,$cat_dir . "┃",$format);
        }
      }
    }
  }
  
  $cat_arr = Array(
    1 => Array(
      'id'     =>1,
      'pid'    =>0,
      'name'   =>'分类一',
      'childs' =>'1,2,3,4,5'
    ),
    2 => Array(
      'id'     =>2,
      'pid'    =>1,
      'name'   =>'分类二',
      'childs' =>'2,5'
    ),
    3 => Array(
      'id'     =>3,
      'pid'    =>1,
      'name'   =>'分类4',
      'childs' =>'3,4'
    ),
    4 => Array(
      'id'     =>4,
      'pid'    =>3,
      'name'   =>'分类4',
      'childs' =>'4'
    ),
    5 => Array(
      'id'     =>5,
      'pid'    =>2,
      'name'   =>'分类5',
      'childs' =>'5'
    )
  );
  
  getCatagory($cat_arr,0,'','','','<li>{$cat.dir}┣<a href="?act=edt&id={$cat.id}&type=product">{$cat.name}</a></li>');

ASP写的MSSQL管理工具

本文为catseven落伍缩写,已发到落伍者,供catseven落伍。如有引用,请注明出处。
       因为工作,经常要操作数据库,考虑到安全问题,在防火墙中没有开mssql端口。每次遇到必须使用查询分析器的时候,就麻烦了。为了方便工作,写了这个工具。

      可以操作所有ADODB连接的数据库,当然包括MSSQL,MySQL,Access….

     本工具分为两个部分。控制代码和输入代码。

     控制代码就是VBScript部分,可以实现所有逻辑操作,和asp操作一样。

      输入部分就是Link、SQL分别用于输入连接字符串,SQL语句。如果控制代码不调用这些语句,则这部分无实际意义。

       默认,控制代码已经写好一个模板。点击执行,可以执行SQL语句,点击下载,将执行结果保存到Excel中。

       因为能直接操作VbScript,如果要使用,请设置好权限。新建mssql用户,在iis中设置mssql.asp以mssql的身份执行。mssql.asp的访问权限只有mssq用户。mssql对所有文件无任何权限,对mssql.asp只有可读权限。

      代码如下:

<%
Server.ScriptTimeout = 9999
starttime = timer()
cmd = request("cmd")

if request("out")="xls" and trim(cmd)<>"" then
	response.ContentType = "application/octet-stream"
	response.AddHeader "Content-Disposition", "attachment;filename=执行结果.xls"
	execute(cmd)
	response.end
end if
%>
<style type="text/css">
form{text-align:center}
textarea{width:100%;height:200px;border:solid 1px #CCC;}
input{height:20px;vertical-align:middle}
input.input{border:solid 1px #CCC;width:40%;line-height:18px;color:#090}
a{font-size:12px;color:#C00;text-decoration:none;}
</style>
<form action="mssql.asp" method="post">
<textarea name="cmd">
<%
if trim(cmd)="" then
%>set Conn = Server.CreateObject("ADODB.Connection")
Conn.open Request("link")

Set Rs=Conn.Execute(Request("sql"))
  for i = 0 to Rs.Fields.Count-1
    Response.write Rs(i).Name &"	"
  next
  response.write vbCrlf
  do while Not Rs.eof
    for i = 0 to Rs.Fields.Count-1
      Response.write Rs(i).value &"	"
    next
    response.write vbCrlf
	Rs.movenext
  loop
<%else%>
<%=cmd%>
<%end if%></textarea>
<%
sql = Request("sql")
link = request("link")
if sql = "" then sql = "select * from sysobjects"
if link = "" then link = "Provider=SQLOLEDB;Persist Security Info=False;User ID=sa;Password=123456;Initial Catalog=master;Data Source=(local)"
%>
Link:<input name="link" class="input" value="<%=link%>" /> 
SQL:<input name="sql" class="input" value="<%=sql%>" /> 
<input type="submit" value="执行" onclick="document.forms[0].action='?out=txt'"/>
<input type="submit" value="下载" onclick="document.forms[0].action='?out=xls'"/>
</form>
<%
response.flush()
if trim(cmd)<>"" then
	response.write "<hr /><textarea readonly=""readonly"">"
	execute(cmd)
	response.write "</textarea>"
end if
%><hr /><center style="font-size:12px;color:#C00">执行时间:<%=formatnumber((timer()-starttime)*1000,2,-1)%>毫秒。</center>

ASP生成静态HTML,可任意深度路径的函数

< %
	set FSO = Server.CreateObject("Scripting.FileSystemObject")

	Function CheckFile(byval Path)
		pathArr = Split(Path,"/")
		Path = replace(Path,"/" & pathArr(ubound(pathArr)),"")
		if Path = "" then Exit Function
		if not FSO.FolderExists(Server.Mappath(Path)) then
			Call CheckFile(Path)
			FSO.CreateFolder(Server.Mappath(Path))
		end if
	End Function

	Function newFile(byval Path)
		if Right(Path,1)="/" then
			Path = Path & "index.html"
		end if
		Call CheckFile(Path)
		Set newFile = FSO.CreateTextFile(Server.Mappath(Path))
	End Function

	set n = newFile("/index/cat2/path/demo/111/222/333/444/555/666/777/888/")
	n.write "12345"
	n.close
	set n = nothing

	set n = newFile("../../../../test.css")
	n.write "body{}"
	n.close
	set n = nothing
%>

ASP模板技术探讨之关联变量

ASP模板技术探讨之关联变量。
先看可实现的效果:

访问变量,需要与ASP结合
关联变量:支持关联的变量
{$#关联名#}
Assgin #关联名#,#变量#
{$#关联名#}

{$#关联名#.#索引#}
Assgin #关联名#,Array(“123”)
{$#关联名#.0}

{$#关联名#.#索引#.#索引#}
Assgin #关联名#,Array(Array(“123”))
{$#关联名#.0.0}

{$#关联名#.#索引#…..#索引#}
Assgin #关联名#,Array(Arr..ay(“123”)))
{$#关联名#.0…0}

{$#关联名#.#Directionary.Key#}
Assgin #关联名#,#DirectionaryName#
{$#关联名#.#Directionary.Key#}

<%
	Dim outHtml
	outHtml = "xxx"                '加载模板   
	function Assign(t,n)
		if isArray(n) then
			for x=0 to ubound(n)
				Assign t&"."&x,n(x)
			next
		elseif isobject(n) then
			for each x in n
				Assign t&"."&x,n.item(x)
			next
		else
			if isnull(n) then
				outHtml=replace(outHtml,"{$"&t&"}","")
			else
				outHtml=replace(outHtml,"{$"&t&"}",n)
			end if
		end if
	end function
%>

使用php加密、压缩Javascript脚本

又好久没有更新日志了,上次谈到将工作用的脚本换成php,现在发现这是一个非常非常明智的选择。
在Linux也可以直接用php当作脚本,处理工作的事情。也算是“跨平台脚本”咯~~~
今天说一下JS压缩,呵呵,这种工具我可写不出来,但是网上牛人已经帮我们写出了相应的类:JavaScriptPacker(http://creativecommons.org/licenses/LGPL/2.1/)
我们直接调用就可以咯,比如将test_resource.js压缩成test.js。

<?php
   #demo.php
   require_once 'class.JavaScriptPacker.php';
   $packer = new JavaScriptPacker(file_get_contents("./test_resource.js"), 'Normal', true, false);
   file_put_contents("./test.js",$packer->pack());
?>

直接 php demo.php