1.PHP环境的搭配
安装WampServer 5
开发工具:easyeclipse(推荐)
书写和调用:<? . . . ?> <?php . . . ?>
注释:
// ……….
$a=1; $a+=2; $a*=3;
3.比较运算:用来确定两个数之间的关系.
1==2 3!=2 5<3 "ok"=="ok" 1==='1'
4.逻辑运算:先将比较的两边转换成布尔类型,再执行他们的关系.
1 && 1 0 && 1 1 || 1 1 || 0
5.递增递减运算:只操作变量的一种运算.
$a++ ++$a $a-- --$a
4.PHP条件语句
if(expr) { echo TRUE }else{ echo FALSE }
if(expr) { echo TRUE } elseif(expr) { echo CON }else{ echo FALSE }
2.switch 条件语句
switch ($i) { case 0: echo "输出 0"; break; case 1: echo "输出 1"; break; case 2: echo "输出 2"; break; }
5.PHP循环语句
do{ …… } while(expr)
while(expr){ …… }
for ($i = 1; $i <= 10; $i++) { echo $i; }
$arr = array (3,5,7,9,6); $arr = array ("id"=>2,"title"=>3);
使用count 函数统计数组条数 count ( $arr ); 使用is_array函数判断数组 is_array ( $arr );
另一种创建数组的函数explode explode( "key" , value);
foreach ( $arr as $key => $value ){ …… }
7.PHP函数
Function func_name($val){ …… }
使用 unset($var)删除一个变量
使用return 函数返回函数内部值
function_exists() 判断函数是否存在
8.Mysql 简介和创建
数据库中常用字段类型:
整数型:TINYINT,SMALLINT,INT,BIGINT
小数型:FLOAT,DOUBLE,DECIMAL(M,D)
字符型:CHAR,VARCHAR
日期型:DATETIME ,DATE,TIMESTAMP
备注型:TINYTEXT ,TEXT ,LONGTEXT
创建一个数据库命令:CREATE TABLE
删除一个数据库命令:DROP TABLE
修改一个字段名称:RENAME TABLE `原字段` TO `新字段`
删除一个字段: ALTER TABLE `表` DROP `原字段`
插入一个字段: ALTER TABLE `表` ADD `新字段` … AFTER `原字段`
例如:
CREATE TABLE `test` ( `id` int(10) NOT NULL auto_increment, `uid` varchar(10) NOT NULL default '0', `regdate` date NOT NULL, `remark` text NULL, PRIMARY KEY (`id`) )
9.数据库中的常用SQL语句
SELECT 查询字段 FROM 表名 WHERE 条件
查询字段:可以使用通配符* 、字段名、字段别名
表名: 数据库.表名 ,表名
常用条件: = 等于 、<>不等于、in 包含 、 not in 不包含、 like 匹配
BETWEEN 在范围 、 not BETWEEN 不在范围 < 、>
条件运算: and 、 or 、 ( )
分组语句:group by 字段
排序语句:order by 字段,字段 ASC / DESC
指针查询:limit 初始值,结束值
计算:
COUNT(*) 统计函数
MAX(*) 最大值函数
MIN (*) 最小值函数
AVG(*) 平均值函数
SUM(*) 累计值函数(∑)
insert into 表名 (字段…,…) values(值…,…) insert into 表名 values(值…,…)
插入时须考虑清楚字段类型避免插入后出现缺值,乱码现象
Update 更新语句
UPDATE 表名 SET 字段 = 值 WHERE 条件 limit
Delete 删除语句
DELETE FROM 表名 WHERE 条件 limit
10.MYSQL在PHP5中的应用
php.ini 加载mysql组件:
extension=php_mysql.dll 前的; 去掉
extension_dir = " " 路径是否正确
PHP链接mysql函数
mysql_connect("主机", "用户名", "密码") mysql_select_db("打开数据库",连接标识符);
执行一个SQL语句
mysql_query (SQL语句 ,连接标识符);
成功后返回一个结果标识符,失败时返回false。
两种查询函数array / row区别:
mysql_fetch_row(result);
mysql_fetch_row用来查询结果的一行保存至数组,该数组下标从0开始,每一个数组元素对应
一个域。通过循环,可以将查询结果全部获得。
mysql_fetch_array(result);
mysql_fetch_array和mysql_fetch_row功能基本相同,只不过它除了可以用从0开始的偏移量作
索引,还可以用域名作索引。
mysql_query("set names 'GBK'"); 解决中文乱码
其他常用Mysql函数介绍
mysql_num_rows 用于计算查询结果中所得行的数目
mysql_insert_id 传回最后一次使用 INSERT 指令的 ID。
mysql_tablename 取得数据库名称
mysql_error 返回错误信息
mysql_close 关闭 MySQL 链接
11PHP+MYSQL留言板
PHP里的页面相互调用
require() 与 require_once()-同一个文件只读取一次
通常放在 PHP 程序的最前面,PHP 程序在执行前,就会先读入 require
所指定引入的文件,如果出现错误是致命的。
include() 与 include_once()-同一个文件只读取一次
可以放在 PHP 程序的任何一个位置,PHP 程序在执行到时,才会先读入
include 所指定引入的文件,如果出现错误将会提示。
如
require('con.php') ; include('con.php') ;
12.PHP+MYSQL留言板2
调用表单验证
<form action="" method="post" name="myform" onsubmit="return CheckPost();">
<SCRIPT language=javascript> function CheckPost() { if (myform.user.value=="") { alert("请填写用户"); myform.user.focus();//焦点的位置 return false;//返回值 } if (myform.title.value.length<5) { alert("标题不能少于5个字符"); myform.title.focus(); ……
str_replace( 被替换的值,替换的值,被替换的内容)
function htmtocode($content) { $content = str_replace("\n", "<br>", str_replace(" ", " ", $content)); return $content; }
htmlspecialchars 格式化html
主要功能是将HTML格式化,防止在输出html时被浏览器执行
htmlspecialchars(所要格式化对象,定义单双引号,编码)
md5加密函数
md5( 加密对象 )
COOKIE 的使用和登陆
setcookie("TEST", "value", 3600, "/dir", ".domains.com", true); cookie名 值 保存时间 路径 起效域名 http发送
使用PHP cookie 当场不能生效,需要刷新一次
13.PHP+MYSQL分页原理
SELECT * FROM table …… limit 开始位置 , 操作条数
SELECT * FROM table …… limit 0 , 20//取最前面20条 SELECT * FROM table …… limit 10 , 20//取从第11条开始的20条
公式
当前页数 - 1 )X 每页条数 , 每页条数 Select * from table limit ($Page- 1) * $PageSize, $PageSize
parse_url()解析URL函数
parse_url() 是讲URL解析成有固定键值的数组的函数
$ua=parse_url("http://username:password@hostname/path?arg=value#anchor"); print_r($ua); 结果: Array ( [scheme] => http [host] => hostname [user] => username [pass] => password [path] => /path [query] => arg=value [fragment] => anchor )
14.PHP上传原理
只有使用了multipart/form-data,才能完整的传递文件数据
<form enctype="multipart/form-data" method="post" name="upform"> <input name="upfile" type="file">
move_uploaded_file函数
上传后移动文件到目标位置的函数
move_uploaded_file(临时文件,目标位置和文件名);
is_uploaded_file 函数
判断上传MIME类型的文件函数
move_uploaded_file(MIME);
15.PHP生成HTML文件原理
fopen 打开文件函数
fopen (路径和文件名,打开方式); 打开方式:R-只读 W-写入 A-读写
fread 读取文件内容
fread (打开的文件,结束位置) 结束位置:字节为单位
filesize 读取文件大小,字节为计量单位
filesize (路径和文件名);
fwrite 写入文件内容
fwrite (路径和文件名,写入的内容);
fclose 关闭打开的文件
fclose (路径和文件名);
unlink() 删除文件函数
unlink(路径和文件名)
rmdir() 删除目录函数
rmdir(路径和目录名)
16.PHP小偷程序原理
初识正则表达式
^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+
用于描述字符排列和匹配模式的一种语法规则。它主要用于字符串的模式分割
、匹配、查找及替换操作。
(.*) .匹配除换行符 *匹配1个或多个任意字符 ( ) 开始和结束位置
ereg(正则表达式, 内容, 返回的数组);
若省略参数返回的数组,找到则返回值为 True 否则 返回 False
ereg() 有区分大小写,eregi() 无区分大小写。
file_get_contents 读取整个文件函数
$rf = fopen ('doc.txt',r ); file_get_contents($rf); 等价于 $rf = fopen ('doc.txt',r ); fread ($rf ,filesize ('doc.txt'));
17.PHP面向对象
class MyPc{ public $name;//成员 var $price;//成员 function vod() {//方法 return "PHP100视频教程"; } }
class MyPc{ public $name; var $price; function vod() { return "PHP100视频教程"; } } $pc1 = new MyPc(); $pc1->name;//访问类成员
class MyPc{ public $name; public $price; function vod() { $this->name; } …… $this->vod() ; …… }
class MyPc{ function MyPC ( ) { 初始化操作 } }
class MyPc{ function __construct() { 初始化操作 } }
class MyPc { …… function __destruct() { …… } }
19.类的封装
class MyPc{ public $name; protected $price; private function vod() { $this->name; } …… }
__set($Name,$Value)
class MyPc{ …… …… class home extends MyPc{ …… ……
abstract class class1{ abstract function fun1(); …… }
注意:
class cl2 extends cl1{ function fun1(){ } …… }
22。类的常用关键字
final class class1{ …… final function fun1(){ …… } …… }
class class1{ static $name; static function fun1(){ …… }}
class class1{ const NAME; function fun1(){ …… }}
interface demo { const NAME="名字";//对象属性必须为常量 function Fun1();//方法必须为抽象方法 function Fun2(); }
普通类引用接口例子: class mypc implements demo , demo2 , demo3{ …… }
抽象类引用接口例子: abstract class mypc implements demo , demo2 , demo3{ …… }
继承父类引用接口并存例子: class mypc extends root implements demo , demo2 , demo3{ …… }
接口与接口继承: interface demo3 extends demo{ …… }
24.类的多态
多态是具有表现多种形态的能力的特征,在OO中是指“语言具有根据对象的类型以不同方式处理。
class A { } class B { } $thing = new A; if ($thing instanceof A) { echo 'A'; } if ($thing instanceof B) { echo 'B'; }
多态应用实例
interface myusb{ function type(); function alert(); } class zip implements myusb{ function type(){ echo '2.0'; } function alert(){ echo '正在检查....U盘驱动'; } } class mp3 implements myusb{ function type(){ echo '1.0'; } function alert(){ echo '正在检查....MP3驱动'; } } class mypc{ function pcusb($what){ $what->type()."<br>"; $what->alert(); } } $p=new mypc(); $zip=new zip(); $mp3=new mp3(); $p->pcusb($mp3);
25.面向对象总结
对象描述的配置
方法名 __tostring()
我们可以直接打印对象句柄,从而获得该方法的基本信息或其他内容
class My{ function __tostring ( ){ echo "我所要显示的内容"; } } $p = new My(); echo $p;
输出结果:我所要显示的内容
对象方法的异常处理
方法名 __call($funname,$arr_value)
调用一些不存在的对象方法的异常处理,使程序继续正常运行。
class My{ function __call($n,$v){ echo "错误的方法名".$n; echo "错误的参数".Print_r($v);//因为参数会有多个所要用数组的方式保存,打印的时候也要用print_r 输出 } }
克隆对象的应用
方法名 __clone()
关键字 clone
通过克隆的方式我们可以在内存中生成两个一样的对象或升级原对象。
class My{ function __clone( ){ echo "克隆时自动调用的函数"; } } $a=new My() $b= clone $a;
自动载入对象的方法
方法名 __autoload()
快速取得对象名称并自动载入进当前页面
function __autoload($class_n){//该方法是在类以外单独的方法 也就是我们所谓的构造函数 include($class_n.".php");//将会被自动调用,执行如下include("mypc.php");include("demo.php"); } $p=new Mypc(); $d=new demo();
26.实例制作PHP+MYSQL的类
实例
class mysql{ private $host; //数据库为账号密码等为保密信息,选用私有类型 private $name; private $pass; private $table; function __construct($host,$name,$pass,$table,$ut){//初始化 $this->host=$host; $this->name=$name; $this->pass=$pass; $this->table=$table; $this->ut=$ut; $this->connect(); } function connect(){//连接数据库 $link=mysql_connect($this->host,$this->name,$this->pass) or die ($this->error()); mysql_select_db($this->table,$link) or die("没有数据库".$this->table); mysql_query("SET NAMES '$this->ut'");//设置中文编码 } function query($sql, $type = '') {//数据库出错类的封装 if(!($query = mysql_query($sql))) $this->show('Say:', $sql); return $query; } function error(){//数据库出错类的封装 return mysql_error(); } //######封装方法功能类 function fn_insert($table,$name,$value){//插入数据方法的封装 $this->query("insert into $table($name)value($value)"); } } $db=new mysql('localhost','root','','bbs','GBK'); $db->fn_insert('message','id,user,title,content,lastdate',"'','王五','我插入的标题','我插入的信息',now()")
27模板引擎Smarty入门
include_once("Smarty/Smarty.class.php"); //包含smarty类文件 $smarty = new Smarty(); //建立smarty实例对象$smarty $smarty->config_dir="Smarty/Config_File.class.php"; // 目录变量 $smarty->caching=false; //是否使用缓存,项目在调试期间,不建议启用缓存 $smarty->template_dir = "./templates"; //设置模板目录 $smarty->compile_dir = "./templates_c"; //设置编译目录 $smarty->cache_dir = "./smarty_cache"; //缓存文件夹 //---------------------------------------------------- //左右边界符,默认为{},但实际应用当中容易与JavaScript相冲突 //---------------------------------------------------- $smarty->left_delimiter = "{"; $smarty->right_delimiter = "}";
Smarty的应用:变量
$smarty->assign("模板变量", "值(数组/变量)"); $smarty->display("模板名称");
例
$smarty->assign("name", "标题"); //进行模板变量替换 $smarty->display("index.htm"); // 该文件就是模板文件,应该在模板目录下
html
<html> <title>{$name}</title> ……
循环
数组是最常用的方式,可以帮助我们循环列表,和快速访问打理数据,
如果要循环数组我们可以使用Smarty内置的方法section
$smarty->assign("模板变量", "数组");
例
{section name=s loop=$stu} {$stu[s].name} {sectionelse} 无内容 {/section}
实例
PHP:
include("smarty_inc.php"); //变量 $title="标题"; //数组 $name[]=array("name"=>"第一条新闻","date"=>"2013.4.1"); $name[]=array("name"=>"第二条新闻","date"=>"2013.4.1"); $name[]=array("name"=>"第三条新闻","date"=>"2013.4.1"); $name[]=array("name"=>"第四条新闻","date"=>"2013.4.1"); $row=array("标题","时间"); $smarty->assign("title",$title); $smarty->assign("name",$name); $smarty->assign("row",$row); $smarty->display("index.htm");
html
<b>{$title}</b><br> {$row[0]} | {$row[1]} <hr> {section name=list loop=$name} <b>{$name[list].name}-{$name[list].date}</b><br> {/section}
28模板引擎Smarty的变量操作符
php模板引擎smarty内置的一些操作函数,我们称之为变量操作符,变量操作符
可用于操作变量,自定义函数和字符。(跟我PHP中常用的PHP内部函数类似)
语法中使用"|"应用变量操作符,多个参数用":" 分隔开来
原始内容:{$title} <hr> capitalize[首字母大写]<br> {$title|capitalize}<br> count_characters [计算字符数]<br> {$title|count_characters}<br> cat [连接字符串]<br> {$title|cat:"连接内容"}<br> count_paragraphs [计算段落数]<br> {$title|count_paragraphs}<br> count_sentences [计算句数]<br> {$title|count_sentences}<br> count_words [计算词数]<br> {$title|count_words}<br> date_format[时间格式]<br> {$title|date_format:"%y-%m-%d"}<br> {$smarty.now|date_format:"%y-%m-%d"}<br> default [默认]<br> {$title1|default:"没有内容"}<br> escape [转码]<br> {$title|escape:"html"}<br> {$title|escape:"url"}<br> indent[缩进]<br> {$title|indent:10:" "}<br> {$title|indent:10:"..."}<br> lower[小写 ]<br> {$title|lower}<br> upper[大写]<br> {$title|upper}<br> nl2br[换行符替换成]<br /> {$title|nl2br}<br> replace[替换]<br /> {$title|replace:"is":"**"}<br> spacify[插空]<br /> {$title|spacify:" "}<br> string_format[字符串格式化]<br /> {$title|string_format:"%.2f"}<br><!四舍五入> {$title|string_format:"%d"}<br><!整数> strip[去除(多余空格)]<br /> {$title|strip:""}<br> strip_tags[去除html标签]<br /> {$title|strip_tags}<br> truncate[截取]<br /> {$title|truncate:20:"..."}<br> wordwrap[行宽约束]<br /> {$title|wordwrap:10:'<br>'}<br>
29.模板引擎Smarty内置函数
foreach 数组的处理
=======无键值数组 {foreach from=$name item=id} id: {$id}<br> {/foreach} =======有键值数组 {foreach key=j item=v from=$name } {$j}: {$v}<br> {/foreach}
include 多功能使用
{include file="header.htm"}
{include file="D:\www\head.htm"}
{include file='head.htm' title="Main Menu"}
IF条件语句的使用
{if $name=='ok'}
{else}
{/if}
literal和 strip 文本的处理技巧
literal 数据将被当作文本处理,此时模板将忽略其内部的所有字符信息. 该特性用于显示有可能包含大括号等字符信息的 javascript 脚本
{literal} <script language=javascript>..... </script> {/literal}
strip标记中数据的首尾空格和回车. 这样可以保证模板容易理解且不用担心多余的空格导致问题.
{strip}
....
{/strip}
30模板引擎Smarty缓存应用
Smarty缓存的配置
在配置文件里写入(smarty_inc.php)
$smarty->cache_dir = "/caches/"; //缓存目录 $smarty->caching = true; //开启缓存,为flase的时侯缓存无效 $smarty->cache_lifetime = 60; //缓存时间
Smarty缓存的使用和清除
$smarty->display('cache.tpl', cache_id); //创建带ID的缓存 $smarty->clear_all_cache(); //清除所有缓存 $smarty->clear_cache('index.htm'); //清除index.tpl的缓存 $smarty->clear_cache('index.htm',cache_id); //清除指定id的缓存
<div>{insert name="get_time"}</div>
function insert_get_time(){ return date("Y-m-d H:m:s"); }
smarty_block 局部缓存
{blockname} 没有缓存的:{$smarty.now} {/blockname}
MYSQL与Smarty的应用
待续....