- 浏览: 11866 次
文章分类
最新评论
数据库配置文件:db_config.php
<?php $vhost="localhost"; $vdb="testdb"; $vuname="root"; $vupwd=""; $vcode="utf-8"; ?>
模板文件:t_source.html
<div id="phpcode"> <pre ID="codearea" style="background-color:#F0F0F0;border:1px dotted black"> /* 作者:由martixwang的自动PHP生成器生成 版本:1.0 */ require_once 'ado.php'; class <{$tablename}> extends ADO{ <{$classPropertys}> <{$propertyGeter}> <{$propertySeter}> function __construct(){ parent::__construct(); } public function query($whereExp){ $result=""; if(strlen($whereExp)!=0){ $result=$this->executeQuery("<{$selectsql}> where ".$whereExp, 0, 0); } else { $result=$this->executeQuery("<{$selectsql}>",0,0); } $returnVal=array(); $i=0; while($row=mysql_fetch_array($result)){ $vc=new <{$tablename}>(); <{$propertyAssignstring}>; array_push($returnVal,$vc); $i++; } $this->closeConnection(); return $returnVal; } public function addNew($new){ $sqls=array("insert into <{$tablename}> (<{$fieldslist}>) values (".<{$valueslist}>.")"); $result=$this->executeCommands($sqls); return $result; } public function modifyBy<{$PKfieldName}>($new){ //$tempsql=<{$modifysql}>." where <{$PKfieldName}>=".$new->get<{$PKfieldName}>(); $sqls=array(<{$modifysql}>." where <{$PKfieldName}>=".$new->get<{$PKfieldName}>()); $result=$this->executeCommands($sqls); return $result; } public function deleteBy<{$PKfieldName}>($<{$PKfieldName}>){ $sqls=array("<{$deletesql}>"." where <{$PKfieldName}>=".$<{$PKfieldName}>); $result=$this->executeCommands($sqls); return $result; } public function pageCount($whereExp, $pagesize){ return $this->getPageCount("<{$tablename}>", $whereExp, $pagesize); } public function rowCount($whereExp){ return $this->getRowCount("<{$tablename}>",$whereExp); } public function Exist($whereExp){ return $this->isExist("<{$tablename}>", $whereExp); } function toJSON() { $sResult=""; foreach($this as $key=>$value) { //根据 http://www.json.org/ $value=str_replace("\"","\\\"",$value); $value=str_replace("\\","\\\\",$value); $value=str_replace("/","\\/",$value); $value=str_replace("\b","\\b",$value); $value=str_replace("\f","\\f",$value); $value=str_replace("\n","\\n",$value); $value=str_replace("\r","\\r",$value); $value=str_replace("\t","\\t",$value); if($sResult=="") $sResult="\"$key\":\"$value\""; else $sResult.=" , \"$key\":\"$value\""; } return "{".$sResult."}"; } } class <{$tablename}>BLL extends <{$tablename}>{ public function __construct(){ parent::__construct(); } } </pre> </div>
基于mysql的通用访问类:ado.php
<?php class ADO{ private $dbhost; private $db=""; private $uname=""; private $upwd=""; private $conn; private $query; private $code; function __construct(){ include 'db_config.php'; $this->dbhost=$vhost; $this->uname=$vuname; $this->upwd=$vupwd; $this->code=$vcode; //echo "<br>db_config:".$this->dbhost.$this->uname.$this->upwd."<br>"; $this->db=$vdb; // $this->connect(); } //public function open_connect(){ // $this->connect(); //} private function connect(){ //echo "db_config".$this->dbhost.$this->uname.$this->upwd; $this->conn=mysql_connect($this->dbhost,$this->uname,$this->upwd) or die("connect fail!!!"); if(!$this->conn) echo "connection database fail!!!<br>".mysql_error(); mysql_select_db($this->db,$this->conn); mysql_query("set names '". $this->code ."'"); } protected function executeQuery($sql,$pagenumber,$pagesize){ $this->connect(); if($pagenumber!=0){ $sql=$sql." limit ".$pagenumber.",".$pagesize; } $query=mysql_query($sql,$this->conn); return $query; } //批量提交增删改命令 protected function executeCommands($sqls){ $this->connect(); mysql_query("BEGIN"); $error=1; foreach($sqls as $k=>$v){ $result=mysql_query($v,$this->conn); if(!$result){ $error=0; //echo $v." 执行失败!<br>"; break; } else { //echo $v." 执行成功!<br>"; } } if($error==0){ mysql_query("ROLLBACK"); } else { mysql_query("COMMIT"); } mysql_query("END"); $this->closeConnection(); return $error; } //取得页总数 protected function getPageCount($tablename,$whereExp,$pagesize){ $this->connect(); if(strlen($whereExp)!=0){ $sql="select ceiling(count(*)/".$pagesize.") as rowcount from ".$tablename." where ".$whereExp; } else { $sql="select ceiling(count(*)/".$pagesize.") as rowcount from ".$tablename; } $query=mysql_query($sql,$this->conn); $row=mysql_fetch_row($query); $this->closeConnection(); $rw= $row[0]; $this->closeConnection(); return $rw; } //取得行总数 protected function getRowCount($tablename,$whereExp){ $this->connect(); if(strlen($whereExp)!=0){ $sql="select count(*) as rowcount from ".$tablename." where ".$whereExp; }else { $sql="select count(*) as rowcount from ".$tablename;//." where ".$whereExp; } //echo $sql; $query=mysql_query($sql,$this->conn); $row=mysql_fetch_row($query); $rw= $row[0]; $this->closeConnection(); return $rw; } //按条判断存在性 protected function isExist($tablename,$whereExp){ $this->connect(); $c=$this->getRowCount($tablename,$whereExp); $this->closeConnection(); if($c!=0) {return 1;} else {return 0;} } //关闭链接 protected function closeConnection(){ mysql_close(); } } ?>
根据选择定的数据库表,生成dal代码:codecreate.php(这部分代码还没有优化,将就着用吧)
<?php require "./main.php"; require_once 'ado.php'; class mataRow{ private $fname=""; private $ftype=""; private $pk=""; /** * @return the $fname */ public function getFname() { return $this->fname; } /** * @return the $ftype */ public function getFtype() { return $this->ftype; } /** * @return the $pk */ public function getPk() { return $this->pk; } /** * @param string $fname */ public function setFname($fname) { $this->fname = $fname; } /** * @param string $ftype */ public function setFtype($ftype) { $this->ftype = $ftype; } /** * @param string $pk */ public function setPk($pk) { $this->pk = $pk; } } class codeCreate extends ADO{ private $tablename=""; private $fields=array(); private $updatesql=""; private $selectsql=""; private $deletesql=""; private $insertsql=""; private $fieldInfo=array(); private $pkFieldName=""; public function getPkFieldName() { return $this->pkFieldName; } public function setPkFieldName($pkFieldName) { $this->pkFieldName = $pkFieldName; } public function __construct($tabname){ parent::__construct(); $this->setTablename($tabname); $this->fieldInfo=$this->getTableInfo(); } public function getUpdatesql() { return $this->updatesql; } public function getSelectsql() { return $this->selectsql; } public function getDeletesql() { return $this->deletesql; } public function getInsertsql() { return $this->insertsql; } public function setUpdatesql($updatesql) { $this->updatesql = $updatesql; } public function setSelectsql($selectsql) { $this->selectsql = $selectsql; } public function setDeletesql($deletesql) { $this->deletesql = $deletesql; } public function setInsertsql($insertsql) { $this->insertsql = $insertsql; } public function getTablename() { return $this->tablename; } public function setTablename($tablename) { $this->tablename = $tablename; } public function getFields() { return $this->fields; } public function setFields($fields) { $this->fields = $fields; } public function getTableInfo(){ $returnVal=array(); $i=0; $result=$this->executeQuery("desc ".$this->tablename.";",0,0); if(!$result) echo "表没有找到,请检查数据库的配置文件db_config.php"; while($row=mysql_fetch_array($result)) { $mata=new mataRow(); //echo "<br>row:".$row[Field]."<br>".$row[Type]."<br>".$row[Key]."<br>"; $mata->setFname($row[Field]); $mata->setFtype($row[Type]); $mata->setPk($row[Key]); if($row[Key]=="PKI"){$this->setPkFieldName($row["Key"]);} $returnVal[$i]=$mata; $i++; } $this->closeConnection(); //print_r($returnVal); return $returnVal; } } $tablename=$_POST["selectComobo"]; echo "<input type='button' value='返回' onclick='javascript:history.go(-1);' > ". "<input type='button' value='复制' onclick=\"clipboardData.setData('Text',document.getElementById('codearea').innerHTML);\" />"; echo "<br><P style='color:red'>你选择的表是:".$_POST["selectComobo"]."的类操作代码成功生成!</p>"; if(strlen($tablename)!=0){ $gen=new codeCreate($tablename); $gen->setTablename($tablename); $rs=$gen->getTableInfo(); //echo "<br>ddddddddddddd:".$rs[0]->getFname(); //echo "<br>list:".count($rs)."<br>"; $v=new mataRow(); $n=count($rs); $i=0; $PKfieldName=""; $selectsql="select * from ".$tablename; $deletesql="delete from ".$tablename; $fieldslist=""; $valueslist=""; $fieldvaluelist=""; $propertyAssignstring=""; $classPropertys=""; $propertyGeter=""; $propertySeter=""; $tab_head=""; $tab_body="<{foreach item=v from=\$result}>\n<tr id='row<{\$v->getid()}>'>\n"."12345678". "\n<td><a href='#' onclick='addnew(<{\$v->getid()}>)'>增</a> \n". "<a href='#' id='delink' onclick='del(<{\$v->getid()}>)'>删</a> \n". "<a href='#' onclick='modify(<{\$v->getid()}>)'>改</a> \n<a href='#'>阅</a></td><tr>". "\n<{/foreach}>"; $tds=""; //"<td style='width:60px'><input type=text id='txt<{$v->getFname()}>' value='<{$v->getContentPostUserName()}>'</td>"; while($i<$n){ $v=$rs[$i]; //echo $v->getFname()." ".$v->getFtype()." ".$v->getFtype()." ".$v->getPk()."<br>"; $tab_head=$tab_head."<td>".$v->getFname()."</td>\n"; $tds=$tds."\n<td style='width:60px'><{\$v->get".$v->getFname()."()}></td>\n"; //$vc->contenttypeid=$row["id"]; $tempPA=""; $tempPA="\$vc->".$v->getFname()."=\$row[\"".$v->getFname()."\"]"; $propertyAssignstring=(strlen($propertyAssignstring)==0?$propertyAssignstring:$propertyAssignstring.";").$tempPA; $tempCP=""; $tempCP="private $".$v->getFname().";"; $classPropertys=(strlen($classPropertys)==0?$classPropertys:$classPropertys."").$tempCP; // public function getContenttypeid() {return $this->contenttypeid;} $tempPG="public function get".$v->getFname()."() {return \$this->".$v->getFname().";}"; $propertyGeter=(strlen($propertyGeter)==0?$propertyGeter:$propertyGeter."").$tempPG; $tempPS="public function set".$v->getFname()."(\$".$v->getFname()."){\$this->".$v->getFname()." = \$".$v->getFname().";}"; $propertySeter=(strlen($propertySeter)==0?$propertySeter:$propertySeter."").$tempPS; if($v->getPk()=="PRI"){ //如果是主键字段 //echo "i get the PKI"; $PKfieldName=$v->getFname(); }else{ //echo "<br>".$v->getFname()."-------".$v->getFtype()."<br>"; $temptype=$v->getFtype(); //echo "<br>the value is found?:".$v->getFname()."======================".$temptype."==============================".(stripos("_".$temptype,"int")?"found":"not found!")."<br>"; $fieldslist=(strlen($fieldslist)==0?$fieldslist:$fieldslist.",").$v->getFname(); $tempfvbegin=$v->getFname()."="; $tempfvend="\","; $tempfvstring=""; if(stripos("_".$temptype,"int")||stripos("_".$temptype,"num")||stripos("_".$temptype,"bit")||stripos("_".$temptype,"flo")||stripos("_".$temptype,"dou")||stripos("_".$temptype,"dec")){ $tempfv="\$new->get".$v->getFname()."()"; $tempfvbegin=$v->getFname()."="; $tempfvend=","; //echo "I GOT INT TYPE@".$temptype; } else { $tempfv="\"'\".\$new->get".$v->getFname()."().\"'\""; $tempfvbegin=$tempfvbegin."'"; $tempfvend="'"; } $tempfvstring=$tempfvbegin."\$new->get".$v->getFname()."()".$tempfvend; $fieldvaluelist=(strlen($fieldvaluelist)==0?$fieldvaluelist:$fieldvaluelist.",").$tempfvstring; $valueslist=(strlen($valueslist)==0?$valueslist:$valueslist.".\",\".").$tempfv; } $tempmodifysql="update ".$tablename." set ".$fieldvaluelist; $tempmodifysql="\"".str_replace("',",".\"',",str_replace("='","='\".",$tempmodifysql)); $tempmodifysql=str_replace("=\$","=\".\$",$tempmodifysql); $tempmodifysql=str_replace(",,",".\",",$tempmodifysql); if(strripos($tempmodifysql,"'")+1==strlen($tempmodifysql)){ $tempmodifysql=substr($tempmodifysql, 0,strlen($tempmodifysql)-1).".\"'\""; } if(strripos($tempmodifysql,",")+1==strlen($tempmodifysql)){ $tempmodifysql=substr($tempmodifysql, 0,strlen($tempmodifysql)-1);//.".\"'\""; } //$tempmodifysql=str_replace(",.",".",$tempmodifysql); $i++; } $tab_body=str_replace("12345678", $tds, $tab_body); // echo "<br>fieldlist and valuelist:".$fieldslist."<br>".$valueslist."<br>fvlist:".$fieldvaluelist."<br>propertyassignstring:".$propertyAssignstring. // "<br>classprorpertyes:".$classPropertys."<br>propertygeter:".$propertyGeter; // echo "<BR>propertySetter:". $propertySeter ; // echo "<br>tempmodifysql:".$tempmodifysql; $tpl->assign("tab_head",$tab_head); $tpl->assign("tab_body",$tab_body); $tpl->assign("tablename",$tablename); $tpl->assign("PKfieldName",$PKfieldName); $tpl->assign("selectsql",$selectsql); $tpl->assign("fieldslist",$fieldslist); $tpl->assign("valueslist",$valueslist); $modifysql=$tempmodifysql; $tpl->assign("modifysql",$modifysql); $tpl->assign("deletesql",$deletesql); $tpl->assign("propertyAssignstring",$propertyAssignstring); $tpl->assign("classPropertys",$classPropertys); $tpl->assign("propertyGeter",$propertyGeter); $tpl->assign("propertySeter",$propertySeter); $tpl->display("t_source.htm"); } else { echo "没有选择表,不能进行生成!!!"; } ?>
smarty调用文件:codecreateapp.php
<?php include "./main.php"; include "./dal/ado.php"; class test extends ADO{ public function __construct(){ parent::__construct(); } public function getTablesInfoOnServer(){ $result=array(); $rs=$this->executeQuery("show tables;",0,0); //print_r($rs); //echo "...."; while($t=mysql_fetch_array($rs)){ //echo $t[Tables_in_testdb]."|<br>"; array_push($result,$t[Tables_in_testdb]); } $this->closeConnection(); return $result; } } $t=new test(); $r=$t->getTablesInfoOnServer(); $tpl->assign("result",$r); $tpl->display("t_codeCreate.html"); ?>
相关推荐
Smarty模板引擎允许开发者以简单易懂的方式分离逻辑层与展示层。在生成静态HTML页面时,我们需要将数据库中的数据动态填充到模板中,并最终保存为HTML文件。这一过程涉及以下几个关键步骤: 1. **获取数据**:通常...
"tp5 前后台模板数据库"这个主题涵盖了Web应用开发中的多个重要方面:使用ThinkPHP5框架创建前后台界面,利用模板设计提升用户体验,通过数据库管理数据,以及采用前后端分离架构优化开发流程。理解并熟练掌握这些...
- **安全机制**:Smarty提供了一些安全功能,如自动转义HTML实体,防止XSS攻击,以及限制模板可访问的PHP函数,确保模板的安全性。 **5. 实战案例** 资料中包含的一些简单易学的Smarty案例可能包括: - **基本...
1. **Smarty模板引擎介绍** Smarty是一个强大的PHP模板技术,它的主要特点是将HTML和PHP代码分离,使得程序员可以专注于PHP的业务逻辑,而设计师则可以独立处理页面样式和布局。Smarty提供了一系列的模板语法,如...
在使用SmartyPager时,AdoDB可以作为数据访问工具,帮助处理数据库查询,获取总记录数和每页的数据。例如,你可以使用AdoDB的`GetRows`或`SelectLimit`方法来获取指定范围内的数据,配合SmartyPager进行分页处理。 ...
2. **模板语法**:Smarty模板文件通常有`.tpl`扩展名,它们使用简单的语法来显示变量和控制结构。例如,`{$var}`表示输出变量`$var`的值,`{if}`、`{foreach}`等用于条件判断和循环。 3. **模板继承与布局**:...
通过学习Smarty模板引擎,开发者可以更好地组织和维护Web应用的视图层,提高开发效率,同时保持设计的灵活性和代码的可读性。结合实际项目,熟练掌握Smarty的各种特性和用法,能帮助你构建出高效、安全、易于维护的...
2. 根据URL参数查询数据库,获取所需数据。 3. 对获取的数据进行处理,如修改显示格式。 4. 使用Smarty的assign()方法将处理后的数据分配给模板变量。 5. 最后,通过display()方法输出模板,呈现最终页面。 要实现...
Smarty模板技术可以实现表示层与业务层的分离,从而实现开发人员的分工。Ajax技术可以实现Web应用中客户端异步与服务器端进行交互,实现网页的局部刷新效果,提高访问速度。 系统总体设计通过分析,新闻网站一般...
本文对PHP开发框架关键技术进行了分析和讨论,涵盖了PHP开发框架中的MVC设计模式、模板解析引擎和数据访问层等技术。 在PHP开发框架中,MVC设计模式是最常用的设计模式之一。MVC模式通过分离数据、逻辑和显示,将...
4. 查询结果传递给Smarty模板,模板根据数据生成HTML页面。 5. HTML页面返回给客户端,用户看到分页显示的新闻列表。 6. 当用户点击分页链接时,重复上述过程,只是请求的页码不同。 **学习与实践** 通过研究...
通过以上介绍可以看出,ECShop利用Smarty模板引擎不仅实现了业务逻辑与表现层的有效分离,还提供了丰富的模板标签和函数,大大简化了模板开发的工作量。开发者可以根据实际需求灵活运用这些功能,提高开发效率的同时...
应用层负责处理用户请求,业务逻辑层负责处理业务逻辑,数据访问层负责与数据库交互,视图层负责渲染模板。 二、核心组件 ThinkPHP 框架的核心组件包括 Application、 Request、 Response、 Router、 Loader 等。...
4. **模板使用**:在Smarty模板中,使用`{paginate}`插件生成分页链接。它会自动处理上一页、下一页、第一页和最后一页的链接,以及当前页的页码。例如: ``` {paginate} {if $pagination.prev_page} $...
2. 数据缓存:为提高效率,可以将获取的城市数据进行缓存,避免每次生成页面时都进行数据库查询。 四、优化与扩展 1. 并行处理:如果城市数量庞大,可以考虑使用多线程或多进程并行生成,以减少整体耗时。 2. 异步...
Action层通常处理用户请求,DAO(数据访问对象)层负责与数据库交互,Entity层存储业务对象,Page层则可能涉及视图渲染。 4. **Action层**:Action层是业务逻辑的入口,它接收用户的请求,调用相应的服务或DAO进行...
通过理解并熟练运用这些知识点,你可以更好地利用Smarty模板引擎来构建高效且易于维护的Web应用。在实际开发中,不断实践和优化你的模板代码,你会发现Smarty不仅简化了HTML和PHP的交互,也为代码的组织和复用提供了...
在PHP中,这通常意味着可以利用Adodb的扩展来生成图表、图片处理或者在数据库中存储和检索图像数据。 Smarty是一个流行的PHP模板引擎,它的主要作用是将业务逻辑和视图设计分离。使用Smarty,开发者可以编写干净、...
- 接下来利用Smarty模板引擎动态生成邮件内容,并通过`addslashes()`函数对特殊字符进行转义处理,确保安全地插入数据库。 - 最后,将邮件内容和相关信息插入到邮件发送列表表(`email_sendlist`)中,并在用户...
- **View**:负责展示数据,这里可能是使用Smarty模板来生成HTML页面。 - **Controller**:处理用户请求,调用Model进行数据操作,然后更新View。 总结来说,这个项目展示了如何通过引入缓存技术和改进数据库连接...