假定期存款取数据库的接口予以标准,PHP校验码

2019-07-29 作者:编程   |   浏览(146)

复制代码 代码如下:

/****** 产生Session ID ******/ 
基本的思路: 是把当前微秒的时间获取, 然后产生以个随机数字, 把随机数字和当前时间相加后加密一下, 最后再截取需要的长度 
/* 
函数名称:create_sess_id() 
函数作用:产生以个随机的会话ID 
参 数:$len: 需要会话字符串的长度,默认为32位,不要低于16位 
返 回 值:返回会话ID 
函数作者:heiyeluren 
*/ 
function create_sess_id($len=32) 
{ 
// 校验提交的长度是否合法 
if( !is_numeric($len) || ($len>32) || ($len<16)) { return; } 
// 获取当前时间的微秒 
list($u, $s) = explode(' ', microtime()); 
$time = (float)$u   (float)$s; 
// 产生一个随机数 
$rand_num = rand(100000, 999999); 
$rand_num = rand($rand_num, $time); 
mt_srand($rand_num); 
$rand_num = mt_rand(); 
// 产生SessionID 
$sess_id = md5( md5($time). md5($rand_num) ); 
// 截取指定需要长度的SessionID 
$sess_id = substr($sess_id, 0, $len); 
return $sess_id; 
} 


/****** 产生校验码 ******/ 
思路: 这个思路比较简单,因为考虑独一无二和随机性,我们的校验码就Session ID里面截取一段字符串就可以了,因为我们的SessionID是充分考虑了独一无二的。 

/* 
函数名称:create_check_code() 
函数作用:产生以个随机的校验码 
参 数:$len: 需要校验码的长度, 请不要长于16位,缺省为4位 
返 回 值:返回指定长度的校验码 
函数作者:heiyeluren 
*/ 
function create_check_code($len=4) 
{ 
if ( !is_numeric($len) || ($len>6) || ($len<1)) { return; } 

$check_code = substr(create_sess_id(), 16, $len ); 
return strtoupper($check_code); 
} 


/****** 生成校验码的图片 ******/ 

这个就是一些比较简单的PHP图像编程的东西了,我作的图片和简单。 

/* 
函数名称:create_check_image() 
函数作用:产生一个校验码的图片 
参 数:$check_code: 校验码字符串,一般由create_check_code()函数来获得 
返 回 值:返回该图片 
函数作者:heiyeluren 
*/ 
function create_check_image( $check_code ) 
{ 
// 产生一个图片 
$im = imagecreate(65,22); 
$black = ImageColorAllocate($im, 0,0,0); // 背景颜色 
$white = ImageColorAllocate($im, 255,255,255); // 前景颜色 
$gray = ImageColorAllocate($im, 200,200,200); 
imagefill($im,68,30,$gray); 

// 将四位整数验证码绘入图片 
imagestring($im, 5, 8, 3, $check_code, $white); 
// 加入干扰象素 
for($i=0;$i<200;$i  ) 
{ 
$randcolor = ImageColorallocate($im,rand(0,255),rand(0,255),rand(0,255)); 
imagesetpixel($im, rand()p , rand()0 , $randcolor); 
} 
// 输出图像 
Header("Content-type: image/PNG"); 
ImagePNG($im); 
ImageDestroy($im); 
} 

这里我们要注意,引用create_check_image()函数的时候,必须在一个单独的文件里,因为输出文件头的时候输出的格式是图像格式,夹杂其他内容,会导致图片无法显示。另外,图片成生函数,你是可以更改的,比如你想改颜色,那么你就把前景色和背景色的生成位置换一下,那么颜色就不一样了,同时也要把校验码的颜色换了,不然背景和校验码都是黑色就显示不出来了。 

复制代码 代码如下:

就算 PHP 是创立 Web 系统强有力的工具,然则 PHP 存取数据库的机能,一向不可能规范化,各个数据库,都使用另一种不一致且不相称的应用程序接口(API)。为了填补这么些可惜,由此才有 ADODB 的出现。一旦存取数据库的接口予以规范,就能够遮蔽种种数据库的距离,若欲调换至别的区别的数据库,将变得非常便于。
  近日 ADODB最新版本是V4.62,帮忙的数据库连串特别地多,举个例子:MySQL, PostgreSQL, Interbase, Informix, Oracle, MS SQL 7, 福克斯pro, Access, ADO, Sybase, DB2 以及一般的 ODBC (当中 PostgreSQL、Informix、Sybase 的driver 是由自由软件社会群众体育发展以往进献出来的)。
  使用 ADODB 最大的长处之一是:不管后端数据库怎么着,存取数据库的格局都以一样的,开拓设计职员不用为了某一套数据库,而必须再深造另一套不一样的存取方法,那大大缓解开垦人士的文化担负,过去的文化以往仍可连续利用,转移数据库平台时,程序代码也不必做太大的转移。
  其实 ADODB 那样的进化理念,并不是首创的,DBI 比 ADODB 出现得更早,它提供 Perl 存取数据库时,使用一样的 API 呼叫接口。相信用过 Perl DBI 的情侣,再来用 ADODB 时,会有一种似曾相识的以为。
  别的,ADODB 对用过 ASP 的人来说,应该不生分,那类朋友对 ADODB 应该很轻巧接受。
  Adodb官方:
PHP能够用最少的精力以及最多的童趣来建设构造动态的网址,要赤手空拳动态网址大家需求动用数据库来撷取登陆账号音信、宣布动态资源新闻、积累研商区的稿子。 就以使用最通用的 MySQL 数据的话,你们公司现已完毕了那般美妙的做事,令你们的网址比你们所能想象的还要知名。接着你们也发觉MySQL无法应付实际的专门的学业量了,是该更改数据库 系统的时候了。
不佳地,在PHP中有着数据库的存取皆有些轻微的比不上。与MySQL连结你要采用mysql_connect(),当你说了算进级到 Oracle 或 Microsoft SQL Server 时,你无法不各自改用 ocilogon() 或 mssql_connect()。更不佳的是例外连结所采纳的参数也都分裂,有的数据库说 po-tato(马铃薯的发音),别的数据库又说 pota-to(马铃薯的另一个发音),喔…..天啊。
咱俩决不吐弃
当你必要确认保证您程序的可移植性的时候,二个称呼 ADODB 的数据库封包链接库已经出现了。它提供了共通的应用程序接口来跟全体扶助的数据库调换,因而你不要废弃!
ADODB是Active Data Object DataBase的缩写(很对不起!玩Computer的突发性不是很有原创性)。ADODB近些日子帮衬MySQL、PostgreSQL、Oracle、 Interbase、Microsoft SQL Server、Access、FoxPro、Sybase、ODBC及ADO,你能够从 ADODB。
MySQL的例子
PHP中最通用的数据库是MySQL,所以我想你会欣赏下边包车型客车程序代码,它连接到 localhost 的 MySQL 服务器,数据库名称是 mydab,况兼试行二个 SQL 的 select 指令查询,查询结果会一列列地印出来。
$db = mysql_connect("localhost", "root", "password");
mysql_select_db("mydb",$db);
$result = mysql_query("SELECT * FROM employees",$db);
if ($result === false) die("failed");
while ($fields = mysql_fetch_row($result)) {
for ($i=0, $max=sizeof($fields); $i < $max; $i ) {
print $fields[$i].' ';
}
print "<br>n";
}
上列的程序代码用颜色标记分段,第一段是连接的局部,第二段是实行SQL指令,最终一段则是显得字段,while循环扫描结果的每一列,而for循环扫描到每列的字段。
接下去是以ADODB的程序代码获得平等的结果:
include("adodb.inc.php");
$db = NewADOConnection('mysql');
$db->Connect("localhost", "root", "password", "mydb");
$result = $db->Execute("SELECT * FROM employees");
if ($result === false) die("failed");
while (!$result->EOF) {
for ($i=0, $max=$result->FieldCount(); $i < $max; $i )
print $result->fields[$i].' ';
$result->MoveNext();
print "<br>n";
}
当今改造指向Oracle数据库,程序代码只要修改第二行成为 NewADOConnection('oracle'),让大家看一下整机的先后代码...
与数据库联网
include("adodb.inc.php");
$db = NewADOConnection('mysql');
$db->Connect("localhost", "root", "password", "mydb");
连着的程序代码比起原来MySQL的程序代码有成熟一些,因为大家便是需求更成熟些。在ADODB大家应用对象导向的主意来治本八种数据库的复杂 性,大家用差异类(class)来支配差别数据库。假诺你素不相识对象导向程序设计,别挂念!全数的复杂性专门的学问都藏匿在 NewADOConnection() 函数之后。
为了省去内部存款和储蓄器,我们只加载与你所联网数据库相关的PHP程序代码,我们因此调用NewADOConnection(databasedriver) 来造成那事,合法的数据库驱动程序包涵mysql,mssql,oracle,oci8,postgres,sybase,vfp,access,ibase 以及无数别样的驱动程序。
继而我们透过调用 NewADOConnection() 来从连结连串发生贰个新的对象实体,最后大家运用 $db->Connect() 来连接数据库。
执行SQL指令
$result = $db->Execute("SELECT * FROM employees");
if ($result === false) die("failed");
直白传送SQL指令到服务器,当成功进行之后,Execute()将盛传叁个recordset对象,你能够就如上边所列来检查$result。
一个初大方轻巧混淆的议题是,在ADODB有二种档期的顺序的指标,连结对象以及recordset对象,咱们哪一天用那一个目的啊?
紧接对象($db)是肩负连结数据库,格式化你的SQL查询。而recordset对象($result)则是担负撷取结果并将响应数据规格化成文字或数组。
独一小编须求扩展的事体是,ADODB提供比较多平价的函数来让INSERT及UPDATE指令更便于些,那一点大家在进级的章节会提到。
撷取资料
while (!$result->EOF) {
for ($i=0, $max=$result->FieldCount(); $i < $max; $i )
print $result->fields[$i].' ';
$result->MoveNext();
print "<br>n";
}
前边获得数据的表率很像从档案读数据,在每一行大家率先检查是不是到了档案的最终(EOF),若还没到结尾,循环扫过每列中的字段,然后移到下一行(MoveNext)接珍视复一样的事务。
$result->fields[]数组是由PHP数据库延伸系统所发出的,某些数据库延伸系统并不会以字段名称创建该数组的目录,要强迫以名称排序索引该数组,使用$ADODB_FETCH_MODE的通用变量。
$ADODB_FETCH_MODE = ADODB_FETCH_NUM;
$rs1 = $db->Execute('select * from table');
$ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
$rs2 = $db->Execute('select * from table');
print_r($rs1->fields); // shows array([0]=>'v0',[1] =>'v1')
print_r($rs2->fields); // shows array(['col1']=>'v0',['col2'] =>'v1')
仿佛你所见的上面例子,四个recordset储存并行使不一致的取用形式,当recordset由Execute()产生后再设定$ADODB_FETCH_MODE。
ADOConnection
连通到数据库的对象,实践SQL指令何况有一组织工作具函数来标准格式化SQL指令,比如涉及与日期格式等一声令下。
别的有效的函数
$recordset->Move($pos)卷动前段时间的数据列,ADODB扶助整个数据库往前卷动,有点数据库并不扶助未来的卷动,那倒不会是个难题,因为你可见用暂存纪录到快取来仿真以往卷动。
$recordset->RecordCount()传回SQL指令存取到的纪要笔数,有个别数据库会因为不帮助而盛传-1。
$recordset->GetArray()以数组的情势传回结果。
rs2html($recordset)函数将传进的recordset转为HTML的报表格式。下例中以粗体字突显相关用法:
include('adodb.inc.php');
include('tohtml.inc.php'); /* includes the rs2html function */
$conn = &ADONewConnection('mysql');
$conn->PConnect('localhost','userid','password','database');
$rs = $conn->Execute('select * from table');
rs2html($rs); /* recordset to html table */
再有好些个其余有效的函数列示在文件之中,可从下列网站查得
进级主题材料
增加产量及更新
假如你要新扩充下列数据到数据库中。
ID = 3
TheDate=mktime(0,0,0,8,31,2001) /* 31st August 2001 */
Note= sugar why don't we call it off
当您改用别的数据库,恐怕就不可能新扩展多少。
先是个难点是,每贰个数据库各自有两样的钦赐日期格式,MySQL使用 YYYY-MM-DD 格式,而其他数据库则有例外的钦命格式,ADODB提供DBDate()函数来更改不相同数据库之间的日子钦点格式。
次贰个难点是单引号(don't)的表示法,在MySQL能够直接使用单引号(don't),但在另外数据库如Sybase、Access、 Microsoft SQL Server,则用多少个单引号表示(don''t),qstr()函数能够化解此难点。
作者们怎么样利用那几个函数?就好像那样:
$sql = "INSERT INTO table (id, thedate,note) values ("
. $ID . ','
. $db->DBDate($TheDate) .','
. $db->qstr($Note).")";
$db->Execute($sql);
ADODB还有$connection->Affected_Rows()函数,传回受最终update或delete指令影响的多寡列数, 及$recordset->Insert_ID()函数,传回末了因insert指令而活动发出的数码列编号,预先提醒大家,未有别的数据库有提供 那多个函数。
MetaTypes
您能够拿走有关字段的更加多新闻,透过recordset的秘技FetchField($田野同志offset)传回对象的3个属性:name,type,max_length。
举例表达:
$recordset = $conn->Execute("select adate from table");
$f0 = $recordset->FetchField(0);
结果$f0->name的开始和结果是'adata',$f0->type将是'date',倘若max_length不驾驭,其剧情将会是-1。
管理分化数据库的三个题目是,每二个数据库对于一样的数目型态会有例外的称得上,举个例子timestamp型态在某数据库中称之为datetime,而另 二个数据库则称为time,所以ADODB提供MetaType($type,$max_length)函数来条件下列的数量型态:
C: character and varchar types
X: text or long character (eg. more than 255 bytes wide).
B: blob or binary image
D: date
T: timestamp
L: logical (boolean)
I: integer
N: numeric (float, double, money)
在前头的事例中,
$recordset = $conn->Execute("select adate from table");
$f0 = $recordset->FetchField(0);
$type = $recordset->MetaType($f0->type, $f0->max_length);
print $type; /* should print 'D' */
Select指令的Limit及Top支持
ADODB有个$connection->SelectLimit($sql,$nrows,$offset)函数让您撷取 recordset的片段集结,那是应用Microsoft产品中的SELECT TOP用法,及PostgreSQL与MySQL中的SELECT...LIMIT用法的帮助和益处,就算原本的数据库并从未提供此用法,本函数也仿真提供该使 用形式。
快取支援
ADODB允许你在您的档案系统中暂存recordset的多少,并且在$connection->CacheExecute($ secs2cache,$sql)及 $connection->CacheSelectLimit($secs2cache,$sql,$nrows,$offset)等设定的时刻间 隔达到以后,才真的去做数据库的询问以节省时间。
PHP4 Session支持
ADODB也支持PHP4 session handler,你能够存放你的session变量在数据库中,相关功用请参照他事他说加以考察
催促商业使用
如若你布置写商用的PHP应用软件来贩卖,你也足以动用ADODB,大家依据GPL来出版ADODB,也正是说你能够合法地在商用应用程式中援用,并持有你程序代码的全体权。刚毅地鼓励ADODB的小买卖利用,我们团结内部也正以这几个理由这么使用中。

<?php
require('chinese.php');
class PDF extends PDF_Chinese
{
function Header() //设置页眉
{
$this->SetFont('GB','',10);
$this->Write(10,'XX公司产品名录');
$this->Ln(20); //换行
}
function Footer() //设置页脚
{
$this->SetY(-15);
$this->SetFont('GB','',10);
$this->Cell(0,10,'第'.$this->PageNo().'页');
}
}

PHP校验码生成--备忘

<?php
/**
* 功效: 根据标准营造分类缓存减弱项目使用
* 创制日期:Thu May 31 15:55:11 CST 2005
* 最终更新:
* 作者: sanshi <sanshi0815@tom.com>
*/

$conn = mysql_connect("localhost", "root", ""); //连接数据库

<?php 
session_start();//保存生成值,以与用户输入比较
//-------------------------------------------------------------------------
$img_w    = 80;// 设置图片宽
$img_h    = 20;// 设置图片高
$pixel_num  = 200;//点越多干扰越大
$is_set_line = true;// 启用干扰线
$pixel_mode = 2;// 干扰点模式,1,同色;2,杂色
//-------------------------------------------------------------------------

// 随机数产生器
function make_seed()
{
  list($usec, $sec) = explode(' ', microtime());
  return (float) $sec   ((float) $usec * 100000);
}
mt_srand(make_seed());//4.2.0以下版本适用
$authnum = mt_rand(100, 99999);
// 加入session
$_SESSION['verifycode']=$authnum;
//echo $authnum;

//生成验证码图片
Header("Content-type: image/PNG");
$im = imagecreatetruecolor($img_w, $img_h);

$bg_color = ImageColorAllocate($im, mt_rand(250,255),mt_rand(250,255),mt_rand(250,255));

// 绘制背景
imagefill($im,0,0,$bg_color);

$total_width = 0;
$word_info = array();

// 循环,获取文字信息
$word_length = strlen($authnum);
for($ii=0; $ii<$word_length; $ii  )
{
  $word_space = mt_rand(1,5);
  $font = rand(3,5);
  mt_rand(1,9)%2 == 0?$top = 1:$top = 3;
  $word_info[$ii]['char']  = substr($authnum,$ii,1);
  $word_info[$ii]['font']  = $font;
  $word_info[$ii]['offset'] = $top;
  if($ii == 0)
  {
    $word_info[$ii]['width'] = 0;
  }
  $word_info[$ii]['width'] = imageFontWidth($font) $word_space;
  $word_info[$ii]['height'] = imageFontHeight($font);
  $word_info[$ii]['color'] = imageColorAllocate($im, mt_rand(0,50),mt_rand(0,150),mt_rand(0,200));

  // 文字总宽度
  $total_width  = $word_info[$ii]['width'];

  // 取第一个字体的高度
  if($ii == 0)
  {
    $total_height = imagefontHeight($font);
  }
}

// 计算偏移
$offset_x = floor(($img_w - $total_width)/2);
$offset_y = floor(($img_h - $total_height)/2);

// 填充验证码
$wid = 0;
$i = 0;
foreach($word_info as $key=>$val)
{
  if($i>0)
  {
    $wid  = $val['width'];
  }
  imagestring($im, $val['font'], $offset_x   $wid, $val['offset']   $offset_y, $val['char'], $val['color']);
  $i  ;
}
switch($pixel_mode)
{
  case 1:
    $pixel_color = ImageColorAllocate($im,
                    mt_rand(50,255),
                    mt_rand(50,255),
                    mt_rand(50,255));
    // 干扰象素
    for($i=0;$i<$pixel_num;$i  )
    {
      imagesetpixel($im, mt_rand()%$img_w , mt_rand()%$img_h , $pixel_color);
    }
    break;
  case '2':
    // 干扰象素
  for ($i=0;$i<=128;$i  )
   {
   $pixel_color = imagecolorallocate ($im, rand(0,255), rand(0,255), rand(0,255));
   imagesetpixel($im,mt_rand(2,128),mt_rand(2,38),$pixel_color);
   }
    break;

  default:
    $pixel_color = ImageColorAllocate($im,
                    mt_rand(50,255),
                    mt_rand(50,255),
                    mt_rand(50,255));
    // 干扰象素
    for($i=0;$i<$pixel_num;$i  )
    {
      imagesetpixel($im, mt_rand()%$img_w , mt_rand()%$img_h , $pixel_color);
    }
    break;
}
ImagePNG($im);
?> 

class treeCache
{
var $tableName = "index_category"; //表名
var $where = "1"; //where条件
var $pidStr ="i_c_pid"; //pid 的字段名
var $tempCode = array(); //生成文件的数组
var $pid = '0'; //pid的初始值
var $db ; //数据库句柄
var $idStr="i_c_id"; //取得的多寡id
var $title = "i_c_cn"; //名字字段
var $createArrayName = "treeCache"; //组建的数组名字
var $createFileName =""; //创建文件的名字
var $appendArr = array(); //附加的属性,需求字段名与数据里的名对应
var $is_utf8 = false;
function treeCache()
{
}
function set($db)
{
$this->db = $db;
$this->tempCode[] = "<?php";
}
//获得富有的超级
function getRootID()
{
$sql = "SELECT {$this->idStr} FROM {$this->tableName} WHERE
{$this->pidStr}='{$this->pid}' AND {$this->where} ";
//exit($sql);
$result = $this->db->select($sql);
$temp = array();
foreach ($result as $r)
{
$temp[]=$r["{$this->idStr}"];
}
$this->tempCode[] = "${$this->createArrayName}['root']='".implode(',',$temp)."';";
//print_r($temp);
return $temp;
}
//取得子id
function getChildren($pid)
{
$sql = "SELECT {$this->idStr} FROM {$this->tableName} WHERE
{$this->pidStr}='{$pid}' AND {$this->where} ";
$result = $this->db->select($sql);
$temp = array();
foreach ($result as $r)
{
$temp[]=$r["{$this->idStr}"];
}
return $temp;
}
//取得夫id
function getParent($cid)
{
$sql = "SELECT {$this->pidStr} FROM {$this->tableName} WHERE
{$this->idStr}='{$cid}' AND {$this->where} ";
$result = $this->db->select($sql);
//print_r($result);exit();
return $result[0]["{$this->pidStr}"];
}
//获得上级的id
function getPidStr($cid,$pidStr="")
{
$pid=$this->getParent($cid);
$temp = array();
while ($pid!=$this->pid && !emptyempty($pid)) {
$temp[] = $pid;
$pid=$this->getParent($pid);
}
//print_r($temp);
return implode(',',$temp);
}
//获得深度
function getDepth($cid,$depth=0)
{
$pid=$this->getParent($cid);
$depth ;
if( $pid != $this->pid && !emptyempty($pid))
$depth = $this->getDepth($pid,$depth);
return $depth;
}
//建设构造文件
function make()
{
if(emptyempty($this->createFileName))
$this->createFileName = "{$this->createArrayName}.data.php";

mysql_select_db("product", $conn); //执行SQL
$query_rs_prod = "SELECT * FROM product ORDER BY prod_id";
$rs_prod = mysql_query($query_rs_prod, $conn) or die(mysql_error());
$row_rs_prod = mysql_fetch_assoc($rs_prod);
$totalRows_rs_prod = mysql_num_rows($rs_prod);

你或然感兴趣的稿子:

  • 选用php从身份ID号中获得一雨后玉兰片线索(星座、生肖、生日等)
  • php提取身份ID编号中的破壳日日期以及表明是或不是为成人的函数
  • php身份ID号码检查类实例
  • PHP用星号掩饰部份用户名、身份ID、IP、手提式有线电电话机号等实例
  • php依照身份证编号总结年龄的实例代码
  • PHP用居民身份证号获取星座和生肖的方式
  • php不用正则验证真假居民身份证
  • PHP 身份ID号验证函数
  • PHP身份ID校验码计算格局

$rootArr = $this->getRootID();
$selectF = "{$this->idStr},{$this->title},{$this->pidStr}";
foreach ($this->appendArr as $app)
{
if(emptyempty($app)) continue;
$selectF .=",{$app}";
}
$sql = "SELECT {$selectF} FROM {$this->tableName} WHERE
{$this->where}";
$result = $this->db->select($sql);
for ($i=0;$i<count($result);$i )
{
//id值
$this->tempCode[] =
"${$this->createArrayName}['{$result[$i][$this->idStr]}']['id']='{$result[$i]["{$this->idStr}"]}';";
//标题
$this->tempCode[] =
"${$this->createArrayName}['{$result[$i][$this->idStr]}']['title']='{$result[$i]["{$this->title}"]}';";
//父id
$this->tempCode[] =
"${$this->createArrayName}['{$result[$i][$this->idStr]}']['pid']='{$result[$i]["{$this->pidStr}"]}';";
//子id
$this->tempCode[] =
"${$this->createArrayName}['{$result[$i][$this->idStr]}']['cid']='".implode(',',$this->getChildren($result[$i]["$this->idStr"]))."';";
//目录深度
$this->tempCode[] =
"${$this->createArrayName}['{$result[$i][$this->idStr]}']['depth']='".$this->getDepth($result[$i]["$this->idStr"])."';";
//父id的id串
$this->tempCode[] =
"${$this->createArrayName}['{$result[$i][$this->idStr]}']['pstr']='".$this->getPidStr($result[$i]["$this->idStr"])."';";
//增多的增大属性
foreach ($this->appendArr as $app)
{
if(emptyempty($app)) continue;
$this->tempCode[] =
"${$this->createArrayName}['{$result[$i][$this->idStr]}']['{$app}']='{$result[$i]["{$app}"]}';";
}
}
$this->tempCode[] = "return ${$this->createArrayName};";
$this->tempCode[] = "?>";
//$content = implode("n",$this->tempCode);
//print_r($this->tempCode);
$content = implode("n",$this->tempCode);
//创设文件
$fio=Factory::getBaseClass('FileIO');
if($this->is_utf8) $content = "xEFxBBxBF".$content;
$fio->writeFile($this->createFileName,$content);
return $content ;
}
}
//加载的公文正是为了,数据库连接
//须要数据库有 select 方法
/*
include_once(dirname(dirname(__FILE__))."/config/config.inc.php");
include_once(CLASSES_PATH."factryObject.class.php");

$pdf=new PDF(); //创制新的FPDF对象
$pdf->AddGBFont(); //设置普通话字体
$pdf->Open(); //开端创制PDF
$pdf->AddPage(); //扩张一页

$db = factryObject::getDB('indexPush');
$c = new treeCache($db);
$c->make();
//exit();

$pdf->SetFont('GB','',10); //设置字体样式

//做分析
include_once("treeCache.data.php");
$treeCache=isset($treeCache) ? $treeCache : array();
$rootStr = isset($treeCache['root']) ? $treeCache['root'] : "";
echo parseTree($treeCache,$rootStr);
function parseTree($treeCache,$rootStr)
{
$tempStr = "";
$temp = explode(',',$rootStr);
foreach ($temp AS $cid)
{
$info = $treeCache[$cid];
$cidStr = $info['cid'];
$tempStr .= str_repeat('-',($info['depth']-1)*3);
$tempStr.=$info['title'];
if(empty($info['pid']))
{
//附加操作
}
$tempStr .= "<br/>";
if(!empty($info['cid']))
$tempStr .=parseTree($treeCache,$info['cid']);
}
return $tempStr;
}
*/
?>
<?php
/**
* 效用: 依据法则建立分类缓存缩短项目使用
* 创造日期:Thu May 31 15:55:11 CST 二〇〇六
* 最后更新:
* 作者: sanshi <sanshi0815@tom.com>
*/

$header=array('产品编号','产品名称','产品档案的次序','产品单价'); //设置表头
$width=array(20,80,40,20); //设置每列宽度

class treeCache
{
var $tableName = "index_category"; //表名
var $where = "1"; //where条件
var $pidStr ="i_c_pid"; //pid 的字段名
var $tempCode = array(); //生成文件的数组
var $pid = '0'; //pid的开端值
var $db ; //数据库句柄
var $idStr="i_c_id"; //获得的数据id
var $title = "i_c_cn"; //名字字段
var $createArrayName = "treeCache"; //创立的数组名字
var $createFileName =""; //创设文件的名字
var $appendArr = array(); //附加的性质,供给字段名与数量里的名对应
var $is_utf8 = false;
function treeCache()
{
}
function set($db)
{
$this->db = $db;
$this->tempCode[] = "<?php";
}
//获得富有的一流
function getRootID()
{
$sql = "SELECT {$this->idStr} FROM {$this->tableName} WHERE
{$this->pidStr}='{$this->pid}' AND {$this->where} ";
//exit($sql);
$result = $this->db->select($sql);
$temp = array();
foreach ($result as $r)
{
$temp[]=$r["{$this->idStr}"];
}
$this->tempCode[] = "${$this->createArrayName}['root']='".implode(',',$temp)."';";
//print_r($temp);
return $temp;
}
//取得子id
function getChildren($pid)
{
$sql = "SELECT {$this->idStr} FROM {$this->tableName} WHERE
{$this->pidStr}='{$pid}' AND {$this->where} ";
$result = $this->db->select($sql);
$temp = array();
foreach ($result as $r)
{
$temp[]=$r["{$this->idStr}"];
}
return $temp;
}
//取得夫id
function getParent($cid)
{
$sql = "SELECT {$this->pidStr} FROM {$this->tableName} WHERE
{$this->idStr}='{$cid}' AND {$this->where} ";
$result = $this->db->select($sql);
//print_r($result);exit();
return $result[0]["{$this->pidStr}"];
}
//取得上级的id
function getPidStr($cid,$pidStr="")
{
$pid=$this->getParent($cid);
$temp = array();
while ($pid!=$this->pid && !empty($pid)) {
$temp[] = $pid;
$pid=$this->getParent($pid);
}
//print_r($temp);
return implode(',',$temp);
}
//获得深度
function getDepth($cid,$depth=0)
{
$pid=$this->getParent($cid);
$depth ;
if( $pid != $this->pid && !empty($pid))
$depth = $this->getDepth($pid,$depth);
return $depth;
}
//创建文件
function make()
{
if(empty($this->createFileName))
$this->createFileName = "{$this->createArrayName}.data.php";

for($i=0;$i<count($header);$i ) //循环输出表头
$pdf->Cell($width[$i],6,$header[$i],1);
$pdf->Ln();

$rootArr = $this->getRootID();
$selectF = "{$this->idStr},{$this->title},{$this->pidStr}";
foreach ($this->appendArr as $app)
{
if(empty($app)) continue;
$selectF .=",{$app}";
}
$sql = "SELECT {$selectF} FROM {$this->tableName} WHERE
{$this->where}";
$result = $this->db->select($sql);
for ($i=0;$i<count($result);$i )
{
//id值
$this->tempCode[] =
"${$this->createArrayName}['{$result[$i][$this->idStr]}']['id']='{$result[$i]["{$this->idStr}"]}';";
//标题
$this->tempCode[] =
"${$this->createArrayName}['{$result[$i][$this->idStr]}']['title']='{$result[$i]["{$this->title}"]}';";
//父id
$this->tempCode[] =
"${$this->createArrayName}['{$result[$i][$this->idStr]}']['pid']='{$result[$i]["{$this->pidStr}"]}';";
//子id
$this->tempCode[] =
"${$this->createArrayName}['{$result[$i][$this->idStr]}']['cid']='".implode(',',$this->getChildren($result[$i]["$this->idStr"]))."';";
//目录深度
$this->tempCode[] =
"${$this->createArrayName}['{$result[$i][$this->idStr]}']['depth']='".$this->getDepth($result[$i]["$this->idStr"])."';";
//父id的id串
$this->tempCode[] =
"${$this->createArrayName}['{$result[$i][$this->idStr]}']['pstr']='".$this->getPidStr($result[$i]["$this->idStr"])."';";
//增加的增大属性
foreach ($this->appendArr as $app)
{
if(empty($app)) continue;
$this->tempCode[] =
"${$this->createArrayName}['{$result[$i][$this->idStr]}']['{$app}']='{$result[$i]["{$app}"]}';";
}
}
$this->tempCode[] = "return ${$this->createArrayName};";
$this->tempCode[] = "?>";
//$content = implode("n",$this->tempCode);
//print_r($this->tempCode);
$content = implode("n",$this->tempCode);
//建设构造文件
$fio=Factory::getBaseClass('FileIO');
if($this->is_utf8) $content = "xEFxBBxBF".$content;
$fio->writeFile($this->createFileName,$content);
return $content ;
}
}
//加载的文件就是为了,数据库连接
//需求数据库有 select 方法
/*
include_once(dirname(dirname(__FILE__))."/config/config.inc.php");
include_once(CLASSES_PATH."factryObject.class.php");

do //循环输出表体
{
$pdf->Cell($width[0],6,$row_rs_prod['prod_id'],1);
$pdf->Cell($width[1],6,$row_rs_prod['prod_name'],1);
$pdf->Cell($width[2],6,$row_rs_prod['prod_type'],1);
$pdf->Cell($width[3],6,$row_rs_prod['prod_price'],1);
$pdf->Ln();
} while ($row_rs_prod = mysql_fetch_assoc($rs_prod));

$db = factryObject::getDB('indexPush');
$c = new treeCache($db);
$c->make();
//exit();

$pdf->Output("product.pdf", true); //下载PDF文件
?>

//做分析
include_once("treeCache.data.php");
$treeCache=isset($treeCache) ? $treeCache : array();
$rootStr = isset($treeCache['root']) ? $treeCache['root'] : "";
echo parseTree($treeCache,$rootStr);
function parseTree($treeCache,$rootStr)
{
$tempStr = "";
$temp = explode(',',$rootStr);
foreach ($temp AS $cid)
{
$info = $treeCache[$cid];
$cidStr = $info['cid'];
$tempStr .= str_repeat('-',($info['depth']-1)*3);
$tempStr.=$info['title'];
if(empty($info['pid']))
{
//附加操作
}
$tempStr .= "<br/>";
if(!empty($info['cid']))
$tempStr .=parseTree($treeCache,$info['cid']);
}
return $tempStr;
}
*/
?>

复制代码 代码如下:

本条类是改正过的,当初做那个的符合,只好是数字的当作数组下标,此次协理字母了

本文由小鱼儿玄机30码发布于编程,转载请注明出处:假定期存款取数据库的接口予以标准,PHP校验码

关键词: 小鱼儿玄机30码