下面是实例:

$r=”my.acA45.cc”;
preg_match(“/^\w+\.(\w+)\.+\w+$/”,$r,$hostdo);
print_r($hostdo);

输出的结果是数组 “Array ( [0] => my.acA45.cc [1] => acA45 )”

“echo $hostdo[1]“-》acA45  这个就是获取中间的值了。

 

下面是sql语句

第一步是先建立一个附表用来保存要打乱顺序的旧表的数据。
create table  新表  as select * from 旧表;

第二步是清空旧表的数据。
truncate table 旧表;

第三步是将附表的数据随机重新插入到旧表里面。
insert into 旧表 (title,content) select title,content from 新表 order by rand();

第四部删除附表。
DROP TABLE 新表;

下面是 两个数据库联合查询写入的例子,用了 right join(left join) on    来实现

insert into huoche._niaodao_yan2 (title,content) SELECT a.title,a.content FROM huoche2.`_niaodao_yan` as a right join huoche._niaodao_yan on (a.title=huoche._niaodao_yan.title) where a.title is not null

 

SHOW TABLE STATUS 直接写这个可以获取所在数据库下的所有数据表的信息

Name 表的名称
Engine 表的存储引擎。在MySQL 4.1.2之前,本值被标记为Type。
Version 表的.frm文件的版本号
Row_format 行存储格式(Fixed, Dynamic, Compressed, Redundant, Compact)。InnoDB表的格式被报告为Redundant或Compact
Rows 行的数目。部分存储引擎,如MyISAM,存储精确的数目。对于其它存储引擎,比如InnoDB,本值是一个大约的数,与实际值相差可达40到50%。在这些情况下,使用SELECT COUNT(*)来获得准确的数目。对于在INFORMATION_SCHEMA数据库中的表,Rows值为NULL。
Avg_row_length 平均的行长度。

 

Data_length 数据文件的长度。
Max_data_length 数据文件的最大长度。如果给定了数据指针的大小,这是可以被存储在表中的数据的字节总数。

 

Index_length 索引文件的长度。
Data_free 被整序,但是未使用的字节的数目。
Auto_increment 下一个AUTO_INCREMENT值。
Create_time 表创建时间。
Update_time 什么时候数据文件被最后一次更新
Check_time 什么时候表被最后一次检查。不是所有的存储引擎此时都更新,在此情况下,值为NULL。
Collation 表的字符集和整序。
Checksum 活性校验和值。
Create_options 和CREATE TABLE同时使用的额外选项。
Comment 创建表时使用的评注(或者有关为什么MySQL可以访问表信息的说明)。

如果是获取单个表的信息 就这样写就行了 SHOW TABLE STATUS FROM 库名 where name=表名

例子

$sql=mysql_query(‘SHOW TABLE STATUS’);
while($row=mysql_fetch_array($sql)){
echo”<tr><td>$row[0]</td><td>$row[4]</td><td>$row[17]</td><td><a href=’list.php?dbtable={$row[0]}’>去重</></td></tr>”;}

 

扩展

mysql show columns等show的用法

SHOW DATABASES︰列出 MySQL Server上的数据库。

SHOW TABLES [FROM db_name]︰列出数据库中的表。

SHOW TABLE STATUS [FROM db_name]︰列出数据库的表信息,比较详细。

SHOW COLUMNS FROM tbl_name [FROM db_name]︰列出表的列信息,同 SHOW FIELDS FROM tbl_name [FROM db_name],DESCRIBE tbl_name [col_name]。

SHOW FULL COLUMNS FROM tbl_name [FROM db_name]︰列出表的列信息,比较详细,同 SHOW FULL FIELDS FROM tbl_name [FROM db_name]。

SHOW INDEX FROM tbl_name [FROM db_name]︰列出表的索引信息。

SHOW STATUS︰列出 Server 的状态信息。

SHOW VARIABLES︰列出 MySQL 系統参数值

SHOW PROCESSLIST︰查看当前mysql查询进程

SHOW GRANTS FOR user︰列出用户的授权命令

 

1、取得表注释
Select table_name 表名,TABLE_COMMENT 表注释 from INFORMATION_SCHEMA.TABLES Where table_schema = ’testhuicard’ # #数据库名
AND table_name LIKE ’companies’ # #表名
mysql手册:23.1. INFORMATION_SCHEMA表

2、取字段注释
Select COLUMN_NAME 列名, DATA_TYPE 字段类型, COLUMN_COMMENT 字段注释
from INFORMATION_SCHEMA.COLUMNS
Where table_name = ’companies’ # #表名
AND table_schema = ’testhuicard’ # #数据库名
AND column_name LIKE ’c_name’ # #字段名

上面的两种方法用到的是 INFORMATION_SCHEMA.TABLES  和 INFORMATION_SCHEMA.COLUMNS 这两个库 这两个是在创建mysql时候就会存在的。

3、取得某数据库下所有表的注释
$tt = mysql_query(“show table status;”);
$table_info=array();
while($re = mysql_fetch_array($tt,MYSQL_ASSOC)){
//$re["Comment"],这个就是表的注释
$table_info[] = $re;
} ……

 

PHP限制用户提交次数

解决以上两个问题之后,还有一个问题,就是某些用户有意或者无意的提交了多次表单,这也会给信息收集工作带来巨大的压力,所以我们也要努力地降低这个方面的工作量。我们可以采用验证Cookies方法,达到织梦DedeCMS自定义表单限制IP24小时只能发布一次功能。

实现方法是,打开plus下diy.php文件找到以下代码:

1
if(!is_array($diyform))        {            showmsg('自定义表单不存在', '-1');            exit();        }

再其下添加下面的代码:

1
if(isset($_COOKIE['VOTE_MEMBER_IP']))   {       if($_COOKIE['VOTE_MEMBER_IP'] == $_SERVER['REMOTE_ADDR'])       {           ShowMsg('您已经填写过表单啦','-1');          exit();     }       else        {           setcookie('VOTE_MEMBER_IP',$_SERVER['REMOTE_ADDR'],time()*$row['spec']*3600,'/');       }    }     else     {       setcookie('VOTE_MEMBER_IP',$_SERVER['REMOTE_ADDR'],time()*$row['spec']*3600,'/');    }

当然,经过以上的操作,织梦DedeCMS的自定义表单并不是就完全的安全了,别人还可以清空Cookies的方式继续重复提交,不过这些就不需要考虑那么多了,毕竟道高一尺魔高一丈,不可能百分百完美的。希望麻瓜程序员的这篇织梦DedeCMS自定义表单数据校验的文章能够给大家帮助。

 

在dedecms后台添加文章的时候,文章标题是中文的话,提交后有时候会提示“标题不能为空”这样的问题(标题为英文的话就没出现这个问题)。检查后台没问题后,其实是因为PHP版本的问题引起的。

   问题根源:htmlspecialchars在php5.4默认为utf8编码,gbk编码字符串经 htmlspecialchars 转义后的中文字符串为空,也就是标题为空。

解决办法:给htmlspecialchars添加ENT_COMPAT ,’GB2312′参数修改编码默认值。

具体修改页面:

1、dede/article_add.php 和 dede/article_edit.php

将 $title = htmlspecialchars(cn_substrR($title,$cfg_title_maxlen));
改成
$title = htmlspecialchars(cn_substrR($title,$cfg_title_maxlen),ENT_COMPAT ,’GB2312′);

2、include/ckeditor/ckeditor_php5.php 138行
将htmlspecialchars($value)替换为htmlspecialchars($value, ENT_COMPAT ,’GB2312′)

测试,发布文章成功。所以如果不能修改服务器的PHP版本使用以上方法还是可以解决的!

 

<form action=”kele.php” name=”tktk” method=”post”>
<input type=”text” value=”" name=”sea”/>
<input type=”submit” name=”submitkele” value=”Kele产品价格查询” >
</form>

<?php
if($_POST['submitkele']){
$seac=$_POST["sea"];
$url=”http://www.kele.com/templates/search.aspx?s=”.$seac;
$fg=@fopen($url,”r”) or die(“超时”);
$contss=file_get_contents($url);
eregi(“<table border=\”0\” cellspacing=\”0\” class=\”skuListTable\”>(.*)</table>”,$contss,$con);

$con[0]=str_replace(“src=\”/img/test.png”,”src=\”http://www.kele.com/img/test.png”,$con[0]);
$con[0]=str_replace(“href”,”name”,$con[0]);
print($con[0]);
if($con[0]==”"){
echo”No part number results found.”;
}
}
?>

 

平常的字段内容 替换 update table set name=replace(name,‘aa‘,‘bb‘)   ;

table是表名  name是字段名 aa为要被替换的内容, bb是替换后的内容。

 

今天在做一个 菜单下载 统计 ,想到直接用txt来记录数据就行了。

<?
$filetxt=”dow.txt”;

if(($fg=fopen($filetxt,”r+”))==false){
printf(“读取不成功成功”);
exit;
}else{
$count=fread($fg,60);
$count=substr($count,33);
$count=$count+1;
fclose ($fg);

$fg=fopen($filetxt,”w+”);
fwrite($fg,”the delivery menu download count:”.$count);
fclose($fg);

}

?>

这是php出来文件 dow.php


<html xmlns=”http://www.w3.org/1999/xhtml”>

<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ />
<title>无标题文档</title>
<script type=”text/javascript” src=”jquery-1.7.2.min.js”></script>
<script language=”javascript”>

function dowss(url){

$.getJSON(url + ‘?callback=?’);
window.open(“Bocca Delivery Menu.xls”);
}
</script>
</head>

<body>

<a href=”#” id=”downloads” onclick=”dowss(‘dow.php’)”>delivery menu down</a>
</body>
</html>

这是html文件内容,用到jquery 的getJSON(), 记住要先建立一个txt文件哦, 我这里偷懒 没用php 判断文件不存在时 自动生成, 不难 大伙自己写吧。

 

大家都知道目前301重定向是最有用的跳转方式,不仅可以实现SEO亲和性跳转,而且还可以实现权重的传递。

大家也通常会在不同情况下有不同的301重定向需求,如要将不带www的域名301到带www的域名、将闲置老域名301到主域名、将原放在子目录下的论坛301到新的bbs二级域名、更换域名将某域名下所有页面301重定向到新域名下对应页面等等。

分析不同情况的301的需求,其实都需要保证如下两点:

1) 成功跳转,并正确发送301状态

2) 实现原页面跳转到新对应的页面

第一点怎么实现大家基本都有常见到各种各样的301重定向教程,而第二点因为不同CMS/程序、不同环境,实现方便难有统一的解决办法。下面落叶分两点先简单介绍下IIS下(服务器、虚拟主机)如何实现正确的301跳转,然后再重点介绍落叶原创的百试不爽的万能301跳转方法 – URL伪静态重写+PHP301跳转,实现所有程序对应页面跳转。

1. IIS下正确实现基本的301跳转:

如我为了保证网站域名单一性,集中权重,希望将aiwebcom.com 301永久重写向到www.aiwebcom.com,那么:

1) 服务器:如果有服务器的操作权限,直接另外新建一个网站,然后在IIS上设置“资源永久重定向”:

iis重定向

iis重定向

2) 虚拟主机:在IDC虚拟主机后台把不带www的域名绑定一个子目录,然后,在子目录下放置一个index.php,在其中放上301跳转的代码:

<?php
header(“HTTP/1.1 301 Moved Permanently”);
header(‘location:http://www.aiwebcom.com/’);
exit;
?>

上面服务器上直接IIS上的操作,不仅可以实现跳转到首页,勾选“资源的永久重定向”还可以实现原域名下所有子页面都跳转到新域名下对应页面,而上面虚拟主机上的301跳转代码则只可实现首页的跳转或者单一目录的跳转。

2. 对应页面跳转的万能301:URL伪静态重写+PHP301

对应页面301跳转的方法有很多,最笨的方法是手动一页一页301到对应的新页面,但实际不具可操作性,除非只是少数几个页面,要是更新域名等的301,基本不可能。那么怎样通用的实现对应页面的301跳转呢?URL伪静态+PHP301又是怎样操作的呢?

要实现对应页面跳转,首先要分析原页面URL的结构,然后分析新页面的URL规则,然后实现301的跳转,落叶通过采用的URL伪静态+PHP301的操作是通过分析原URL的规则,利用IIS中httpd.ini中的伪静态功能,将原URL正则重写到单一的PHP入口,然后通过该单一PHP中获取到原URL的特征字符串,对应跳转到新页面的特征字符串。

上面一句话其实已经概括完了整个的操作方法,下面举例说明实际的实现。

例一:我想将原放在子目录下www.aiwebcom.com/bbs/访问的论坛更换为blog.aiwebcom.com。

a.伪静态重写URL:

将下面伪静态规则放于根目录下的httpd.ini文件中

[ISAPI_Rewrite]
# 3600 = 1 hour
CacheClockRate 3600
RepeatLimit 32
# Protect httpd.ini and httpd.parse.errors files
# from accessing through HTTP
RewriteRule ^(.*)/bbs/(.*)$ $1/bbs/301\.php\?go=$2 [L]

作用:将BBS目录下所有链接都重写到index.php并使用go参数来传递,如http://www.aiwebcom.com/bbs/thread-112-1.html的链接重写成http://www.aiwebcom.com/bbs/301.php?go=thread-112-1.html,下一步就是在index.php中接收go参数(如thread-112-1.html),301跳转到http://blog.aiwebcom.com/thread-112-1.html 。将内页多入口转换为经过index.php的单一入口,集中控制。

b.在301.php中接收参数,并实现301永久重定向:

<?php
$go=$_GET['go'];//获取跳转页面链接部分,如”thread-112-1.html”,又如forum.php?fid=32等
header(“HTTP/1.1 301 Moved Permanently”);//发送301状态,之后的所有跳转均为301
header(‘location:http://blog.aiwebcom.com/’.$go);//根据go参数跳转到对应页面
exit;
?>

例二:我原论坛放在www.aiwebcom.com主域名下的,现在主域名想做文章站,论坛换到blog.aiwebcom.com下,我想原www.aiwebcom.com域名原论坛的部分URL全301到blog.aiwebcom.com对应页面,而新的文章内容不跳转。

如www.aiwebcom.com/forum-1-1.html

www.aiwebcom.com/thread-1-1-1.html

www.aiwebcom.com/tag-%D6%AA.html

跳转到 blog.aiwebcom.com/forum-1-1.html

而www.aiwebcom.com/article/123.html等不跳转。

a.分析你要部分跳转的URL的种类及大致格式:

如你上面提到的要跳转的有论坛版块文章列表页、论坛帖子内容页、论坛的TAG标签页,这三类页面的URL结构很典型,即你说的:

www.aiwebcom.com/forum-1-1.html

www.aiwebcom.com/thread-1-1-1.html

www.aiwebcom.com/tag-%D6%AA.html

b.把这些特征页面全伪静态重写到一个301.php页面:

帖子列表页:RewriteRule ^(.*)/forum-(.*)$ $1/301\.php\?go=forum-$2 [L]
帖子内容页:RewriteRule ^(.*)/thread-(.*)$ $1/301\.php\?go=thread-$2 [L]
Tag标签页:RewriteRule ^(.*)/tag-(.*)$ $1/301\.php\?go=tag-$2 [L]

等等,其它特征页类似重写,需要你对伪静态正则写法有一定了解

3.PHP301对应跳转:

<?php
$go=$_GET['go'];
header(“HTTP/1.1 301 Moved Permanently”);
header(‘location:http://blog.aiwebcom.com/’.$go);
exit;
?>

落叶原创的这个URL伪静态重写+PHP301方法(呵呵,如有雷同纯属巧合),百试不爽,但关键有一点,需要大家了解伪静态规则的写法。这一点其实涉及到一些正则表达式的知识,但是相信大家只要仔细看一下自己使用的CMS或者论坛程序提供的伪静态规则,细心观察上,就可以模仿上面例子的思路进行301跳转了。

本文出自:麻瓜程序员

原创首发CHINAZ!

© 2012 Ai-WEB的博客 Suffusion theme by Sayontan Sinha