资源描述
第二部分 PHP高级技术
学习目标:
1、掌握PHP数据库分页技术
2、掌握PHP图形图像处理
3、掌握PHP文件操作
学习内容:
1、PHP数据库分页技术
2、验证码生成
3、掌握PHP文件上传
学习过程:
一、数据库分页技术
具备两个知识:
1、数据分页sql 命令 limit 公式:select * from Talbe limit (page-1)*pageSize , pageSize. 注: page 表示当前页 pageSize 表示每页显记录数
问题:如何求总页数?就要知道每页显示记录数,总记录数
select cout(id) from student;
总页数=ceil(总记录数/每页显示记录数)
select * from student limit 2 只从student 表查两条记录出来
select * from student limit 0,2 只从student的第0条记录后查出2条记录
select * from student limit 2,2 从student 表的第2条记录后查出2条记录
2、使用超连接传递数据GET(超连接和表单) 、POST(表单)
<a href="页面?变量名=值&变量名=值/> 在进行传递将变量名作为$_GET里面的键,值做为$_GET里面键对应的值。注:如果页面没有写,表示是在本页传递。
1.php
<a href="2.php?page=2&sex=man">传参</a>
2.php
<?php
print_r($_GET);
?>
3.php
<?php
if($_GET['page']==null |$_GET['page']=="")
{
$page=1;
}
else
{
$page=$_GET['page'];
}
?>
当前页为:<?=$page?>页<br/>
<a href="">首页</a><br/>
<a href="?page=<?php echo ($page+1);?>">下一页</a><br/>
<a href="?page=<?=$page-1?>">上一页</a><br/>
<a href="">尾页</a><br/>
实做:
分页技术需要那些元素:当前页、每页显示记数数、总页数
<?php
if($_GET['page']==null |$_GET['page']=="")
{
$page=1;
}
else
{
$page=$_GET['page'];
}
$pageSize=2;//每页显示两条记录
//1、通过查询求总记录数
mysql_connect("localhost","root","123");
mysql_select_db("study");
$rs1 =mysql_query("select count(*) from student");
$row1=mysql_fetch_array($rs1,2);
$totalNumber=$row1[0];
$totalPage=ceil($totalNumber/$pageSize);
//2、查询出当前页的内容
$jump=($page-1)*$pageSize;
$sql="select * from student limit $jump,$pageSize";
$rs2=mysql_query($sql);
?>
<table border="1">
<tr><td>学号</td><td>姓名</td><td>性别</td></tr>
<?php
while($row=mysql_fetch_array($rs2,2))
{
?>
<tr><td><?php echo $row[0];?></td><td><?php echo $row[1];?></td><td><?php echo $row[2];?></td></tr>
<?php
}
?>
</table>
<?=$page?>/<?php echo $totalPage;?><br/>
<a href="?page=1">首页</a><br/>
<?php
if($page>=$totalPage)
{
?>
下一页<br/>
<?php
}
else
{
?>
<a href="?page=<?php echo ($page+1);?>">下一页</a><br/>
<?php
}
?>
<?php
if($page<=1)
{
?>
上一页<br/>
<?php
}
else
{
?>
<a href="?page=<?=$page-1?>">上一页</a><br/>
<?php
}
?>
<a href="?page=<?php echo $totalPage;?>">尾页</a><br/>
二、文件上传(API)
工作原理:如果表单里面有文件域 ,当提交表单时,服务器会自动将文件上传信息给封装到全部变量$_FILES.且自动将文件放入到操作系统的临时文夹件,然后我们程序员使用move_upload_file将其移动站点相应位置。
1、制作文件上传的表单
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>文件上传</title>
</head>
<body>
<form action="doUpfile.php" method="post" enctype="multipart/form-data" name="form1" id="form1">
<p>上传文件:
<input type="file" name="file" id="file">
</p>
<p>
<input type="submit" name="button" id="button" value="提交">
</p>
</form>
</body>
</html>
注:只要有文件域增加enctype="multipart/form-data"
2、文件上传的处理 doUpfile.php
$_FILES 是一个全局数组,如果有文件,会将文件域的name属性的值做为键,生成一个文件相关信息一维数给。 name : 上传原文件的名字;type:上传文件的类型 tmp_name:上传文件在服务器上临时路径;error:错误信息代码;size:文件的大小
UPLOAD_ERR_OK
其值为 0,没有错误发生,文件上传成功。
UPLOAD_ERR_INI_SIZE
其值为 1,上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。
UPLOAD_ERR_FORM_SIZE
其值为 2,上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。
UPLOAD_ERR_PARTIAL
其值为 3,文件只有部分被上传。
UPLOAD_ERR_NO_FILE
其值为 4,没有文件被上传。
UPLOAD_ERR_NO_TMP_DIR
其值为 6,找不到临时文件夹。PHP 4.3.10 和 PHP 5.0.3 引进。
UPLOAD_ERR_CANT_WRITE
其值为 7,文件写入失败。PHP 5.1.0 引进。
<?php
//print_r($_FILES);
$name =$_FILES['file']['name'];//取到原文件名字
$src =$_FILES['file']['tmp_name'];//上传文件的临时路径
move_uploaded_file($src,$name);//将临时文件移动到相应的位置
?>
move_uploaded_file将上传的文件移动到新的位置。
注:move_uploaded_file(源路路径,目标路径) 它的路径只识别本地绝对路径和文件相对路径,我们使用文件相对路径不利于维护和通用。解决方案是将站点相对路径转换成本地绝对路径。转换方式在站点相对路径下加$_SESERVER[DOCUMENT_ROOT](站点本地绝对路径);
<?php
print_r($_FILES);
$savepath="/upload/";
$name =$_FILES['file']['name'];//取到原文件名字
$src =$_FILES['file']['tmp_name'];//上传文件的临时路径
$dst =$_SERVER[DOCUMENT_ROOT].$savepath.$name;
echo $dst;
$abpath=$savepath.$name;
echo $abpath;
move_uploaded_file($src,$dst);//将临时文件移动到相应的位置
?>
<img src="<?php echo $abpath;?>"/>
三、图形图像处理(API Image)
1、创建图像的函数 imagecreate imagecreatetruecolor imagecreatefromgif(JPEG\PNG)
2、色彩处理 imagecolorallocate
3、图像处理 imagedashedline - 画一虚线 imagedestroy - 销毁一图像
imageellipse - 画一个椭圆 imagefill - 区域填充 imagefilledarc - 画一椭圆弧且填充 imagefilledellipse - 画一椭圆并填充 imagefilledpolygon - 画一多边形并填充 imagefilledrectangle - 画一矩形并填充 imagestring - 水平地画一行字符串
4、图像的输出 imagejpeg(GIF、PNG) 输出到流览器或文件
Example1:
<?php
/*创建了一个宽为150px 高为30的图像*/
$img = imagecreatetruecolor(80,30);
/*创建一个背景色采*/
$bkColor=imagecolorallocate($img,0,0,0);
$gColor=imagecolorallocate($img,255,255,255);
/*生成验证码的字符串*/
$i=1;
$str="";
while($i<=4)
{
$str.=rand(0,9);
$i++;
}
/*将字符串绘入图片*/
imagestring($img,7,20,8,$str,$gColor);
//输出图片到文件路径
imagejpeg($img,"d:\code.jpeg");
?>
Example2
1) 验证码制作image.php
<?php
/*开启会话功能*/
session_start();
/*让网页以jpeg图片格式显示*/
header("content-tye:image/jpeg");
/*创建了一个宽为150px 高为30的图像*/
$img = imagecreatetruecolor(80,30);
/*创建一个背景色采*/
$bkColor=imagecolorallocate($img,0,0,0);
$gColor=imagecolorallocate($img,255,255,255);
/*生成验证码的字符串*/
$i=1;
$str="";
while($i<=4)
{
$str.=rand(0,9);
$i++;
}
/*将随机字符串保存在session*/
$_SESSION['code']=$str;
/*将字符串绘入图片*/
imagestring($img,7,20,8,$str,$gColor);
//输出图片到文件路径
imagejpeg($img);
?>
验证码使用inputCode.php
<?php
session_start();
if($_POST!=null)
{
$code =$_SESSION['code'];
$rcode =$_POST['rcode'];
if($code==$rcode)
{
echo "验证码合法";
}
else
{
echo "验证码不合法";
}
}
?>
<script type="text/javascript">
window.onload=function()
{
var c = document.getElementById("im");
c.onclick=function(){
this.src="image.php?data="+new Date().toString();
}
}
</script>
<form action="" method="post">
输入验证码:<input type="text" name="rcode"/><img src="image.php" id="im" /><br/>
<input type="submit" value="提交"/>
</form>
课外作业:
下载thinkphp 3.0 全部代码及文档
展开阅读全文