MVC框架复习
定义常量APP_NAMEadmin和home来区分入口。
define('APP_NAME','admin/');
require('init.PHP');
·init.PHP
定义ROOT_PATH常量,调用str_replace('','','');
用isset判断获得参数,当参数不为空时,参数为空入口分别为admin、index时分别定义类名,进入相应的xxxController.class.PHP
同时判断Action参数并进入相应的xxxAction()函数执行命令
调用__autoload()自动加载函数接受参数$class_name,
调用strpos判断类名所包含的的是控制类还是模型类或者smarty类并逐步加载各文件。
·xxxController.class.PHP
短路算法:defined('APP_NAME')ordie('非法访问');
继承父类baseController(用类的方法实例化smarty并配置smarty)
执行xxxAction控制Model执行连接数据库进行数据处理,接收Model返回值,并控制view/smarty显示出Model返回的数据
·xxxModel.class.PHP
执行sql语句进行增删改查并且return一个数据让controller接收。
·baseController.class.PHP
<?PHP
//短路算法(||或运算,如果前面为真,后面就不知行;否则执行)
defined("APP_NAME")||die("非法访问");
classbaseController{
protected$smarty;//我们先定义类的属性,让他来保存实例化的对象
publicfunction__construct(){
$this->initSmarty();
}
privatefunctioninitSmarty(){
requireROOT_PATH."plugins/smarty/smarty.class.PHP";
$this->smarty=newSmarty();
$this->smarty->template_dir=ROOT_PATH."views/".APP_NAME;
$this->smarty->compile_dir=ROOT_PATH."data/template_c";
$this->smarty->left_delimiter="<{";
$this->smarty->right_delimiter="}>";
}
}
·baseModel.class.PHP
<?PHP
classbaseModel{
private$host;
private$user;
private$pass;
private$dbname;
publicfunction__construct($host,$user,$pass,$dbname){
//将参数保存到对象的属性上
$this->host=$host;
$this->user=$user;
$this->pass=$pass;
$this->dbname=$dbname;
$this->connect();
}
privatefunctionconnect(){
MysqL_connect($this->host,$this->user,$this->pass);
MysqL_select_db($this->dbname);
MysqL_query("setnamesutf8");
}
}
Ajax加强
·<script>
functionvalidate(){
//获得ajaxXMLHttpRequest对象(由于浏览器兼容性)
varxhr;//理解成打开浏览器
if(window.ActiveXObject){//这是IE浏览器的
xhr=newActiveXObject();
}elseif(window.XMLHttpRequest){//这里是火狐浏览器的
xhr=newXMLHttpRequest();
}
varusername=document.getElementById('username');
//open()方法有3个参数1,请求的方式;2,请求的url,3,是否为异步请求
varurl="index.PHP?c=user&a=ajax_check&time="+newData().getTime()+"&username="+username.value;//这个请求的地址是服务器端的地址
xhr.open("GET",url,true);//打开地址栏
xhr.onreadystatechange=callback;//监视请求的状态的
xhr.send();
functioncallback(){
if(xhr.readyState==4){//表示请求已经完成
if(xhr.status==200){//表示请求成功
//获得服务器响应的数据
//alert(xhr.responseText);
if(xhr.responseText){
}else{
alert("用户名可以使用");
}
}
}
}
}
</script>
搜索建议
·AJAX步骤
1,varxhr;
if(window.ActiveXObject){
xhr=newActiveXObject('Microsoft.XMLHTTP');
}elseif(window.XMLHttpRequest){
xhr=newXMLHttpRequest();
}
2,url='';
3,xhr.open('POST',true);
4,xhr.onreadystatechange=callback;
functioncallback(){
if(xhr.readyState==4){
if(xhr.status==200){
获取xhr.responseText;
}
}
}
5,xhr.send('一个值');
·显示详细信息在标签中调用onmouSEOver=‘showDetail(《{$value.user_id}》)’方法
send()POST方式时屏蔽乱码语句:xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
PHP中json_encode();方法将数组转化成json格式的字符串,Js中eval('('+转化过来的字符串+')');来将字符串转化成json对象
·百度词条搜索建议:$sql="select*fromuserwhereusernamelike'$data%'";
建议div隐藏方法:init(){
document.getElementById('dv').style.display='none';
}
三级联动
MysqL_connect('localhost','root','');
MysqL_select_db("china");
MysqL_query("setnamesutf8");
$val=$_POST['val'];
$table=$_POST['table'];
if($table=='t_province'){
//查询所有的省
$sql="selectProNamefrom$tableorderbyProSort";
$rows=array();
while($row=MysqL_fetch_row($result)){
echo"<option>$row[0]</option>";
}
}elseif($table=='t_city'){
//已知ProName查询对应的市的名字
$sql="selectCityNamefromt_citywhereProID=(selectProIDfromt_provincewhereProName='$val')";
$rows=array();
while($row=MysqL_fetch_row($result)){
echo"<option>$row[0]</option>";
}
}elseif($table=='t_district'){
//已知CityName查询对应的县的名字
$sql="selectDisNamefromt_districtwhereCityID=(selectCityIDfromt_citywhereCityName='$val')";
$rows=array();
while($row=MysqL_fetch_row($result)){
echo"<option>$row[0]</option>";
}
}
仍在完善中
·实例化xhr=newActiveXObject(‘Microsoft.XMLHTTP’)、newXMLHttpRequest();
·设置urlindex.PHP?c=fenye&a=process
·开启协议传输xhr.open('send',true);
·设置POST乱码编正xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
·开启监听并且在响应状态调用回调函数xhr.onreadystatechange=callback;
·开启sendsend('page='+page);
·判断状态if(xhr.readyState==4){
if(xhr.status==200){
开始处理语句~~varjson=eval('('+xhr.responseText+')');
varresult=eval('('+json[1]+')');
document.getElementById('item').innerHTML=json[0];
for(vari=0;i<result.length;i++){
vartrs=document.createElement('tr');
for(varj=0;j<7;j++){
vartds=document.createElement('td');
tds.innerHTML=result[i][j];
document.getElementById('tables').appendChild(trs);
trs.appendChild(tds);
}
}
·controller接收并且调用processAction函数
·在函数中接收page参数
连接数据库
设置pagesize
在数据库调用getTotal()函数,处理数据返回总条数totalrows
求出总页数pages=ceil(totalrows除以pagesize)
求出偏移量offset=pagesize乘以page-1
设置首页first=1前一页prev=page-1设置prev》0
下一页next=page+1判断if($next<$pages){
$next=$page+1;
}else{
$next=$pages;
}
$last=$pages;
输出字符串
$str='<FONTcolor="red">第'.$page.'页/总'.$pages.'页|总'.$total_rows.'条</FONT><aonclick="viewpage('.$first.')"href="#">首页</a>
<aonclick="viewpage('.$prev.')"href="#">上页</a>
<aonclick="viewpage('.$next.')"href="#">下页</a>
<aonclick="viewpage('.$last.')"href="#">尾页</a>';
·调用数据模型的getPage(offset,pagesize)函数
publicfunctiongetPage($offset,$pagesize){
$sql="select*frombooklimit$offset,$pagesize";
$rows=array();
while($row=MysqL_fetch_array($result)){
$rows[]=$row;
}
return$rows;
}
·在controller中接收数据调用json_encode()转化接收的数组成json格式的字符串
将str和json_encode(pageInfo)放入一个数组
·在模板脚本接收eval(‘(’+xhr.responseText+‘)’)
并运用DOM方法给模板赋值~
Ajax局部动态更新数据
原文链接:https://www.f2er.com/ajax/166578.html