收藏 分享(赏)

卓音工作室PHP+MySQL.doc

上传人:dzzj200808 文档编号:2790473 上传时间:2018-09-27 格式:DOC 页数:57 大小:320KB
下载 相关 举报
卓音工作室PHP+MySQL.doc_第1页
第1页 / 共57页
卓音工作室PHP+MySQL.doc_第2页
第2页 / 共57页
卓音工作室PHP+MySQL.doc_第3页
第3页 / 共57页
卓音工作室PHP+MySQL.doc_第4页
第4页 / 共57页
卓音工作室PHP+MySQL.doc_第5页
第5页 / 共57页
点击查看更多>>
资源描述

1、卓音工作室PHP+Mysql 学习 DIY实例进阶写在前面的话:本文适用于已经熟练掌握 Mysql 和部分 PHP 的初学者,作为编程的练习作业,通过实例逐步的循序渐进的提高编程水平,前 3 个例子为详细讲解,后 8 个例子仅仅给出提示和参考。一、 注册表单确认1、功能说明实现网页表单信息的确认表单元素包括姓名(单行文本框) 、密码(密码文本) 、性别(单选) 、自我介绍(多行文本) 、爱好(多选)等2、提示与流程简述首先制作表单页面,项目如下按“提交”后由另外一页来处理结果3、技术关键本练习主要是实现变量在两个页面中传递的问题,这需要在第一个页面的form 中设置成 其中 act.php 为

2、第二个页面的文件名称,意思是告诉浏览器这个表单由 act.php 来处理。POST 提交方式与 GET 提交方式的区别在于,GET 方式通过地址栏传递变量值,有长度限制而且不能传递特殊字符变量传递的关键在于明白表单元素的 name属性和变量名称之间的关系,如姓名的文本框属性如下,则添入这个文本框的内容,在第二个页面用变量$username 就可以接收。密码框在于 中的 type 属性多选框的变量接收,在第二页用如下代码判断单选分组,只要 name 相同的就是一组,一组里只能有一个被选择,传递到第二页的值就是被选中的那个单选框的值,他的判断和多选框大同小异。 全局变量指的是在多个页面都存在的变量

3、,局部变量指的是只在一个页面存在的变量,比如上面的例子中第一页的文本框username 在第二页还是存在的用$username 可以接受到其值。如果发现变量无法传递,请检查 php.ini 看看register_globals = On 还是 register_globals = Off 如果是 Off 则说明,所有的变量默认都不是全局变量,这样只能用函数来实现变量的传递,所以本文所有的例子都是在 register_globals = On 下,请改动你的php.ini。4、参考HTML 文档中的表单(见 per 目录)PHP 教程中关于 if语句的部分二、例子一的进阶练习1、功能说明实现第二

4、个页面中变量的再次传递在第二个页面实现让使用者是否继续的功能在第一个页面实现对爱好简单的介绍2、提示与流程简述第二个页面要修改为如果点“正确继续”则转到第三个页面如果点错误修改则返回第一个页面如果点“文学”或者“体育”等连接到达同一个页面,但是根据你点的内容不同介绍也不相同3、技术关键隐藏域的相关知识。在第二页面(act.php)实际是有一个表单,但是大家发现这个表单只有一个按纽作为表单元素,那变量是怎么传递到第三页的呢?用隐藏域,隐藏域是特殊的表单元素,他特殊就在于他不在浏览器显示,但是用法却和文本框等表单元素一样。关键代码如下:(act.php 部分代码)姓名:;“爱好:;“关于“错误修改

5、”的问题,可以简单的用来解决,但是这样的缺点是显而易见的,就是表单全部被清空了,怎么样保留刚才填写的内容呢?使用在客户端运行的 javascript 来实现,代码如下:错误修改他是作用和点浏览器上的“后退”按扭是一样的,出于安全考虑,后退以后的密码狂会被清除干净。关于同一个页面根据连接不同给出不同的结果。这就是使用GET 传递变量的地方了,在第一个页面中我们把“文学” “体育” “娱乐”分别加上超级连接,但是稍微有些差别。文学体育娱乐在 URL 的后面加上?后面是被传递的变量和值的列表,多个变量用“break;case “体育 “:$info=“体育是关于运动的学问“;break;defaul

6、t:$info=“不能判断你输入的是什么“;break;Echo “关于”.$type.”的介绍”.$info;通过点击连接把 type 的值传递到了 info.php,此页面用 swith 语句来判断 type的值然后给出相应的处理方法。4、参考PHP 教程的 swith 语句常用的 javascript 客户端程序三、 把注册信息加入到 mysql 中1、功能说明实现表单内容插入到数据库中实现 cookie 判断是否登陆功能2、提示与流程简述首页面 index.php注册页面(reg.htm)注册结果(reg.php)登陆结果(login.php)密码出入错误给出提示登陆成功自动转到首页i

7、ndex.php3、技术关键关于对数据库的插入,查询,更新操作Reg.php 中,需要把验证后的数据插入到数据库test 的 user表中表的结构Id int 5 位 自动增长 主键(KEY)Account Vchar 20 位 用户名pswd Vchar 20 位 密码regdate Vchar 10 位 注册日期times Int 5 位 登陆次数 关键的代码如下:if ($password=$repassword and strlen($account)1 and strlen($password)1)/数据库服务器$mysdb_connect_db=“localhost“;/数据库用户

8、名$mysdb_connect_user=“join“;/数据库口令$mysdb_connect_password=“joiner“;/连接数据库mysql_connect($mysdb_connect_db,$mysdb_connect_user,$mysdb_connect_password);$result=mysql_db_query(“test“,“select account from user where account=$account“);$row=mysql_fetch_array($result);if(mysql_num_rows($result)=0) $dd=dat

9、e(“Y-m-d“);/设置日期$query=“insert into user (account,password,regdate,click) values($account,$password,$dd,0)“;mysql_db_query(“test“,$query);/插入新的记录echo $account.“你好,你已经成功的注册!“;elseecho “该用户名已经被其他人注册过了“;elseecho “两次密码不符合或者用户名、密码没在 020 之间“;关于 login.php 判断密码是否正确并更新登陆次数/数据库服务器$mysdb_connect_db=“localhost“

10、;/数据库用户名$mysdb_connect_user=“join“;/数据库口令$mysdb_connect_password=“joiner“;/连接数据库mysql_connect($mysdb_connect_db,$mysdb_connect_user,$mysdb_connect_password);$query=“select * from user where account=$accountand password=$password“; /判断密码是否正确 (记录查询) $result=mysql_db_query(“test“,$query);$num=mysql_num

11、_rows($result);$row=mysql_fetch_array($result);if ($num=1) /如果正确setcookie(username,$row“account“);/传递 cookie$times=$row“times“+1;$query=“update user set times=$timewhere username=$account“; /更新登陆次数(记录更新)mysql_db_query(“test“,$query);header(“location:index.php“);/转向到 index.php关于 index.php 判断是否登陆if ($

12、username!=“) /判断 cookie 是否为空值/数据库服务器$mysdb_connect_db=“localhost“;/数据库用户名$mysdb_connect_user=“join“;/数据库口令$mysdb_connect_password=“joiner“;/连接数据库mysql_connect($mysdb_connect_db,$mysdb_connect_user,$mysdb_connect_password);$query=“select * from user where account=$username“; /根据 cookie 查询记录 (记录查询)$re

13、sult=mysql_db_query(“test“,$query); $row=mysql_fetch_array($result); $info= $account.“你好,你已经登陆,从“.$row“regdate“.“你已经登陆了“.$row“time“.“次“;else$info=“你还没有登陆“;echo “登陆状态:“.$info;4、参考工作室的一些简单的数据库查询的例子,熟悉多种数据库查询、更新、添加(删除)的操作。PHP 的相关知识 strlen() setcookie() header()等用法数组变量的含义和功能四、 简单的新闻发布系统实现的功能1、首页显示新闻的标题和

14、发布时间2、点新闻标题可以查看新闻的内容、新闻的点击次数3、首页可以登陆到后台的控制面板首页,控制面板首页列出新闻标题,点可以查看新闻内容,每条新闻后面都有 删除 和 更新的连接 点完后可以实现删除和更新新闻的功能4、控制面板首页可以实现添加新闻的功能参考与提示1、PHP 中的while 结构Select * from 新闻表.While(记录还存在)显示记录2、别忘了前面的例子中关于 GET 的灵活运用第 23 号新闻的标题在 Show.php 页面里.查找数据 where id=23如果找到了 显示 记录 如果没有 该新闻不存在3、关于更新新闻内容第 23 号新闻的标题删除更新Update

15、.php 中 查找数据 where id=23如果找到了 显示 “4、安全的问题,插入新闻、更新新闻、删除新闻都要判断一下cookie 存在与否,要不然谁都可以更改新闻了。五、复杂的新闻发布系统实现的功能1、新闻分页显示2、加入新闻搜索功能3、每条新闻显示内容的页面都加上“我来评论”和“推荐到其他人”功能,并列出最近5 条的评论。4、发布新闻时处理好新闻内容中回车换行和空格的问题。参考与提示1、PHP 相关 ceil()分页时可能使用 str_replace()替换回车和空格可能使用 mail()发信时使用 rand()随即生成评论者 ID 使用2、关于分页查询$sqlcount=“selec

16、t count(*) from 新闻表 order by id desc“;$count=mysql_result(mysql_query($sqlcount),“0“);/新闻总条数$pagerow=“10“;/每页 10 个记录$pagecount=ceil($count/$pagerow);/总页数if ($page$pagecount or $page=“) $page=1;/判断输入的页数是否合法$start=($page-1)*$pagerow;/记录开始点$sql=“select * from 新闻表 order by id desc limit $start,$pagerow“

17、;/生成查询语句3 、关于模糊搜索Select 新闻标题 from 新闻表 where 新闻标题 like %$keyword%4、PHP 中的for next 循环(列出最近的5 条新闻评 论时使用)六、投票程序实现的功能1、首页列出全部投票的标题和日期,点标题进入投票内容2、投票内容页面显示 投票问题的阐述 和投票选项(单选) ,还有投票结果的连接3、投票成功以后 20 分钟内不能重复投同一投票项目,但是可以投列表中其他的投票4、投票成功后自动定向到投票结果, 投票结果用图形表示5、控制面板可以对投票进行添加,删除,修改等操作。添加:修改标题修改选项参考与提示1、首先是要思路清晰,可以看到

18、如下结构:如果建立一个数据表,则关系比较复杂,这个时候需要我们建立两个数据表,把投票和选项分开存放。表 1Id Int 自动增长 keyTitle 投票标题Time 投票发表时间表 2id Int 自动增长 keymainid 投票标题的id 通过这个字段和表 1 建立联系Option 选项内容Num 投票数2、如何显示投票的具体内容呢?看看投票列表页面的部分代码:连接数据库Select * from 表 1 order by time desc /按照时间的 倒序显示记录While (有记录)再来看看 show.phpSelect * from 表 1 where id=$idEcho $r

19、ow“title”Select * from 表 2 where mainid=$id /注意这里是 关键$i=1While (有记录)“ checked name=“R1”$i=$i+13、再来看看怎么样显示投票的结果统计投票的总数$sqlcount=“ select sum(num) from 表 2 wheremainid=$id”/注意这里的sum函数的应用$count=mysql_result(mysql_query($sqlcount),“0“);/这样就把总 数取到了(别忘了判断是否为零,如果为零的话就不能做分母。 )然后 Select * from 表 2 where main

20、id=$id用 100*$row“num”/ $count 得到各个选项的百分比,用 substr()取两位小数至于用图形显示,可以让七、卓音贺卡程序(详细情况见网站)本程序主要使学习者掌握 php 对文件的上传,php 类的使用,和不用 mail函数发email的方式,以及 md5(),php_gd2.dll 相关函数库等应用。八、论坛程序(或者 JOIN 秀程序)多表之间的协作,与 javascript 大量交互。九、虚拟主机建站程序PHP 对文件的读写操作,对目录的操作,对 access 数据库的操作,正则表达式相关。十、暂时空缺以下是重要的程序参考,有时间请仔细琢磨PHP 上传 文件(

21、经典)牛英利一、上传单个文件您可以如下建立一个特殊的表单来支持文件上传:文件上传表单这里的 URL 应该指向一个处理上传文件的 PHP 文件。 MAX_FILE_SIZE隐藏字段必须在文件输入字段之前,且其值为接受文件的最大尺寸,单位是字节。 注意,该值实际上并不能真正地在客户端控制上传文件的大小。上传动作产生的文件信息存放于特定的数组中,数组的名字会根据 PHP 的版本和配置文件的设置不同而不同。全局变量 _FILES 数组从 PHP4.1.0 版本就已经开始支持了。而 $HTTP_POST_FILES 数组是从 PHP4.0.0 开始支持的。 不过这里推荐您使用 _FILES 数组,因为

22、php.ini 里的 register_globals 设置为 off 时,相关的变量名还可以使用,而且从PHP4.2.0 版本开始,它已经设置为 off 。这里也不主 张您改为 ON。在刚才的表单后面加上phpinfo();函数,提交一下表单,就会看到 _FILES 数组的内容:$_FILESmyFilename 客户端文件的原名称,同 ON 时的 $myFile_name,下同。 $_FILESmyFiletype 文件的 MIME 类型,需要浏览器提供该信息的支持,例如“image/gif” 。 $_FILESmyFilesize 已上传文件的大小,单位为字节 。 $_FILESmyFi

23、letmp_name 文件被上传后在服务端储存的临时文件名,一般是系统默认。可以在 php.ini 的 upload_tmp_dir 指定,但 用 putenv() 函数设置是不起作用的。$_FILESmyFileerror 和该文件上传相关的错误代码。error 是在 PHP 4.2.0 版本中增加的。下面是它的说明:( 它们在 PHP3.0 以后成了常量)UPLOAD_ERR_OK值:0; 没有错误发生,文件上传成功。 UPLOAD_ERR_INI_SIZE值:1; 上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。 UPLOAD_ERR_FORM

24、_SIZE值:2; 上传文件的 大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。 UPLOAD_ERR_PARTIAL值:3; 文件只有部分被上传。 UPLOAD_ERR_NO_FILE值:4; 没有文件被上传。值:5; 上传文件大小为 0.文件被上传结束后,默认地被存储在了临时目录中,这时您必须将它从临时目录中删除或移动到其它地方,如果没有,则会被删除。也就是不管是否上传成功,脚本执行完后临时目录里的文件肯定会被删除。所以在删除之前要用 PHP 的 copy() 函数将它复制到其它位置,此时,才算完成了我们的上传文件过程。二、上传多个文件有了上面的认识,同时上传多个文

25、件也就不难做了。上传多个文件是从 PHP3.0.10 版本开始被支持。要完成它,只需文件名以数组形式表示即可:假如我们上传了两个文件:first.txt 和 second.gif。表单被提交后,$_FILES“myFile“name“0、$_FILES“myFile“size“0分别指 first.txt文件的名字和大小,$_FILES“myFile“name“1、$_FILES“myFile“size“1分别指 second.gif 的文件名字和大小。当然,$_FILES“myFile“tmp_n ame“、$_FILES“myFile“type“也同样会产生。三、注意事项1.对 MAX_F

26、ILE_SIZE 设置的值,不能大于 ini 设置中 upload_max_filesize 选项设置的值。其默认值为 2M 字节。 2.如果 max_execution_time 设置的值太小,脚本运行的时间可能会超过该设置。也就是文件还未上传成功已经到了结束时间。因此,请保证 max_execution_time 足够的大。3.如果内存限制设置被激活,您可能需要将 memory_limit 设置的更大些,所以也请确认 memory_limit 的设置足够的大。4.如果 post_max_size 设置的值太小,则较大的文件会无法被上传。因此,请保证 post_max_size 的值足够的大

27、。 5.不能保证文件名有空格的文件被正确上传。四、PUT 方式上传上面的上传单个、多个文件,均是在表单里以 POST 方式上传到服务器里的。不过据说 PHP 提供了对 Netscape Composer 和 W3C Amaya 等客户端以 HTTP PUT 方法上传文件的支持。这样的安全性怎么样我不清楚,手头也没有类似资料,希望了解此方式的网友们提供一些资料和讨论,这里先谢过了_。五、一些说明1.要想上传文件,得保证服务器没有关闭临时文件和有对文件夹的写权限2.这里只是简单的说明上传参数,具体的步骤和需要可以参看精华区的贴子,如控制文件类型等。3.由于是在匆忙中完全,肯定会有所漏洞和遗漏,欢迎

28、跟贴补充、讨论。4.参考: 在线帮助能把汉字转 化为拼音的 一个函数发信人: 海滨整理人:站内信件 来源:CSDN 很多问题都是因为中文问题造成的 如文件名最好别用中文 现在的解决方法一般是产生一个 ID,将这个 ID做文件名 网页上如果url 带汉字也经常出错 现在的解决方法一般用urlencode 编码 现在用了这个转化,就好多了 原理:利用多维数组 1.添加索引 2.遍历数组 0 else for($i=count($d)-1;$i=0;$i-)if($d$i1160) $q=ord(substr($str,+$i,1); $p=$p*256+$q-65536; $ret.=g($p);

29、 return $ret; echo c($hz); ? 请在此处输入中文: 用 PHP 生 成访客计数 器现在,上网的人越来越多,许多网友尝试着制作自己的主页,访客计数器是必不可少的一部分。虽然很多网站提供免费的计数器,可毕竟不是自己亲手制作的?有的朋友可能认为它很难,不敢去尝试,其实有了 PHP 这个工具,它并不难,甚至可以说它很容易。 首先,让我来谈一谈访客计数器的思路:一位访问者浏览此页,服务器(如 Apache)从一个文档(下文以 num.txt 为例)中读取该页已被浏览的次数,加一,然后存回 num.txt,并在浏览器中显示加一后的次数。 如果又一位访问者浏览此页,服务器又重复上述

30、过程,从而实现了访客计数器。 PHP 没有直接的计数器函数,但利用它强大的功能,我们可以很容易地自己编写一个计数器。 现对程序需要用到的函数进行说明: 1. 打开文件操作:int fopen(string filen ame, string mode); 其中 string filename 是要打开的文件名,必须为字符串形式。例如“num.txt“。 string mode 是打开文件的方式,必须为字符形式。 r,只读形式,文件指针指向文件的开头。 r+,可读可写,文件指针指向文件的开头。 w,只写形式,文件指针指向文件的开头,把文件长度 截成 0,如果文件不存在,将尝试建立文件。 w+,可

31、读可写,文件指针指 向文件的开头,把文件长度 截成 0,如果文件不存在,将尝试建立文件。 a,追加形式(只可写入) ,文件指针指向文件的最后,如果文件不存在,将尝试建立文件。 a+,可读可写,文件指针指向文件的最后,如果文件不存在,将尝试建立文件。 2. 读文件操作:string fgets(int fp, int lengt h); 其中 int fp 是要读入数据的文件流指针,由 fopen 函数返回数值。 int length 是要读入的字符个数,实际读入的字符个数是lengt h-1。 3. 写文件操作:int fputs(int fp, string str, int length)

32、; 其中 int fp 是要写入信息的文件流指针,由 fopen 函数返回数值。 string str 是要写入文件的字符串。 int length 是写入的长度,可选,如果不选 length,则整个串将被写入。否则,写入 length 长度个字符。 4. 关闭文件操作:int fclose(int fp); 其中 int fp 是 fopen 函数返回的文件流指针。下面,我们来看一下计数器的原型:(假设 num.txt 文件存在) $fp = fopen(“num.txt“, “r“); /只读方式打开 num.txt 文件 $num = fgets($fp,5); /读取 4 位数字 $n

33、um+; /浏览次数加一 fclose($fp); /关闭文件 $fp = fopen(“num.txt“, “w“); /只写方式打开 num.txt 文件 fputs($fp, $str1); /写入加一后结果 fclose($fp); /关闭文件 echo “$num“; /浏览器输出浏览次数 ? 需要说明的是,这只是计数器的原型,它只能以文本方式显示次数,并不美观,而 PHP 具有极其强大的图像处理能力,用它可以很轻易的动态生成WEB图像。下面对上述原型加以修改,使之成为一个真正实用的计数器。 它的思路是这样的:用原型中的方法得到访问次数,把此数字转为标准格式,进行图象处理,并输出成图

34、片,显示。 如果要生成记数图象,需要以下函数: 1. 字符串长度函数:int strlen(string str); 其中 string str 是要计算长度的字符串。 2. 字符串相加: 如,把 $string1 和$string2 相加: $string = $string1.$string2 3. 新建图像函数:int imagecreat e(int x_size, int y_size); 其中 x_size,y_size 分别是新建图像的宽度和高度(以像素为单位) 。 4. 颜色函数:int imagecoloralloc ate(int im, int red, int gree

35、n, int blue); 其中 int im 是图像识别号。 int red、green、blue 分别是红绿蓝 三种颜色的分量,取值范围 0 - 255,即相应颜色的 RGB。 5. 给图像填充颜色的函数:int imagefill(int im, int x, int y, int col); 其中 int x, int y 为开始填充颜色的图像坐标,以图像的左上角为(0,0) 。 int col 是颜色的识别号。 6. 在图像中写入水平文字的函数:int imagestring(int im, int font, int x, int y, string s, int col); 其中

36、 int im 是图像的识别号。 int font 是字体识别号。 int x,int y 是开始写入字体的坐标,(0,0)为左上角。 string s 是要写入的字符串。 int col 是字体的颜色识别号。 7. 在图像中划直线的函数:int imageline(int im, int x1, int y1, int x2, int y2, int col); 其中 int im 是图像的识别号。 int x1,int y1,int x2,int y2 是划线的起止坐标。 int col 是线的颜色识别号。 8. 把图像输出成 GIF 格式的函数:int imagegif(int im,

37、string filename); 其中 int im 是图像的识别号。 string filename 是生成图片的名字,可选,如果 filename为空,则直接的输出。 9. 释放图像:int imagedestroy(int im); 其中 int im 是要释放的图像识别号。 该函数释放识别号 im的图像及图像所占用的系统资源。 在自己的主页上可以这样调用这个计数器: 下面是 counter.php3 的程序清单: Header(“Content-type: image/gif“); /定义输出为图像类型 $n=10; /变量$n 是显示位数 $fp = fopen(“num.txt“, “r“); $str1 = fgets($fp,$n+1); $str1+; fclose($fp); $fp = fopen(“num.txt“, “w“); fputs($fp, $str1); fclose($fp); /同原型 $str2 = “; $len1 = strlen($str1); for ($i=1;$i 另外,为了方便,还可以用将计数器作为一个函数 MyCounter(),这样只许需在主页开头加入 require(“filename”);使 MyCounter()成为此主页的一部分,需要的时候,将加在需要计数器的地方就可以了。几个有用的 字符串函数

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 大学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报