作者: admin

  • 用GetString让ASP速度倍增

    许多ASP程序员都有过执行数据库查询,然后将查询结果用HTML表格的形式显示出来的经历。通常我们应该是这么做的: 

    <%
    ‘Create connection / recordset
    ‘Populate data into recordset object
    %>
    <TABLE>
    <% Do While not rs.EOF %>
    <TR>
    <TD ><%=rs(“Field1”)% ></TD>
    <TD ><%=rs(“Field2”)% ></TD>
    .
    </TR>
    <% rs.MoveNext
    Loop %>
    </TABLE>

    如果查询结果很多,服务器解释你的ASP script将花费大量的时间,因为有许多的Response.Write语句要处理. 如果你将输出的全部结果放在一个很长的字符串里(从<TABLE >到</TABLE >),那么服务器只需解释一遍Response.Write语句,速度就会快得多 . 微软公司里的一些能干的家伙已经将想法变成了现实. (注意,这是一个ADO 2.0以上才有 的特性. 如果你还在使用以前版本的话,请升级到最新版) (更多…)

  • mysql错误:Table XXX is marked as crashed and should be repaired[转]

    真的很感谢网络这个东西,还有那些无私的将自己的知识经验奉贤出来的人们!

    一日正在上班,朋友的QQ图标就激烈的闪亮起来,一看,原来是论坛出现问题了,具体报错如下:

    Table '.Tablenameposts' is marked as crashed and should be repaired

    提示说论坛的帖子表posts被标记有问题,需要修复。我记得以前也出现过类似的问题,但是只要点击Phpmyadmin上的repair按纽就自动修复了,但是这次很绝,什么都没有.于是赶快上网查找原因。最终将问题解决。解决方法如下:

    找到mysql的安装目录的bin/myisamchk工具,在命令行中输入:

    myisamchk -c -r ../data/tablename/posts.MYI

    然后myisamchk 工具会帮助你恢复数据表的索引。好象也不用重新启动mysql,问题就解决了。 (更多…)

  • 抛弃WP-PageNavi,为WP自制分页导航功能

    WP-PageNavi是WP的一个优秀的分页导航插件,相信70-80%的P友,一定在用这个插件。

    翠花,上图,这个插件的显示效果,是十分的漂亮的。

    不过,作为骨灰级的WP狂热者,相信一定不愿意在自己WP站上,被一堆的插件插来插去的。你一定是以最精简作为你的终身目标的,或许你不是,但我是!

    废话少说,今天,在这里分享一个将分页导航功能直接写入WP主题的方法,希望对各位骨灰级朋友有用。

    第一步,找到所用模板中的function.php文件。打开后。将下边代码用力的插进去!注意!要插在<?php………………?>中省略号处,别插错地方了!

    
    function wp_pagenavi($before = '', $after = '') {
    global $wpdb, $wp_query;
    if (!is_single()) {
      $request = $wp_query->request;
      $posts_per_page = intval(get_query_var('posts_per_page'));
      $paged = intval(get_query_var('paged'));
      $pagenavi_options = get_option('pagenavi_options');
      $numposts = $wp_query->found_posts;
      $max_page = $wp_query->max_num_pages;
    
      if(empty($paged) || $paged == 0) {
       $paged = 1;
      }
      $pages_to_show = intval($pagenavi_options['num_pages']);
      $pages_to_show_minus_1 = $pages_to_show-1;
      $half_page_start = floor($pages_to_show_minus_1/2);
      $half_page_end = ceil($pages_to_show_minus_1/2);
      $start_page = $paged - $half_page_start;
      if($start_page <= 0) {
       $start_page = 1;
      }
      $end_page = $paged + $half_page_end;
      if(($end_page - $start_page) != $pages_to_show_minus_1) {
       $end_page = $start_page + $pages_to_show_minus_1;
      }
      if($end_page > $max_page) {
       $start_page = $max_page - $pages_to_show_minus_1;
       $end_page = $max_page;
      }
      if($start_page <= 0) {
       $start_page = 1;
      }
      if($max_page > 1 || intval($pagenavi_options['always_show']) == 1) {
       $pages_text = str_replace("%CURRENT_PAGE%", $paged, $pagenavi_options['pages_text']);
       $pages_text = str_replace("%TOTAL_PAGES%", $max_page, $pages_text);
       echo $before.'<div >'."n";
       switch(intval($pagenavi_options['style'])) {
        case 1:
         if(!empty($pages_text)) {
          echo '<span >'.$pages_text.'</span>';
         }     
         if ($start_page >= 2 && $pages_to_show < $max_page) {
          if(!empty($pagenavi_options['dotleft_text'])) {
           echo '<span >'.$pagenavi_options['dotleft_text'].'</span>';
          }
         }
         previous_posts_link($pagenavi_options['prev_text']);
         for($i = $start_page; $i  <= $end_page; $i++) {      
          if($i == $paged) {
           $current_page_text = str_replace("%PAGE_NUMBER%", $i, $pagenavi_options['current_text']);
           echo '<span >'.$current_page_text.'</span>';
          } else {
           $page_text = str_replace("%PAGE_NUMBER%", $i, $pagenavi_options['page_text']);
           echo '<a href="'.clean_url(get_pagenum_link($i)).'" title="'.$page_text.'">'.$page_text.'</a>';
          }
         }
         next_posts_link($pagenavi_options['next_text'], $max_page);
         if ($end_page < $max_page) {
          if(!empty($pagenavi_options['dotright_text'])) {
           echo '<span >'.$pagenavi_options['dotright_text'].'</span>';
          }
          $last_page_text = str_replace("%TOTAL_PAGES%", $max_page, $pagenavi_options['last_text']);
          echo '<a href="'.clean_url(get_pagenum_link($max_page)).'" title="'.$last_page_text.'">'.$last_page_text.'</a>';
         }
         break;
        case 2;
         echo '<form action="'.htmlspecialchars($_SERVER['PHP_SELF']).'" method="get">'."n";
         echo '<select size="1" = this.options[this.selectedIndex].value;">'."n";
         for($i = 1; $i  <= $max_page; $i++) {
          $page_num = $i;
          if($page_num == 1) {
           $page_num = 0;
          }
          if($i == $paged) {
           $current_page_text = str_replace("%PAGE_NUMBER%", $i, $pagenavi_options['current_text']);
           echo '<option value="'.clean_url(get_pagenum_link($page_num)).'" selected="selected" >'.$current_page_text."</option>n";
          } else {
           $page_text = str_replace("%PAGE_NUMBER%", $i, $pagenavi_options['page_text']);
           echo '<option value="'.clean_url(get_pagenum_link($page_num)).'">'.$page_text."</option>n";
          }
         }
         echo "</select>n";
         echo "</form>n";
         break;
       }
       echo '</div>'.$after."n";
      }
    }
    }

    第二步:找到你想加入分页导航的页面,如首页、分类页等。再用力的插入如下代码:

            

      

    第三步:找到你的CSS文件,再次用力的插入如下代码:

    /* Page Navigation
    ---------------------------------------------*/
    .navigation {
    padding-top:15px;
    padding-bottom:2px;/*visivility-IE*/
    border:1px solid #fff;
    }
    .alignleft {
    float:left;
    }
    .alignright {
    float:right;
    }
    .aligncenter, div.aligncenter {
    display: block;
    margin:0 auto;
    }
    .wp-pagenavi {
    text-transform:uppercase;
    }
    .wp-pagenavi a {
    text-decoration:none;
    border:1px solid #b3b3b3;
    color:#212236;
    margin:2px;
    padding:2px 6px;
    }
    .wp-pagenavi a:hover {
    color:#fff;
    background-color:#9c0;
    }
    .wp-pagenavi span {
    border:1px solid #b3b3b3;
    margin:2px;
    padding:2px 6px;
    }
    .wp-pagenavi span.pages {
    color:#777;
    margin-left:0;
    color:#000;
    word-spacing:0.2em;
    }
    .wp-pagenavi span.current {
    color:#212236;
    background-color:#e8edef;
    }

    至此,WP分页导航大法修炼成功。注意:功夫一定要做足,一定要插三次,一次都不能少!

    转自:毒龙的世界

  • 迎接新年,迎接元旦 祝福短信 祝福语 特别策划

    迎接新年,迎接元旦 祝福短信 祝福语 特别策划
      http://sms.king51.com

  • 网页排序问题&百度对网站SEO的态度

    1. 我的网站首页被收录了,但搜索网站名称却排不到第一个,怎么办?
    答:排序算法非常复杂。我们的目标,即在于通过算法改进,让用户以最小的成本,搜索到所需要的信息。这个过程中还是会有各种各样不尽如人意的地方。我们会非常欢迎您把您遇到的困惑和问题,反馈给我们。我们的工程师,对每一个问题都会有细致的跟踪和分析,以期将之最终解决。百度搜索结果页下方的搜索框右侧,有“与百度对话”链接,您可以在那里提交您的问题,以协助我们改进。我们一直在改进搜索算法,以使得百度的搜索结果更加符合用户的搜索需求。

    2. 搜索某关键词,我的网页在百度搜索结果的排序短期内变化剧烈,这正常吗?
    答:通常情况下,这是正常的变化。一般来说,有三类原因导致排序发生变化:
      A. 特定关键词所涉及的您的网页发生了变化
      B. 特定关键词所涉及的其他网页发生了变化
      C. 百度的排序算法发生了变化 

    3. 搜索某关键词,我的网页在百度的排序位置,和在其他搜索引擎的排序位置,差异非常大,这正常吗?

     答:通常情况下,这是正常的现象。因为不同搜索引擎的算法,都是不同的。 

    4. 我请一些“SEO”来为我的网站或者网页做优化,会有什么后果?
    答:合理的搜索引擎优化,参见百度的“给站长的建站指南”。
    外界很多打着SEO旗号的公司或者个人,也许能为您的网站带来短期的排序收益,但是,这会使您将面临更大损失的风险。在您把网站资源交托给别人之后,很多SEO甚至会利用您的资源进行他们个人的运营项目,最终导致您的利益受损。

    不要因为SEO们以下的说法,而冒险将自己的网站托付给他们随意处置:
    A. 我和百度的人很熟,想怎么干就怎么干,没风险
    B. 我是搜索引擎专家,对百度的算法一清二楚,玩玩火也不要紧
    C. 我把xxx、yyy、zzz这些关键词都搞到第一了,所以我是牛人啊

  • 百度SEO:百度对建站的建议

    有当搜索引擎、站长、互联网用户之间,能有一种默契的利益均衡,这个行业才会顺畅发展。竭泽而渔式的网站建设,只会使您与用户、与搜索引擎越来越远。搜索引擎与站长之间,宜和谐发展,共同拥抱美好的愿景。

     
    以下是百度给出的一些建站建议: 
     
    1. 站点结构宜简洁明晰
    答:不要让你的用户一进你的站点就因为纷繁s芜杂而不知所措。从某种意义上来说,百度的Spider也是一个相对特殊的访客而已。每一个子域名,每一个目录,都最好有明确的内容区隔,避免不同子域名或者目录对相同内容的互相串用。
       
    2. 创造属于您自己的独特内容
    答:百度更喜欢独特的原创内容。所以,如果您的站点内容只是从各处采集复制而成,很可能不会被百度收录。 
     
    3. 保持经常的更新
    答:经常的更新,蜘蛛程序就会经常的光顾;而长期不更新的网站,蜘蛛到访会日趋减少。 
     
    4. 谨慎设置您的友情链接
    答:如果您网站上的友情链接,多是指向一些垃圾站点,那么您的站点可能会受到一些负面影响。参与各类以SEO为目的的自助链接活动,很可能“过犹不及”。 
     
    5. 把自己的网站做成常青树
    答:如果没有搜索引擎,你的网站仍然访客盈门,那么你的网站就属于“常青树”了。面向用户做网站,而不要面向搜索引擎做网站,这是成为常青树网站的真谛。

  • 放下过去,活在当下

     

        放下过去,活在当下。

        既然不能山盟海誓,那就放下过去吧,给自己也给他人一个机会。我又何苦这样苦苦的的执着!

        人生中有很多无奈,但你却不得不做出这样或是那样不得已的选择

        我也在学着慢慢变得理智,慢慢成熟。

         我承认-我是被你宠坏了,将来也不会有人像你如此般的纵容我了。

        希望将来一切都好。

  • asp读取XML

    ASP文件: 
     程序代码

    
    
    read xml
    
    
    第  条记录:
    
    书名 出版社 价格

    XML文件《data.xml》: 
     程序代码

    
    
    48
    Dreamweaver
    上海科技出版社
    img/dw.jpg
    
    
    61
    Flash
    铁道出版社
    img/flash.jpg
    
    
    48
    Firweorks
    教育出版社
    img/fw.jpg
    
    

    ==========================
    js读取::
     程序代码

    var source=   new   ActiveXObject('Microsoft.XMLDOM');   //创建一个MSXML解析器实例   
    source.async=false;   
    source.load("xml.xml")        //载入xml文档。
    nodes = source.documentElement;
    var ItemN = source.documentElement;       //设置文档元素为根节点元素 
    var j = ItemN.length;//获取item节点个数
    
    var array1=new Array();
    var array2=new Array();
    var array3=new Array();
    for(i=0;i<j;i++)
    {
    array1[i]=ItemN[i].selectSingleNode("name").text;//获取name内容
    array2[i] = ItemN[i].selectSingleNode("publisher").text;//获取publisher内容
    array3[i] = ItemN[i].selectSingleNode("img").text;//获取img内容
    }
  • GetRows() 提取大批量数据

    现有10W条数据,Access数据库保存

    通过正常提取:
     程序代码
    <%
    Set conn= Server.CreateObject("ADODB.Connection")
    connstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.MapPath("db2.mdb")
    conn.Open connstr

    Set rs = Server.CreateObject ("ADODB.Recordset")
    sql = "Select * from people order by id desc"
    rs.Open sql,conn,1,1

    Do While Not rs.EOF
        Response.write rs("id")&" | "
        rs.MoveNext
    Loop
    %>

    http://myhhe.cn/test/getrows/show1.asp 
    耗时3,250.000毫秒,总测试平均值在3秒左右

    使用存储过程提取:
     程序代码
    <%
    Set conn = Server.CreateObject("ADODB.Connection")
    Set cmd = Server.CreateObject("ADODB.Command")
    conn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("db2.mdb")

    cmd.ActiveConnection = conn
    cmd.CommandText = "Select * from people order by id desc"
    Set rs = cmd.Execute

    Do While Not rs.EOF
    Response.write rs("id")&" | "
    rs.MoveNext
    Loop
    %>

    http://myhhe.cn/test/getrows/show2.asp 
    耗时2,187.500毫秒,总测试平均值在2秒左右

    以上两种均不能彻底解决执行时间漫长的问题,主要原因即是循环每次都须向数据库抽取记录(Command速度相对较快)

    那么使用GetRows()方法呢:
     程序代码
    <%
    Set conn = Server.CreateObject("ADODB.Connection")
    Set cmd = Server.CreateObject("ADODB.Command")

    conn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("db2.mdb")
    cmd.ActiveConnection = conn
    cmd.CommandText = "Select * from people order by id desc"
    Set rs = cmd.Execute
    rsArray = rs.GetRows()

    For i = 0 To UBound(rsArray, 2)
    Response.Write rsArray(0, i)&" | "
    Next
    %>

    http://myhhe.cn/test/getrows/show3.asp 
    耗时187.500毫秒,总测试平均值在0.2秒左右

    GetRows()方法是将数据从 Recordset 复制到二维数组中,这是一个二维数组,第一个下标标识字段,第二个则标识记录号

    所以rsArray = rs.GetRows()
    rsArray(0, 0)就表示记录集第一行的第一字段值
    rsArray(1, 0)就表示记录集第一行的第二字段值

    数组的数据是保存在内存中的,这就从根本上解决了每次显示记录还需向数据库请求的麻烦。

    另外,关于GetRows()的详细介绍和用法,这里有份内容参考

    http://www.51windows.net/pages/Ado/mdmthgetrows.htm 

    http://www.blueidea.com/tech/program/2005/2853.asp

  • [ASP]GetRows的用法详解!

    大家应该都知道 Recordset 有个 GetRows 属性,但是真正使用的不多,我也是最近才用的!汗……

    其实这个属性很简单,就是把数据集输出到一个数组中。但是实用性可不小,在这里我举一个例子说明一下GetRows的使用方法,大家举一反三能想到更多的用法!

    比如一个分类的表 T_Cate,结构和数据如下:

    ID   |   Title   |  Intro
    —————————————–
    1    |   新闻   |  这里是新闻
    2    |   教程   |  这里是教程
    3    |   下载   |  这里是下载

    好了,表建立好了,数据也有了,下面我们就要用到GetRows咯! 

    Dim Rs_Cate
    Dim Arr_Cate
    Set Rs_Cate=Conn.ExeCute("SELECT ID,Title,Intro FROM T_Cate ORDER BY ID ASC")
    Arr_Cate=Rs_Cate.GetRows
    Set Rs_Cate=Nothing

    好了表数据已经导出到数组了!下面我们将遍历这个数组

    Dim Arr_CateNumS,Arr_CateNumI
    Arr_CateNumS=Ubound(Arr_Cate,2)  '得到数组中数据的下标
    For Arr_CateNumI=0 To Arr_CateNumS
        Response.Write("ID:"&Arr_Cate(0,Arr_CateNumI)&" | 标题:"&Arr_Cate(1,Arr_CateNumI)&" | 介绍:"&Arr_Cate(2,Arr_CateNumI)&"<br>")
    Next

    呵呵,好了,输出的数据为:
    ID:1 | 标题:新闻 | 介绍:这里是新闻
    ID:2 | 标题:教程 | 介绍:这里是教程
    ID:3 | 标题:下载 | 介绍:这里是下载

    好了,具体就写这么多吧!文采不行,如果大家有什么不明白的,多用用就可以了,呵呵

  • 一段经典的AJAX代码

    function posts(id){
        var xmlhttp;
        try{
            xmlhttp=new XMLHttpRequest();
            }
        catch(e){
            xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
            }
        xmlhttp.onreadystatechange=function(){
        if (xmlhttp.readyState==4){
            if (xmlhttp.status==200){
                var data=xmlhttp.responseText;

                result(data);    
                }
            else{
                //提交失败
                }
            }
        else{
            //提交中
            }
        }
        var BaseURL="text.asp"
        var url = BaseURL + "?timeStamp=" + new Date().getTime();
        xmlhttp.open("post", url, true);
        xmlhttp.setRequestHeader('Content-type','application/x-www-form-urlencoded; charset=gb2312');
        xmlhttp.send("id="+escape(id));    
    }
    function Colsid_result(data){
        
        var pronames
        var data_arr
        if(data!="0"){
            //信息返回成功,
            alert(data);
        }else{
            //信息返回为0
        }
    }

  • asp动态include文件

    受<! #include file="filename.asp" –> 宏限制 
    必须存在该文件并且会预先编译(不管前面是否加以条件) ,他总在运行ASP里的程序前先编译,所以无法用if XXX then <! #include file="filename.asp" –>  这种方法随意include文件了

    经常有这样的要求,根据不同的需求要求include不同的文件 
    如各个人的不同设置,所以要求能动态include文件。 
    这里的方法其实原理很简单,就是用FSO把文件读出来,然后 execute运行他,不过这却是很精典的代码了
    代码如下: 

     引用内容

    Function include(filename) 
    Dim re,content,fso,f,aspStart,aspEnd 

    set fso=CreateObject("Scripting.FileSystemObject") 
    set f=fso.OpenTextFile(server.mappath(filename)) 
    content=f.ReadAll 
    f.close 
    set f=nothing 
    set fso=nothing 

    set re=new RegExp 
    re.pattern="^s*=" 
    aspEnd=1 
    aspStart=inStr(aspEnd,content,"<%")+2 
    do while aspStart>aspEnd+1 
    Response.write Mid(content,aspEnd,aspStart-aspEnd-2) 
    aspEnd=inStr(aspStart,content,"%>")+2 
    Execute(re.replace(Mid(content,aspStart,aspEnd-aspStart-2),"Response.Write ")) 
    aspStart=inStr(aspEnd,content,"<%")+2 
    loop 
    Response.write Mid(content,aspEnd) 
    set re=nothing 
    End Function 

    使用范例: 
     引用内容
    include("youinc.asp")