`
nightkidzxc
  • 浏览: 10963 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

PHP笔记

 
阅读更多
PHP
echo 变量使用$ 换行<br />
empty($v1);判断是否为空
isset($v1);是否创建了变量
unset($v1);释放变量
var_dump();查看变量类型
变量的地址赋值 $b=&$a;
$number=0123;八进制
$xnumber=oxff;十六


bcadd(); 进行字符串(长数字)的运算 参见手册bc math方法
$i='5465146456655645.4512357';
$j='8787485256131465.4536461';
echo bcadd($i,$j,7);


单引号里不解析转义字符
双引号可以解析变量
$str=<<<EOT blablablablalblalblablablalblalblablalblalblablablablabal EOT;
数组 $array=array("a","b","c"); print_r($array); var_dump($array);
注意区别javascript var a=new Array();




创建类
class Person{
public function show() {
echo 'blablabla';
}
}


变量不声明 默认值为null


类型转换函数 $abc=intval($abc);floatval();strval();
settype($abc,"integer");


php获得用户输入 传递参数 $_GET['x'] 在地址栏里后?x=101&y=98;


$b = &$a;//地址赋值


PHP中函数不能引用全局变量 若用 必须在函数内声明 global $i;然后才能引用
定义常量 define('STOP_COUNT',"hello") 前者为常量名 后为值
预定义常量 _FILE_ 当前的 文件名
_LINE_ 当前的代码所在行数
PHP_OS操作系统名 PHP_VERSION PHP的版本
TRUE|FALSE|NULL true false null的值
E_ERROR
可变长度参数数组 func_get_args();
引用不在同一文件下的 PHP文件 include
print_r($a);输出变量易于理解的信息


rand(int min,int max);
decbin('12');十进制转二进制
bindec('111');二进制转十进制
date("Y-m-d H:m:s",time());当前时间
date_default_timezone_set("Etc/GMT-8");




定义数组 $arr=array(1,54,123,"abc",true);
或者 单个元素赋值 $con[0]=12;$con[1]=12;$con[2]=12;
输出数组 print_r($con);


不指定下标的数组赋值,自动为下标自增


php中数组的下标可以是字符串,$contact4=array("id"=>12,"name"=>'tom',"age"=>12,"email"=>"zxc@126.com");
此时遍历用foreach
foreach($arrayname as $key=>$val)
echo $key." ".$val."<br />";


用字符串下标定义二维数组
$contact2=array(
array("id"=>1,"name"=>"tom","age"=12,"email"=>'tom@tom.com'),
array("id"=>2,"name"=>"tom1","age"=13,"email"=>'tom1@tom.com'),
array("id"=>3,"name"=>"tom2","age"=14,"email"=>'tom2@tom.com'),
); //默认元素下标为0,1,2的元素也为一个数组


$contact3=array(
"北京"=>array("id"=>1,"name"=>"tom","age"=12,"email"=>'tom@tom.com'),
"天津"=>array("id"=>2,"name"=>"tom1","age"=13,"email"=>'tom1@tom.com'),
"上海"=>array("id"=>3,"name"=>"tom2","age"=14,"email"=>'tom2@tom.com'),
);//下标为北京 天津 上海的元素也是数组


数组的each函数 指针
$contact32=array('id'=>5,'name'=>'tom','age'=>12);
$in=each($contact32);
echo $in[0]; //此时$in为一个数组,$in[0]为'id' $in[1]为5


list函数
$array1=array("awawa","abb","acc");
list($color,$set,$animal)=$array1;//这样三个变量就复制了上面数组中的元素






$_SERVER
$_ENV
$_GET 提交的信息显示在URL后面,安全性低 三种方式用FORM的SUBMIT 超链接 手工改变URL栏
$_REQUEST
$_FILES
$_COOKIE
$_SESSION


数组函数
in_array(value,$array);是否存在值,返回TRUE FALSE in_array(value,$array,true);严格匹配
array_search(value,$array);返回下标
array_values($array);返回数组的值
array_keys($array);返回数组的键
array_key_exists(key,$arr);是否存在键
array_filter($array,"functionname"); 挨个元素进行functionname返回TRUE时 则把这个元素放入返回的新数组中
usort($arr,'mySort'); mysort($i,$j) 返回1,0,-1值的情况
array_slice($arr,start,num);
array_combine($arr1,$arr2);结合,以$arr1中的元素作为下标 $arr2中的元素作为值
array_merge($arr1,$arr2);去掉重复项合并
array_intersect($11,$12);取交集
array_diff($11,$12);取两个数组的差集


array_rand($arr,n);随机取n个元素的下标
shuffle($arr);随机排序
array_sum($arr);求和
$number=range(0,50,10);自动创建数组 初始值为0,<=50,一次递增10




面向对象
创建类
class Car{
public $name;
public $age;
public function getName(){
return $this->name;
}
}


$car1=new Car();
$car1->name='BMW7'; //类里的对象赋值
$car1->age='10';


echo $car1->getName().'<br />';


引用类中属性 $this->name


构造方法 对象创建时候自动调用的方法 __construct 创建对象时$s1=new Student($a,$b);的参数$a,$b就是__consturct的参数
析构方法 对象销毁时候自动调用的方法 __destruct


private私有的变量只有自己类的函数才能调用,而不能直接$st1->age=15;这样引用 除非对__set函数进行改造才行,实际上也是使用函数进行调用
__set方法可以
class ctest{
public $name;
private $age;
private $sex;


private function __set($proName,$proVal){
if('sex'==$proName)
{if(!($proVal=='男'||$proVal=='女'))
return;}
if($proName=='age')
{
if($proVal<=0||$proVal>150)
return;
}
$this->$proName=$proVal;
echo "aaa";
}


}


$st1->age=20;


继承(php不支持多继承,但可以用连环继承实现)
单继承
子类中不能访问到父类中的私有属性
class Son extends Father{}


private 同一个类能访问 protected 同一个类及子类能访问 public 以及外部都能访问
可放在属性,方法,构造方法前面


子类可以重写覆盖父类的方法,如果重写了还想调用父类方法,用parent::show();


常见关键字 final static const
final写在方法前使方法不能被覆盖,写在类前不能被继承


static属性 一般的属性归属于成员,而STATIC属性归属于类,类似于全局变量
在引用static 属性时用 在外引用用 className::$staticName的格式 自身的函数引用时用self::$staticName格式


规定类中的常量 const AAA="php";不能改变的,引用时也 A::AAA;或者self::AAA;
类似于静态变量的引用,但是注意不是变量,不用$


__clone()
__toString() 在echo时,要输出的内容不是string就会自动调用__toString()方法
__call($a,$args) 调用方法时默认调用


引用同一文件目录下的php文件用 include "user.php";


function __autoload($className){//如果引用的类不存在,自动到classes文件夹下引用$className.class.php文件
include('classes/'.$className.'.class.php');
}


把对象序列化并储存在文件中
$a=new User();
$b=serialize($a); //把$a序列化后赋给$b
file_put_contents("bfile.txt",$b);//把$b存储在当前目录下的bfile.txt文件中
反序列化
$a=file_get_contents("file.txt");//从file.txt中取出已经序列化的对象赋值给$a
$b=unserialize($a);//把取出的对象反序列化后赋值给$b,此时$b就是一个正常对象了,可以正常使用


抽象类(不能实例化,用来让别的类来继承)
abstract class Person{
abstract function language();
abstract function sport();

}


接口interface 其中所有的属性都是常量 所有的方法都是抽象方法,可以多继承
interface A{}
interface B{}
interface C extends A,B{}//接口的多继承


interface Animal{
function run();//函授都是抽象的
function sleep();
const STOP=TRUE;//属性都是常量
const RUN=false;
}


class Cat implements Animal{ //类继承接口用关键字 implements
function run(){
echo '跑得快';
}
function sleep(){
echo '睡得香';
}
function show(){ //因为是常量,所以输出时用self::STOP;
echo self::STOP;
echo self::RUN;
}
}
多态
比如两个继承自同一类的两个类,引用各自的方法而名字相同时,会自动由是谁的成员来判定用哪一个




printf()输出方式
printf("%s book,page number %u <br />",$str,$number);//类似C
printf("%0.3f<br />",$number);
$format="The %2\$s book contains %1\$d pages.That's a nice %2\$s full of %1\$d pages.<br />";
printf($format,$number,$str);
$num=1234;
$txt=sprintf("%d0.2abcf",$num);
echo $txt;




str_pad();
<?php
$input = "Alien";
echo str_pad($input, 10); // produces "Alien "
echo str_pad($input, 10, "-=", STR_PAD_LEFT); // produces "-=-=-Alien"
echo str_pad($input, 10, "_", STR_PAD_BOTH); // produces "__Alien___"
echo str_pad($input, 6 , "___"); // produces "Alien_"
?>


ucfirst() //首字符大写
ucwords() //各种首字符都大写
ul2br() //使\n在php中能实现换行功能
htmlentities($str); //把str中的html标签都转换为&特殊符形式 比如<转为&lt >为&gt


单子模式(单例模式)
构造方法设置为私有__construct() 不能在外new
把其中一个私有属性在自己的方法内new为对象(如果这个私有属性为空,则NEW,不为空则跳过,就只能设定一个了)


ord($a);返回其ASCII码值
ord($a)<128 说明为ASCII码
chr(97) 把ASCII码对应的值显示出来


echo (char(192).char(128));显示gb编码的汉字




function isUTF8orGBK($s){
if((ord($s[0])&224)==224){ //UTF8汉字由三个字节组成,第一个字节为111*****开始
if((ord($s[1])&128)==128){//第二个字节由1*******开始
if((ord($s[2])&128)==128){//第三个字节由1*******开始
return 'UTF-8';
}
}
}


if((ord($s[0])&192)==192){ //GBK由两个字节组成,第一个字节为11******开始
if((ord($s[1])&128)==128){ //第二个字节以1*******开始
return "GBK";
}


}
return NULL;
}


mb_detect_encoding($var);
$rs=iconv("GBK","UTF-8",$text);把$text从GBK转换为UTF-8格式
mb_convert_encoding($str,'UTF-8','gb2312');
strlen($s);//中文算两位,配套substr($s,4,2)使用
mb_strlen($s,'gb2312');//中文算一位,配套mb_substr($s,5,2,'gb2312')


PHP的正则表达式
echo preg_match("/php/i","PHP is the web Php");//i表示不区分大小写,返回值为int值表示找到匹配的个数
echo preg_match_all("/php/i","PHP is the web pHp",$out);//全局寻找匹配,参数$out为数组,存储符合的值内容
/^cow/ /^c.w/ .表示一个任意字符
分割
$str="++tom+++++当当++++丁丁+++北大";
$fields=preg_split("/\+{1,}/",$str);//分割存储在数组中
foreach($fields as $f){
echo $f.'<br />';
}


$str="猪,TMD真热";
$key=array("/猪/","/tmd/");
$re=array("哎呀","太");
$s=preg_replace($key,$re,$str);//在str中找到符合$key的替换成$re


function bbcode_format($str){
$str = htmlentities($str);
$str = preg_replace('/\[b\](.*?)\[\/b\]/is','<strong>$1</strong>',$str); // (.*?)任意字符 *表示若干个,?表示惰性匹配,只匹配第一个
$str = preg_replace('/\[i\](.*?)\[\/i\]/is','<em>$1</em>',$str); //$1,第一个圆括号()匹配到的内容就是$1,第二个是$2
$str = preg_replace('/\[u\](.*?)\[\/u\]/is','<u>$1</u>',$str);
return $str;
}


sha1加密
base64_encode($str);//base64加密,可以保证中文传输不出错
base64_decode($str);


分割字符串
$str="活在天朝,就是选择了,hard模式";
$arr=explode(",",$str);


4月11日 错误处理,都写在页面开头
修改php.ini 中display_errors的属性来规定其是否显示错误
ini_get('display_errors');为On显示为1,Off显示为0
ini_set('display_errors',0);把值设置为0,关闭错误显示


也可以在一句话前加上 @ 来抑制这句话错误的报告


关闭错误报告 //与上面一样,都是为了让用户对错误不可见
error_reporting(0);//关闭错误报告
error_reporting(E_ALL);//报告所有的错误
error_reporting(E_ALL & ~E_NOTICE);//报告非注意错误
error_reporting(E_ALL ~(E_NOTICE|E_WARNING));


记录日志
if(!mysql_connect('localhost','root','wrongpwd'));
error_log('出错了...连接不成功',3,'d:/tools/wamp/logs/php_error.log'); //0表示送到操作系统日志中,1表示发送到某email,2表示TCP服务器,3表示保存在文件中


error_log("出错时间".date("Y-m-d H:i:s",time())."哪个文件".__FILE__."哪行".__LINE__."客户IP".$_SERVER['REMOTE_ADDR']."\r\n",3,'d:/tools/wamp/logs/php_errors.log');


抛出异常对象(捕获异常,使异常后面的代码能够执行)
$i=1;$i--;
try{
echo "start<br />";
if($i==0)
throw new Exception('出现异常啦!!!');
echo '不能被执行1<br />';
echo '不能被执行2<br />';
echo '不能被执行3<br />';
}
catch(Exception $e){
echo $e->getMessage();
}




异常类继承
class ApplicationException extends Exception{
public function __construct($message,$code=0){
parent::__construct($message,$code);
}
public function __toString(){
return __CLASS__.':['.$this->code.']'.$this->message.'<br />';
}
}


try{
throw new ApplicationException('程序异常');
}
catch(ApplicationException $e){
echo $e;
echo $e->getMessage();


}
catch(Exception $e){
echo '||'.$e;
}




时间mktime();//从1970年1月1日零点到现在的秒数
sleep(2);休眠两秒
$year=1991;$month=1;$day=5;
$birth=mktime($hour,$min,$second,$month,$day,$year);




日期
date("Y年m月d日");//当前日期
date("Y年m月d日",mktime()-(3600*24));//前一天


microtime();显示微秒


图形处理
$image=imagecreatetruecolor(100,100);//创建一个真彩色图像
$yellow=imagecolorallocate($image,255,255,0);//
imagefill($image,0,0,$yellow);
header('Content-type:image/png');
imagepng($image);
imagedestroy($image);


4月12日
验证码
header("content-type:image/jpeg");


$width=80;
$height=40;
$img=imagecreatetruecolor($width,$height);


$white=imagecolorallocate($img,255,255,255);
$red=imagecolorallocate($img,255,0,0);
$green=imagecolorallocate($img,0,255,0);


imagefill($img,0,0,$white);


for($i=0;$i<50;$i++)
imagesetpixel($img,mt_rand(1,$width),mt_rand(1,$height),$red);//加点


for($i=0;$i<4;$i++){
imagesetthickness ($img,mt_rand(1,4));
imageline($img,mt_rand(1,$width),mt_rand(1,$height),mt_rand(1,$width),mt_rand(1,$height),$green);//加线
}


for($i=0;$i<4;$i++){
imagesetthickness ($img,mt_rand(1,4));
imagearc($img,mt_rand(1,$width),mt_rand(1,$height),mt_rand(1,$width),mt_rand(1,$height),mt_rand(1,$width),mt_rand(1,$height),$green);//加弧线
}


imagestring($img,5,5,10,'abc123',$red);//加字


$str='中国银行'; //加汉字,要用utf-8编码
$str=iconv("gbk","utf-8","中");
imagettftext($img,17,10,12,25,$red,"simkai.ttf",$str);//简体中文楷体 (字体大小,倾斜度,X,Y,颜色,字体,字内容)
$str=iconv("gbk","utf-8","国");
imagettftext($img,13,20,26,25,$red,"simkai.ttf",$str);//简体中文楷体
$str=iconv("gbk","utf-8","银");
imagettftext($img,15,6,37,30,$red,"simkai.ttf",$str);//简体中文楷体
$str=iconv("gbk","utf-8","行");
imagettftext($img,12,8,48,20,$red,"simkai.ttf",$str);//简体中文楷体


水印
$pic=imagecreatetruecolor(200,100);
$black=imagecolorallocate($pic,0,0,0);
$white=imagecolorallocate($pic,255,255,255);
$font="simkai.ttf";
$str=iconv('gbk','utf-8','猫扑大杂烩');
imagettftext($pic,25,0,40,30,$white,$font,$str);


$filename='447.jpg';
//$filename2='11.jpg';
$im=imagecreatefromjpeg($filename);
//$im2=imagecreatefromjpeg($filename2);
//imagecopymerge($im,$im2,1100,800,0,0,250,30,50);
imagecopymerge($im,$pic,1100,800,0,0,250,30,50);
header("Content-type:image/jpeg");
imagejpeg($im);
ImageDestroy($im);


缩略图




上传图片
<form action="09_upload_do.php" method="post" enctype="multipart/form-data">
<input type="hidden" name="MAX_FILE_SIZE" value='1000000' />
选择文件<input type="file" name="myFile" /><br />
<input type="submit" value="up" />
</form>


文件系统 参数为file的时候要能指定路径 PHP才能识别
filetype($fileName);返回值为file或者dir
is_file($fileName) is_dir($fileName)
is_readable($fileName);is_writeable($fileName);is_executable($fileName);
filectime($fileName);//文件创建时间
filemtime($fileName);//文件最后修改时间
fileatime($fileName);//文件最后打开时间


filesize($fileName);//文件大小(字节)


basename($path);返回文件名与后缀
dirname($path);返回路径
$arr=pathinfo($path);//$arr['dirname']为路径 $arr['basename']为文件名与后缀 $arr['extension']后缀


opendir();//打开指定目录,存在返回资源,不存在返回false
readdir();//读取指定目录,指针移动第一个文件名尾
closedir();//关闭目录
rewinddir();//倒回目录句柄,指针移回头


一旦开始readdir($a)后 一定要记得关闭 closedir($a) 否则不能执行这个目录的删除操作


相对路径"file.txt" "./file.txt"一样
上一级目录下classes下的文件"../classes/2.php"


在windows或者unix下DIRECTORY_SEPARATOR都可代表不同的/


disk_free_space("C:")/1024/1024 空闲容量(字节)/1024平方得MB
disk_total_space("C:")/1024/1024 总容量(字节)/1024平方得MB


mkdir('111');创建一个目录 rmdir();删除一个空目录 unlink();删除文件


copy('1.jpg','2.jpg') 复制文件


写入文件(如果没有,创建一个)
$file='1.txt';
$handle=fopen($file,'w') or die('打开文件出错');
fwrite($handle,'qweqweqwe');
fclose($handle);




file_put_contents("4.txt",$data);








$file='1.txt';
$handle=fopen($file,'r');
$contents=fread($handle,4);//读取4个字节,若要全读,4换成filesize($file)
fclose($handle);
echo $contents;


读取图片
$file='1.jpg';
$handle=fopen($file,'r');
$data='';
while(!feof($handle)){
$data.=fread($handle,1024);
}
fclose($handle);
header('Content-type:image/jpeg');
echo $data;


file_get_contents($file);//可以读文本,不能读图


fgets();一次读一行




文件锁


文件上传(单上传,多上传)


无刷新上传(iframe,ajax)


下载


数据库处理
mysql_num_fields($result,$i);返回有几项 mysql_num_rows($result);返回有几行数据
mysql_affected_rows();


SQL注入攻击
' OR 1=1 #
php.ini 中magic_quotes_gpc=On 把'改为/'




php跳转
header('Location:main.php');
$_SESSION
session_start();
$_SESSION['message']=...;


mysqli 用类操作数据库
$result=$mysqli->query();
while($row=$result->fetch_assoc())
echo $row['id'].$row['name'];


$result=$mysqli->fetch_object();
while($ob=$result->fetch_object())
echo $ob->id.'|----|'.$ob->name;


事务处理
存储过程


SESSION COOKIES


setcookie('cookie111','100',time()+86400,'/'); //名字,值,过期时间,路径


COOKIE在客户端的浏览器中.要删除只要设置其过期时间为mktime()-1 即设置其过期就好
$_COOKIE是一个数组
可以两层MD5加密嵌套


session 存放在服务器系统下,所以关掉浏览器就失效
$_SESSION['id']为服务器为每个用户分配的ID
高版本的浏览器(FF,IE8)能认得一台电脑上两个页面上相同的用户
用session配合COOKIE来跟踪用户
如果用户禁用COOKIE 可以在所有的超链接上加
<a href="10.php?<?php echo session_name();?>=<?php echo session_id();?>">下一页</a>
当用户禁用COOKIE时 常量SID变自动为所需要的那一串代码
<a href="10.php?<?php echo SID?>">下一页</a>
销毁session unset($_SESSION['name']);
$_SESSION=array();
session_destory();




onclick事件只能调用javascript方法






XML
<?xml version="1.0" encoding="gbk" ?>
一个XML有且只有一个根元素
&lt; < &gt; > &amp; & &quot; " &apos; '
<![CDATA[你好 100.0 ]] > 方括号的内容就可以忽略是否需要转义任意显示了
甚至能添加CSS样式....<?xml-stylesheet type="text/css" href="my.css"?>


增加一句 <!DOCTYPE 班级 SYSTEM "my.dtd">使XML按照my.dtd规定的格式来
DTD规格如下,必须用UTF-8编码
<!ELEMENT 班级(学生+)>
<!ELEMENT 学生(名字,年龄,介绍)>
<!LEMENTT 名字 (#PCDATA)>
<!LEMENTT 年龄 (#PCDATA)>
<!LEMENTT 介绍 (#PCDATA)>


校验IE中的XML 用javascript写的
<script type="text/javascript">
function check(){
var xml=new ActiveXObject("Microsoft.XMLDOM");
xml.validateOnParse="true";
xml.load("5.xml");
alert(xml.parseError.reason);
alert(xml.parseError.line);
check();
}
</script>


XML的作用
相当于一个小型的数据库
xml异构系统数据库的交互(如不同语言编写的程序之间交互)
xml可以做作配置文件


外部DTD文件 内部DTD文件 写完name后面一定要加个空格
<!ELEMENT name (#PCDATA)> 必须放的是PCDATA
<!ELEMENT name EMPTY> <name content="abc" />
<!ELEMENT name ANY> 里面放啥都行(可以放上述定义过的任意标签)


<!ELEMENT books (book+)> 至少一本书
<!ELEMENT book (author+,title,content)> ()内表示按顺序来 |表示或者
(ID|CDATA|IDREFS|(男|女)) (#REQUIRED|#IMPLIED|#FIXED "oracle")
标签名 标签属性名 属性数据类型 可选方式(必选,可选)
<!ATTLIST name id ID #REQUIRED //ID表示唯一,不以数字开头命名
type CDATA #REQUIRED> //REQUIRED表示必须








通过PHP语言操作XML文件
获得元素
$xml=new SimpleXMLElement('1.xml',null,true);
或者$xml=new SimpleXML_load_string('1.xml');
$xml->getName();
$xml->children();
$xml->book[0]->attributes();//获得book[0]里的属性集
$xml->book[0]->price;//获得第一个BOOK下的price标签的内容
$xml->book[0]->name['id'];//获得第一个BOOK的name标签的id属性
$xml->book[0]['id'];
或者
$string=<<<XML
<books>
<book>
<name>1</name>
<author>22</author>
</book>
</books>
XML;
$xml=SimpleXML_load_string($string);


新增元素
$s1=$xml->addChild("book");
$sname=$s1->addChild("name","ajax大全");
$sname->addAttribute("id","a1");
直接通过book['3']下标来操作修改
$xml->xpath("/a/b/c"); /AAA找到根节点 /AAA/CCC找到根节点下的CCC /AAA/DDD/BBB根节点下的DDD下的BBB
//BBB找到所有的BBB //DDD/BBB所有的DDD下的BBB /AAA/CCC/DDD/*找到DDD下所有的结点
/*/*/*/BBB 所有有三个祖先的BBB //* 所有元素 /AAA/BBB[1] AAA下的第一个BBB /AAA/BBB[last()] AAA下最后一个BBB
//@id 所有有id属性的元素 //BBB[@id]选择有id属性的BBB元素 //BBB[@*]有任何属性的BBB //BBB[not(@*)]所有没有属性的BBB

由于XML只能储存UTF-8 直接修改中文时要iconv("gbk","utf-8","编程思想")






Schema XML Schema Definition XSD
与DTD引用方式不太一样
<?xml version="1.0"?>


<books
xmlns:"http://www.w3school.com.cn"
xmlns:xsi:="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3school.com.cn somefile.xsd">//somefile.xsd为要引用的schema标准文件
<book>
<name></name>
<price></price>
</book>
</books>
与DTD定义方式不太一样,头尾是固定格式


<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3school.com.cn"
xmlns="http://www.w3school.com.cn"
elementFormDefault="qualified">


%s //这个部分为SCHEMA的规范格式


</xs:schema>




%s格式举例
<xs:element name="book">
<xs:complexType>
<xs:sequence> //此处还可以规定xs:string xs:decimal xs:integer xs:boolean xs:date xs:time
<xs:element name="name" type="xs:string" />
<xs:element name="price" type="xs:string" />
<xs:element name="author" type="xs:string" />
</xs:sequence>
</xs:complexType>


DOM方式解析XML全部读取
SAX方式可以按照要求提取一部分
$xml=xml_parser_create("UTF-8");


xml_set_element_handler($xml,'start_handler','end_handler');


xml_set_character_data_handler($xml,'character_handler');










AJAX
局部刷新页面
界面美观


1.创建xmlhttprequest对象
if(window.XMLHttpRequest) //IE 7及以上
var xhr=new XMLHttpRequest();
else var xhr =new ActiveXObject('Microsoft.XMLHTTP');//IE 6




2.准备好发送的请求url地址和参数
var url='ajaxlogincheck.php?username='+u.value;




3.定义处理返回结果的方法
xhr.onreadystatechange=result; //result是一个函数,在下面定义过了




4.发送请求
xhr.open("get",url+"&t="+Math.random(),true);//打开链接
xhr.send(null);//发送请求


5.接受服务器返回结果
if(xhr.readyState==4 && xhr.status===200){
document.getElementById("state").innerHTML=xhr.responseText;
}
或者返回的是XML格式 xhr.responseXML;
此时返回结果的PHP文件里要加标头
header("Content-Type=text/xml;charset=gbk");//注意 要标明 text/xml !!!




6.判断状态xmlhttprequest(接受完成)
7.判断状态 http
8.接受返回结果 (xml/text两种)
9.显示


显示中文表头为(注意 是冒号)
header("Content-Type: text/html;charset=GBK");


btn.onclick=function() //onclick 全都小写


写javascript的时候就直接写<script></script>就行了


用ajax实现省市县三级联动(用ajax时接受xml方式的返回结果)
1.显示页面发送一个请求到数据页面 附带province的值
2.数据页面判断province的值echo 不同的xml文件(即各个省的城市:如$city="<root><city>郑州</city><city>洛阳</city></root>")
3.接受返回结果 var xml=xhr.responseXML; 此时$xml为一个xml对象
4.var cities=xml.getElementByTagName("city"); 此时cities为一个元素集合
5.其中郑州,洛阳为 cities[0].firstChild.data cities[1].firstChild.data
6.把上述数据加载到city的select中 用document.getElementById("city").options[1]=new Option("郑州",1);的格式添加选项




ECLIPSE设置环境变量
环境变量JAVA_HOME
PATH里再加个java/bin


三个范式
取消重复列
取消部分依赖
取消传递依赖


EXPLAIN select * from t_user where id=7;


cvs subversion [版本控制]
多人开发同一个项目 cvs控制不同版本


具体项目实例
仿博客系统
新建各种文件夹来分类


session_cache_limiter('private,must-revalidate');


mail方法发送邮件


邮件类库发送


上传文件
<form action="upload_do.php" method="post" enctype="multipart/form-data">
<input type="hidden" name="MAX_FILE_SIZE" value='1000000' />
<input type="hidden" value="create" name="action" />
<input type="hidden" value="<?php echo $_GET['id']?>" name="id" />
<dd><input type="file" value="" name="myFile" /></dd>
过滤不符合要求的格式
list($maintype,$subtype) = explode('/',$_FILES['myFile']['type']);
//echo $maintype.'|'.$subtype.'<br />';




//application
if($maintype=='text'){
echo '不能上传文本文件<br />';
exit;
}




JQuery
JS框架之一 javascript类库 最流行的 还有EXT JS等


$(document).ready(function(){alert("OK")});


基本选择器
单个选中ID $("#id") 等价于 document.getElementById("id");
标签选择 $("tagname") 等价于 document.getElementsByTagName("tagname");
使用jquery对象找不到值或对象时不会报错


class选择 $(".sp1"); //<div class="sp1">
全选 $("*")
选多个 $("div,span,input")


循环 $(".sp1").each( function(i){ alert( $(this)+"---"+i ) } );


css $("#adiv").css("background","red");


层次选择器
$("body div") 匹配body以下所有的div元素(无论儿子,孙子,什么关系)
$("body>div") 匹配body的儿子元素
$("#one+div") 匹配id为one元素后面的 紧跟的 第一个 同辈儿 div元素
$("#one~div") 匹配id为one元素后面的 所有 同辈儿的 div元素
$("#one").sibling("div") 匹配id为one元素 不论前后的所有同辈儿div元素


过滤选择器 (都是以:开头)
$("tr:first") 选择第一个tr
$("tr:last") 选择最后一个tr
$("tr:even") 选择偶数tr
$("tr:odd") 选择奇数tr
$("tr:eq(0)") 选择第一个匹配的tr (0为索引值)
$("tr:gt(3)") 选择比索引值为3大的tr
$("tr:lt(3)") 选择比索引值为3小的tr
$(":header").css("background", "#EEE") 匹配h1 h2 h3之类标题元素 固定格式
$(":animated").css("background", "#EEE") 匹配正在执行的动画元素
$("div:contains('abc')") 含有abc的所有div
$("div:has("p")") 含有P标签的div $("div:has(.mini)") 含有class为mini元素的div
$("div:empty") 无子元素的div
$("div:parent") 有子元素的div




toggle方法(点击一次执行括号里的函数fn1,fn2,fn3)等 click的增强版


animate动画
function(){
$(".content").animate( //animate( {css} ,1500); 前面写要变成的css样式,后面写多久完成
{
width:"90%", //注意90%要加“”,后面的符号是 ,
height:"1000px" //后不加符号
},1500);
}




属性选择器
$("div[id]") 有id的div
$("div[id='one']") id为one
$("div[id^='te']") id以te开头
$("div[id$='st']") id以st结尾
$("div[id*='es']") id中包含es的
$("div[id][title*="es"]") 多重属性符合选择 包含id并且title中有es的




子元素选择器 “-”是代表符号
$(".one:nth-child(2)") class为one的元素的第 二 个子元素
$(".one:first-child") class为one的元素第 一 个子元素
$(".one:last-child") class为one的元素最后一个元素
$(".one:only-child") class为one 如果只有一个子元素则匹配


nth-child(even/odd/2/3n/3n+1) 3n为3的倍数 3n+1为3n+1


表单选择器
$("input:checked")
$("select option:selected")


smarty分离业务逻辑和现实逻辑
安装smarty
解压后复制libs到目录下
创建一个templates文件夹和templates_c文件夹


在index.php中
每次饮用require其中的smarty.class.php
声明一个smarty类


{$person->name} //类对象的name属性
{$contact.phone.home} //数组contact的phone数组的home
{$smarty.get.page} //$_GET['page']
{$smarty.post.page} //$_POST['page']
{$smarty.session.id} //$_SESSION['id']
{$smarty.server.SERVER_NAME} //$_server['SERVER_NAME']


{if $color eq 'red'}
是红色的
{elseif $color eq 'white'}
{else}
{/if}


{if $age===12 || $color==="white"}
白色12岁
{/if}


{foreach from=$contact item=row}
{foreach from=$row item=col key=key}
{$key}=>{$col}<br />
</foreach>
</foreach>


{section loop=$contact name=line}
{$contact[line].name}<br />
{$contact[line].sex}<br />
{$contact[line].add}<br />


smarty给页面生命周期 页面静态化
$smarty->caching=true;
$smarty->cache_dir='./cache';
$smarty->cache_lifetime=60*60*24;




解析当当项目
引入styles文件夹,images文件夹
引入index.php
发现有require_once 'lib/config.inc.php'
//新建lib文件夹,引入config.inc.php 其中有连接数据库的参数,项目基准路径,进行更改
//config还有require_once $gBaseDir.'lib/smarty_cms.inc.php' 引入之是一个扩展smarty的继承类(需要include原类),根据几个路径在lib/smarty/新建templates templates_c configs cache文件夹,并且赋值app_name为当当
$oSmarty->display($gTemplatePath."index.html");
//声明oSmarty为SmartyCMS的对象 其display为利用模板("一堆路径/index.html") //所以此处引入所有的模板,新建templates文件夹,引入各种静态页面html模板
index.php生效


引入login.php,regUser.php,car.php,orderInfo.php,affirmOrder.php生效
简单复制剩下的页面bookDetail.php bookLists.php testPage.php都生效


要把页面写活 对数据库信息操作 要写各种控制数据库的方法和显示页面的方法,在lib下新建没有mysql_db.php 和 dangdangService.php两个方法引用文件
mysql_db.php文件 用一个类来
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics