|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
我的文章不会对您的学习起到实质性的作用,您能否成功,还得靠自己的,坚持,坚持,再坚持,就是步入成功的不二法门。mysql 1、PHP/MySQL简介
您应当传闻过开放源代码软件(OSS),除非比来六到八个月来您一向住在火星上。这场活动有着伟大的冲击力,已引发一些大公司的注重。象Oralce、Informix,还有多家公司都入手下手把他们的主力数据库产物移植到OSS的产品之一 - Linux操作体系上。
假如您有足够的手艺力气,具有一个庞杂复杂的关系数据库体系(RDBMS)则是如虎添翼。然而或许您对数据库还方才入门,您方才读了Jay的文章,决意本人也来弄一个数据驱动的网站。可是您或许会发明您缺少需要的资本来运转ASP办事器或昂贵的数据库体系(您也不需求这些器材)。您需求一些收费的、撑持Unix的器材。
那末我建议您利用PHP和MySQL。这两样器材加在一同,关于开辟数据驱动的网站这项任务而言,真是最好组合。其适用不着我多费唇舌注释。一项由Netcraft组织的非官方查询拜访显示,使用PHP的主机数量由1998年6月的7,500台跃升至1999年3月的410,000台。不错吧?这两种软件的组合还在Webcon98大会上博得了年度数据库产物大奖,还得了一座大度的奖杯。
MySQL是一个玲珑灵珑的数据库办事器软件,关于小型(固然也纷歧定很小)使用体系长短常幻想的。除撑持尺度的ANSI SQL语句,它还撑持多种平台,而在Unix体系上该软件撑持多线程运转体例,从而能取得相当好的功能。关于不利用Unix的用户,它可以在Windows NT体系上以体系办事体例运转,或在Windows 95/98体系上以通俗历程体例运转。
PHP是一种办事器端注释的剧本言语。假如你接触过ASP的话,那末您关于在HTML页面中嵌入代码应当是对照熟习了。PHP代码在办事器一端被注释改变成通俗的HTML页面内容,送给阅读器一端。这类形式使得咱们可以用它来完成相当庞杂的功效。
除收费这一点(固然,MySQL也有一些利用允许方面的限制),PHP-MySQL的组合还可以跨平台运转,这意味着您可以在Windows上开辟,然后在Unix平台上运转。别的,PHP也能作为尺度的CGI历程来运转,此时它是一个自力的剧本注释器,或是Apache的一个嵌入模块。
假如您有乐趣利用其他数据库办事器的话,PHP也撑持Informix、Oracle、Sybase、Solid和PostgreSQL ,和通用的ODBC。
PHP撑持Internet开辟的一些前沿手艺。这些手艺包含身份认证、XML、静态图像生成、WDDX、同享内存,和静态PDF文档等等,所在多有。假如您还不写意的话,PHP是很轻易扩大的,所以只需您有编程才能,您尽可以本人大展身手一番。
最初要说的是,两种软件都是大批法式员协同开辟的,因而文档及邮件列表等撑持体例良多。法式毛病的修改很快,而假如您请求到场新功效的话,总会有人思索您的请求,而且在可行性足够高的条件下加以完成。
说得够多了!咱们来看看这篇教程里都有些甚么内容吧。
第一课讲的是在Unix和Windows情况下装置这两个软件。假如您不太关怀这个成绩(或许您是在ISP的办事器上开辟),您可以直接跳到第一个示例法式,从那边入手下手您的奇奥之旅。
在第二课里,咱们要进修一些加倍庞杂的剧本功效,好比轮回、处置用户输出,和与数据库互换数据等等。
第三课要讲的是确认功效,和若何使您的剧本法式明晰简洁。
咱们入手下手吧。>>
2、装置MySQL
快点举动,拿到这些软件包,细心研讨一下吧。这可不是件轻易的事儿。你从获得软件包、编译软件包到装置软件包的过程当中都有很多的选择项。咱们先从MySQL入手下手,由于有了它才干运转PHP。
MySQL中心网站是http://www.mysql.com/。为了便利人们下载利用(这软件仍是对照大的),全球有许很多多的镜像网站。为更无效天时用因特网,请找一个就近的网站下载。
在这时候候你也会有多种选择。假如你是发热友的话,可以下载源代码;不然,网上也有各类平台上运转的事后编译过的二进制文件可以直接下载。
别的,MySQL还为Windows用户筹办了一个同享软件版本,它的版本号稍低一些。假如你想要最新的版本,得花钱买一个软件允许。MySQL还供应了ODBC驱动法式,使前端使用法式可以会见MySQL数据库。有关其他一些具体信息在它的网站上都有得引见,您可以去看看。
事后编译过的Unix版本和Windows版本都很复杂,只须解包便可利用,不需求做太多申明了。因而,咱们来引见一下源代码的编译。Windows用户请记住,您需求运转mysqld法式,该法式是在mysql/bin目次下。
下载紧缩过的软件包文件,放在一个目次下。利用gzip和tar来解紧缩息争包。对照快的做法是利用上面如许的号令:
gunzip < mysql-xxxx.tar.gz | tar xvf -
个中,xxxx是你本人任取的一个版本标志。下面的号令将创立一个名为mysql-xxxx目次,一切的源法式文件都在这个目次下。经由过程履行cd mysql-xxxx号令转入该目次,细心浏览个中的多个README文件INSTALL文件。在碰到某些成绩时,这些文件能够会帮上大忙呢。
MySQL带有一些便当的设置装备摆设剧本法式。只须复杂地键入./configure,您就能够让这些法式为您完成良多任务。假如您需求明白指定要做的工作,可使用./configure -help号令,它会给您列出你可使用的选项。例如,假如您正在一台内存较少的机械长进行编译,那末可使用--with-low-memory选项。我喜好把MySQL装置在一个总目次下,而不是装置在机械上多个目次下,所以我会指定装置目次,并指定-prefix选项。
您还可以指定很多其他选项,象编译过程当中要略失落哪些局部、保存哪些局部等。咱们无妨假定要全体装置在办事器的/usr/local/mysql目次下。这意味着咱们将键入./configure -prefix=/usr/local/mysql号令。
设置装备摆设剧本法式运转时会反省您的体系,然后生成一些文件来包管编译的顺遂停止。假如该剧本法式掉败,它也会显示一些有效的毛病信息告知您掉败的缘由。人人常常会碰到剧本法式在寻觅多线程库文件时掉败。此时您应该反省一下体系中是不是已装置了MIT-pthreads,假如没有,那末请您装置该软件。Linux用户则必需装置LinuxThreads。这些库文件关于MySQL的多线程运转形式(也就是运转它本人的多个版本〕长短常关头的。
假如一切都顺遂停止的话,只须复杂键入make号令,然后就能够去泡杯咖啡了。MySQL是相当庞杂的法式,编译起来得用一段工夫。假如发明毛病,可以反省文档,看看只否您漏失落了某些与您的操作体系有关的筹办任务。
接上去,键入make install号令,一切必须的文件城市装置到响应的目次。您差不多就能够入手下手利用了!假如您是MySQL老手,之前从未装置过MySQL,那您得创立默许的允许权限才干装置,因而请键入...scripts/mysql_install_db来停止响应的设置。
就如许。咱们的筹办任务完成了。再上面所要做的就是在机械启动时主动启动数据库,并在关机时主动封闭数据库。是的,这项任务也有一个专门的剧本法式。mysql.server start号令可以启动数据库,而mysql.server stop可以封闭数据库。其实是再复杂不外了。假如您想手动启动数据库(如许就不必重启机械了),你以进到装置MySQL的最下层目次(/usr/local/mysql)然后键入bin/safe_mysqld &号令。
咱们已完成了一半了。接上去是PHP局部。>>
3、装置PHP
好,看到这里时,但愿您已把MySQL装置好并运转起来了。那其实是太成心思了!上面是PHP...这个进程要轻易一些,不外那些大批的选项仍是令人目炫凌乱。固然,您大可不用惊惶。您随时可以重头再来,从头编译PHP,依据需求来到场或去失落某个选项。
PHP的老家在http://www.php.net/。这个网站信息量极大,从开辟项目内容到软件毛病呈报都有。和MySQL一样,您可以选一个离您比来的镜像网站下载。很明显,您失掉网站的Downloads局部去下载PHP。
这里您的选择不是良多。有一些预选编译好的二进制文件,但那都是实行性的。假如您不是在Windows平台上,那就下载源代码,本人编译一下吧。
然而咱们仍是先谈谈Windows。在利用PHP时,普通的作法是在Windows体系上开辟,然后在Unix办事器上运转。您终究能够也会选择这类体例,这就需求您对两种平台下的装置都很熟习才行。
下载Windows二进制文件后,您可以用您喜好的任何一种ZIP解紧缩法式,把软件包中的文件解压到C盘的php3目次下。软件包中的README文件对装置过程当中的细节作了局部申明,然而咱们在这里再对这个文件中的关头内容做个读者文摘:假如您不想把PHP装置在C:\php3目次,而是其余目次,那末您得编纂解紧缩出来的文件中谁人.inf文件。
在php3目次中,您会发明良多.dll文件。把一切文件名不是以php_开首的那些.dll文件都移到\windows\system目次下。然后,把php.ini-dist文件改一下名,改成php3.ini,并把它移到\windows目次下。假如您翻开这个文件,会发明外面有良多风趣的器材可以改。如今,把含有:
extension=php3_mysql.dll
内容的那一行的正文去失落。
假如您利用的是Win32平台上的Apache办事器,那末请设置Apache,使其可以辨认并注释PHP文件。您需求在http.conf文件或是srm.conf文件(详细是哪个文件取决于您利用的Apache软件的版本)中到场下一行:
Action application/x-httpd-php3 "php3/php.exe"
AddType application/x-httpd-php3 .php3
或,假如您利用的是IIS,那末请用鼠标右键单击php_iis_reg.inf文件,并选择“装置”。您得从头启动体系,才干使方才所做的修改失效。
OK,说完了Windows,再来讲说Unix。固然,咱们要从源代码入手下手编译。与MySQL类似,把源文件下载、解包。PHP也一样包括一个设置装备摆设剧本法式,可是您不克不及完整利用默许设置。运转./configure -help | more号令,可以逐页地旁观有哪些新的、风趣的选项。您必需选择是把PHP编译成内部CGI法式仍是Apache内嵌模块。假如您正在利用Apache Web办事器,而且您可以对它停止从头编译的话,请选择内嵌模块体例,这类体例运转更快,利用也更简捷。不然,您可以选CGI体例。别的,您还得指定将对MySQL的撑持局部编译出来。
如今咱们假定要之内嵌模块体例编译,并带有MySQL撑持局部。假如随后您需求增添其他选项或库文件的话,可以在今后再加出来。键入上面的号令:
./configure -with-apache=/path/to/apache/dir -with-mysql=/usr/local/mysql
假如您盘算之外部CGI法式体例来编译的话,请去失落-with-apache选项。设置装备摆设法式运转起来后,会创立响应的体系文件。接上去复杂地履行make号令就好了。
又可以喝一杯咖啡了。假如您在此时感应如坐针毡的话,不用忧虑。每一个人在初度装置PHP的时分都有一点近不及待的感到。再多喝点咖啡就是了。
假如您选择CGI法式体例来编译,那末如今可以就能够利用了。只须把发生的可履行文件复制到CGI法式目次下就好了。假如您利用Apache内嵌模块体例来编译,要再履行一下make install号令,把有关文件复制到Apache目次下。在该目次下,您可以依照Apache的文档申明,向个中到场PHP模块,偏重新编译Apache。
如今您得告知Web办事器若何经由过程PHP法式来处置页面内容。假如您利用的不是Apache,那您需求查阅Web办事器软件的文档,看看若何让它处置后缀是.php3的文件。Apache 1.3.x版本的用户仅须在httpd.conf或srm.conf文件中到场:AddType application/x-httpd-php3 .php3。假如您利用的是CGI法式体例,那您在AddType后面还得到场上面内容:
Action application/x-httpd-php3 "php3/php.exe
就是如许。您的命运还不那末差,如今MySQL也运转起来了,PHP也任务正常了。别忘了,在碰到成绩时可以去查阅罕见成绩解答和软件文档。还可以尝尝电子邮件会商组。
既然咱们已停止了这么多,上面咱们可以实践操练了。>>
4、第一个剧本
假如我告知您真正忧伤的一关已过了,您必定会很乐意。软件的装置进程老是没法意料,由于体系跟体系之间可以说是千差万别。不外您命运不错,数据库运转起来,PHP也编译装置终了,Web办事器也能够准确处置扩大名为.php3的文件了。
咱们上面就入手下手正式上路,要写第一个剧本法式了。创立一个文本文件,在个中到场上面的内容:
<html><body><?php$myvar = "Hello World";echo $myvar;?></body></html>
如今,会见响应的URL,例如,http://myserver/test.php3。您应当可以看到页面中包括“Hello World”的文字。假如您看到的是毛病信息,查一下PHP文档,看看软件设置是不是准确无误。
就是如许了!这是您的第一个PHP法式。假如您检查一下这个页面的HTML源代码,您会发明外面只要Hello World 如许的文字。
那是由于PHP引擎过滤了文件内容,对个中的代码作了处置,转换成了尺度的HTML。
在下面的法式中您最早注重到的多是定界符,也就是以<?php入手下手的那几行。这个标志申明前面是PHP代码,而?>暗示代码停止。PHP的壮大的地方在于,这些代码可以以多种分歧体例放在恣意地位 - 我是说恣意地位。前面咱们会看到一些很风趣的例子,如今咱们仍是从最复杂的入手下手。假如您情愿,也能够设置PHP,让它利用短标志,<?和?>,但这与XML会产生抵触,所以要当心利用。假如您是从ASP转向PHP,您乃至可让PHP利用<%和%>作为定界符。
您还会注重到每行前面的分号。这些分号称为分隔符,用于分隔分歧的指令。您可以把一切的PHP代码写在一行里,用分隔符把号令分隔。然而那样看起来很乱,所以咱们在每一个分号前面都另起一行。记住,每行最初都要以分号停止。
最初,您会注重到myvar这个字以$符号开首。这个符号告知PHP,这是一个变量。咱们把“Hello World”赋给变量$myvar。一个变量可所以数字,也能够是数组。不论如何,一切的变量都是以$符开首。
PHP真正壮大的地方来历于它的函数。函数,根基上是处置指令序列。假如您把一切的选件都编译进PHP,总共会有超越700个函数。这些函数可让您做良多工作。
如今咱们再加进一些MySQL的内容出来。>>
5、装载数据库
如今,咱们要到场MySQL的内容了。要想晓得PHP中包括哪些选项,或办事器方面的一些情形,一种简捷的办法是利用函数phpinfo()。创立一个象上面如许的法式:
<html><body><?phpphpinfo();?></body></html>
保留这个法式,在阅读器中会见这个文件。您会看到网页中包括了一些风趣的、有效的信息,象如许。这些信息是有关办事器、Web办事器外部情况变量、PHP中包括的选项,等等。在第一段Extensions中,找到以MySQL开首的一行。假如没有找到,那申明MySQL撑持选项并没有编译进PHP。您可以再反省一下装置步调,查阅一下PHP文档,看您是不是漏失落了甚么。
假如找到了MySQL那一行,那您可以持续了。
从MySQL数据库中读取数据之前,咱们得先往数据库里放一些数据。在如今这一阶段,还没有一个简捷的办法来做这件工作。大多半的PHP法式都带有一个数据文件,该文件包括一些数据来创立并激活MySQL数据库。这个进程不在本教程局限以内,所以让我来替您做这件工作吧。
MySQL利用它本人的用户权限表。在装置时,会创立一个默许的用户(root),该用户是没有口令的。数据库办理员可以依据需求来增添用户并付与用户各类分歧的权限,但这项任务完整可以另写一本书了,所以咱们只利用root用户。假如您本人办理办事器和数据库,为root用户分派一个口令是很主要的。
总之,咱们仍是接着说数据库吧。对Win32用户来讲,很对不起,不外您要在DOS下做些任务。您不能不利用DOS窗口,或在“履行”窗口中键入一切号令。别忘了,输出号令时要带上MySQL/bin的目次名。Unix用户可以在MySQL的bin目次下输出号令,但号令必需以./开首,才干让法式运转起来。
咱们要做的第一件工作是实践创立出数据库。在号令行下,键入以下号令:
mysqladmin -u root create mydb
如许就创立了一个名为“mydb”的数据库。-u选项告知MySQL咱们利用的是root用户。
下一步,咱们要到场一些数据,这里咱们用的示例数据是人人都喜好用的员工数据库。咱们将会用到我后面提到过的数据文件。假如您想在这方面多懂得一些,可以查阅MySQL所带的手册或会见 http://www.turbolift.com/mysql/网站。
把上面的文字复制到一个文件中,把该文件存在MySQL的bin目次下(我假定文件名是mydb.dump)。
CREATE TABLE employees ( id tinyint(4) DEFAULT '0' NOT NULL AUTO_INCREMENT, first varchar(20), last varchar(20), address varchar(255), position varchar(50), PRIMARY KEY (id), UNIQUE id (id));INSERT INTO employees VALUES (1,'Bob','Smith','128 Here St, Cityname','Marketing Manager');INSERT INTO employees VALUES (2,'John','Roberts','45 There St , Townville','Telephonist');INSERT INTO employees VALUES (3,'Brad','Johnson','1/34 Nowhere Blvd, Snowston','Doorman');
假如文字是折行的,请确保每个INSERT语句都是另起一行的。如今,咱们要把数据到场到mydb数据库中了。在号令行下,键入上面的号令:
mysql -u root mydb < mydb.dump
此时您应当不会碰到甚么毛病。假如真的失足了,请细心反省一下是不是因下面的文字折行而引发毛病。>>
6、测试
OK,如今咱们已把数据导入到数据库中了。如今咱们来处置这些数据。把上面的文字存入一个文件中,把该文件存在Web办事器的文档目次下,后缀名为.php3。
<html><body><?php$db = mysql_connect("localhost", "root");mysql_select_db("mydb",$db);$result = mysql_query("SELECT * FROM employees",$db);printf("First Name: %s<br>\n", mysql_result($result,0,"first"));printf("Last Name: %s<br>\n", mysql_result($result,0,"last"));printf("Address: %s<br>\n", mysql_result($result,0,"address"));printf("Position: %s<br>\n", mysql_result($result,0,"position"));?></body></html>
我来注释一下下面的代码。mysql_connect()函数担任以指定的用户名(本例顶用户名是root)毗连到指定机械(在本例中机械是本机localhost)上的MySQL数据库。假如您想指定用户口令,您也能够把它送给这个函数。毗连的了局保留在变量$db中。
随后,mysql_select_db()函数告知PHP,咱们要读取的数据库是mydb。咱们可以在法式中同时毗连到多台机械上的多个数据库,但今朝咱们仍是限于毗连一个数据库。
接上去,mysql_query()函数完成最庞杂的局部。使用方才失掉的毗连了局标识,该函数把一行SQL语句送给MySQL办事器去向理。前往的了局保留在变量$result中。
最初,mysql_result()函数显示SQL查询号令所失掉的各个字段的值。使用变量$result,咱们就能够找到第一笔记录,纪录号是0,并将个中各字段的值显示出来。
假如您之前没用过Perl或C言语,那末printf函数的语法格局会显得很奇异。在下面的每行法式中,%s代表表达式第二局部中的谁人变量(例如,mysql_result($result,0,"position"))应当以字符串的模式显示出来。想更深切懂得printf,请参阅PHP文档。
这一课咱们就讲到这里了。咱们已胜利地编译、装置和设置了MySQL和PHP,而且运转了一个复杂的法式来读取数据库中的信息。在 第二课里,咱们会做一些更庞杂的任务,来显示多行纪录的数据,乃至与数据库相互互换数据。
持续勉力吧!
1、 while轮回
在这一课里,咱们将会持续深切下去,利用PHP和MySQL来写出一些复杂而有效的页面。咱们从昨天创立的数据库入手下手,显示库中的数据,然而会再略微加以润饰。
起首,咱们用上面的代码来查询数据库内容。
<html><body><?php$db = mysql_connect("localhost", "root");mysql_select_db("mydb",$db);$result = mysql_query("SELECT * FROM employees",$db);echo "<table border=1>\n";echo "<tr><td>姓名</td><td>职位</td></tr>\n";while ($myrow = mysql_fetch_row($result)) {printf("<tr><td>%s %s</td><td>%s</td></tr>\n", $myrow[1], $myrow[2], $myrow[3]);}echo "</table>\n";?></body></html>
您能够已注重到,咱们在这个法式里加进了一些新器材。最分明的是while()轮回。该轮回是说,只需数据库里还有纪录可读(利用mysql_fetch_row()函数),那就把该纪录赋给变量$myrow,然后履行大括号({})内的指令。细心看一下这里,这局部是对照主要的。
咱们应当注重一下mysql_fetch_row()函数。这里有一点小成绩,它前往的是一个数组,必需以数组下标来会见个中的某个字段。第一个字段下标为0,第二个是1,依此类推。在履行某些庞杂查询时,这么做几乎其实是太烦琐了。
如今咱们更细心地研讨一下轮回进程。法式前几行咱们在第一课的例子中已看到过了。然后,在while()轮回中,咱们从查询了局中读取一笔记录并把该纪录赋给数组$myrow。接着,咱们用printf函数把数据中的内容显示在屏幕上。随后,轮回重复履行,读取下一笔记录赋给$myrow。如许持续下去,直到一切纪录都已被读取完为止。
利用while()轮回的一个优点是,假如数据库查询没有前往任何纪录,那您也不会收到毛病信息。在刚履行轮回语句时,轮回前提就不知足,不会有任何数据赋给$myrow,法式就直接往下运转了。
然而假如查询未前往任何数据,咱们怎样让用户晓得这一点呢?咱们或许该供应点儿相干的动静给用户吧。这是可以做到的,上面咱们就看看怎样做。>>
2、 if-else
请看上面的法式。
<html><body><?php$db = mysql_connect("localhost", "root");mysql_select_db("mydb",$db);$result = mysql_query("SELECT * FROM employees",$db);if ($myrow = mysql_fetch_array($result)) { echo "<table border=1>\n"; echo "<tr><td>姓名</td><td>住址</td></tr>\n"; do { printf("<tr><td>%s %s</td><td>%s</tr>\n", $myrow["first"], $myrow["last"], $myrow["address"]); } while ($myrow = mysql_fetch_array($result));echo "</table>\n";} else {echo "对不起,没有找到纪录!"; }?></body></html>
这段法式中包括有很多新内容,不外这些内容都相当复杂。起首是mysql_fetch_array()函数。该函数与mysql_fetch_row()非常邻近,只要一点分歧:利用这个函数时,咱们可以经由过程字段名而不是数组下标来会见它前往的字段,好比$myrow["first"]。如许咱们就能够省很多力量了。别的,法式中还加进了do/while轮回和if-else前提剖断语句。
if-else前提剖断语句的含义是,假如咱们胜利地把一笔记录赋给了$myrow变量,那就持续;不然,就跳到else局部,履行那边的指令。
do/while轮回是咱们在上页顶用户的while()轮回的一个变体。咱们要用到do/while的缘由是:在最后的if语句中,咱们已把查询前往的第一笔记录赋给变量$myrow了。假如这时候咱们履行普通的while轮回(好比,while ($myrow = mysql_fetch_row($result)),那咱们就会把第二笔记录赋给$myrow,而第一笔记录就被冲失落了。然而do/while轮回可让咱们履行一次轮回体内容以后再来剖断轮回前提。因而,咱们就不会不当心漏失落第一笔记录了。
最初,假如查询了局没有任何纪录的话,法式就会履行包括在else{}局部的那些语句。假如您想看到这局部法式的履行情形,可以把SQL语句改成SELECT * FROM employees WHERE id=6,或改成其他模式,使得查询了局中没有任何纪录。
上面咱们来扩大一下轮回if-else 代码,使得页面内容加倍丰厚。信任您会喜好的。>>
3、 第一个法式剧本
咱们方才学到了轮回语句,上面咱们将在一个加倍实践一点的例子中看看若何应用它。然而在这之前,您应当晓得若何处置Web表格、查询参数串,和表单的GET办法和POST办法。不久之前咱们方才有文章引见这局部内容,您假如对这一局部还不太熟习的话可以看看那篇文章。
如今,咱们要处置查询参数串,正如您所晓得的,有三种办法可以把参数内容写入到查询参数串中。第一种是在表格中利用GET办法;第二种是在阅读器的地址栏中输出网址时直接加上查询参数;第三种是把查询参数串嵌入到网页的超链接中,使得超链接的内容象上面如许:<a href="http://my_machine/mypage.php3?id=1">。咱们如今要用到最初这一种办法。
一入手下手,咱们再来查询咱们的数据库,列出员工姓名。看看上面的法式,个中大局部内容咱们都已很熟习了。
<html><body><?php$db = mysql_connect("localhost", "root");mysql_select_db("mydb",$db);$result = mysql_query("SELECT * FROM employees",$db);if ($myrow = mysql_fetch_array($result)) { do { printf("<a href=\"%s?id=%s\">%s %s</a><br>\n", $PATH_INFO, $myrow["id"], $myrow["first"], $myrow["last"]); } while ($myrow = mysql_fetch_array($result));} else { echo "对不起,没有找到纪录!"; }?></body></html>
这里没甚么出格的,只是printf函数有些分歧。那咱们就来细心研讨一下。
起首要注重的是,一切的引号后面都有一个反斜杠。这个反斜杠告知PHP直接显示前面的字符,而不克不及把前面的字符看成法式代码来处置。别的要注重变量$PATH_INFO的用法。该变量在所用法式中都可以会见,是用来保留法式本身的称号与目次地位的。咱们之所以用到它是由于要在页面中再挪用这个法式自己。利用$PATH_INFO,咱们可以做到,即便法式被挪到其他目次,乃至是其他机械上时,咱们也能包管准确地挪用到这个法式。
正如我方才提到的,法式所生成的网页,个中包括的超链接会再次挪用法式自己。不外,再次挪用时,会到场一些查询参数。
PHP见到查询参数串中包括有“名字=值”如许的成对格局时,会作一些出格的处置。它会主动生成一个变量,变量称号与取值都与查询参数串中所给定的称号和取值不异。这一功效使得咱们可以在法式中判别出是第一次履行本法式仍是第二次。咱们所要做的只是问问PHP$id这个变量是不是存在。
当我晓得这个成绩的谜底后,我可以在第二次挪用法式时显示一些分歧的了局出来。请看:
<html><body><?php$db = mysql_connect("localhost", "root");mysql_select_db("mydb",$db);// display individual record// 显示单笔记录内容if ($id) { $result = mysql_query("SELECT * FROM employees WHERE id=$id",$db); $myrow = mysql_fetch_array($result); printf("名: %s\n<br>", $myrow["first"]); printf("姓: %s\n<br>", $myrow["last"]); printf("住址: %s\n<br>", $myrow["address"]); printf("职位: %s\n<br>", $myrow["position"]);} else { // show employee list // 显示员工列表 $result = mysql_query("SELECT * FROM employees",$db); if ($myrow = mysql_fetch_array($result)) { // display list if there are records to display // 假如有纪录,则显示列表 do { printf("<a href=\"%s?id=%s\">%s %s</a><br>\n", $PATH_INFO, $myrow["id"], $myrow["first"], $myrow["last"]); } while ($myrow = mysql_fetch_array($result)); } else { // no records to display // 没有纪录可显示 echo "对不起,没有找到纪录!"; }}?></body></html>
法式入手下手变得庞杂了,所以我在这外面加了正文,来注释一下究竟产生了甚么。您可以用//到场单行正文,或用/*和*/来括住大段的正文。
到这里,咱们已学会了第一个真正有效的PHP/MySQL剧本法式!如今,咱们要看看如何把Web表格加出去,而且向数据库发送数据。>>
4、 向办事器发送数据
如今咱们从数据库读取数据已没有太多坚苦了。然而怎样反过去向数据库发送数据呢?其实这不是PHP的成绩。
首选,咱们创立一个带有复杂表格的网页。
<html><body><form method="post" action="<?php echo $PATH_INFO?>">名:<input type="Text" name="first"><br>姓:<input type="Text" name="last"><br>住址:<input type="Text" name="address"><br>职位:<input type="Text" name="position"><br><input type="Submit" name="submit" value="输出信息"></form></body></html>
一样要注重$PATH_INFO的用法。就象我在第一课里讲到的,您可以在HTML代码中的恣意地位利用PHP。您也会注重到,表格中的每个元素都对应着数据库中的一个字段。这类对应关系并非必需的,这么做只是更直不雅一些,便于您今后了解这些代码。
还要注重的是,我在Submit按钮中到场了name属性。如许我在法式中可以摸索$submit变量是不是存在。因而,当网页被再次挪用时,我就会晓得挪用页面时是不是已填写了表格。
我应当指出,您纷歧定要把下面的网页内容写到PHP法式中,再返过去挪用法式自己。您完整可以把显示表格的网页和处置表格的法式分隔放在两个网页、三个网页乃至更多网页中,悉听尊便。放在一个文件中只是可使内容加倍紧凑罢了。
那好,咱们如今到场一些代码,来反省用户在表格中输出的内容。我会把用$HTTP_POST_VARS把一切查询参数变量都显示出来,这只不外是为了证实PHP的确把一切变量都传给了法式。这类办法是一个很有效的调试手腕。假如您要想看全体的变量,可以用$GLOBALS。
<html><body><?phpif ($submit) { // 处置表格输出 while (list($name, $value) = each($HTTP_POST_VARS)) { echo "$name = $value<br>\n"; }} else{ // 显示表格 ?> <form method="post" action="<?php echo $PATH_INFO?>"> 名:<input type="Text" name="first"><br> 姓:<input type="Text" name="last"><br> 住址:<input type="Text" name="address"><br> 职位:<input type="Text" name="position"><br> <input type="Submit" name="submit" value="输出信息"> </form> <?php} // end if,if停止?></body></html>
法式如今运转正常,那咱们如今就能够取到表格输出的内容,并把它们发送给数据库。
<html><body><?phpif ($submit) { // 处置表格输出 $db = mysql_connect("localhost", "root"); mysql_select_db("mydb",$db); $sql = "INSERT INTO employees (first,last,address,position) VALUES ('$first','$last','$address','$position')"; $result = mysql_query($sql); echo "Thank you! Information entered.\n";} else{ // 显示表格内容 ?> <form method="post" action="<?php echo $PATH_INFO?>"> 名:<input type="Text" name="first"><br> 姓:<input type="Text" name="last"><br> 住址:<input type="Text" name="address"><br> 职位:<input type="Text" name="position"><br> <input type="Submit" name="submit" value="输出信息"> </form> <?php} // end if,if停止?></body></html>
您如今已向数据库中拔出数据了。不外还有良多完美的任务要做。假如用户没有填写某一栏怎样办?在需求填入数字的中央填了文字怎样办?或填错了怎样办?
别忧虑。咱们一步一步来。>>
5、修正数据
在个教程中,我都把要履行的SQL语句放到一个变量($sql)中,然后才用mysql_query()来履行数据库查询。在调试时这是很有效的。假如法式出了甚么成绩,您随时可以把SQL语句的内容显示出来,反省个中的语法毛病。
咱们已进修了若何把数据拔出到数据库中。如今咱们来进修若何修正数据库中已有的纪录。数据的编纂包含两局部:数据显示和经由过程表格输出把数据前往给数据库,这两局部咱们后面都已讲到了。但是,数据编纂仍是有一点点分歧,咱们必需先在表格中显示出相干的数据。
起首,咱们回过火再看看第一课的法式代码,在网页中显示员工姓名。然而此次,咱们要把数据显示在表格中。法式看起来象上面如许:
<html><body><?php$db = mysql_connect("localhost", "root");mysql_select_db("mydb",$db);if ($id) { // 查询数据库 $sql = "SELECT * FROM employees WHERE id=$id"; $result = mysql_query($sql); $myrow = mysql_fetch_array($result); ?> <form method="post" action="<?php echo $PATH_INFO?>"> <input type=hidden name="id" value="<?php echo $myrow["id"] ?>"> 名:<input type="Text" name="first" value="<?php echo $myrow["first"] ?>"><br> 姓:<input type="Text" name="last" value="<?php echo $myrow["last"] ?>"><br> 住址:<input type="Text" name="address" value="<?php echo $myrow["address"] ?>"><br> 职位:<input type="Text" name="position" value="<?php echo $myrow["position"] ?>"><br> <input type="Submit" name="submit" value="输出信息"> </form> <?php} else { // 显示员工列表 $result = mysql_query("SELECT * FROM employees",$db); while ($myrow = mysql_fetch_array($result)) { printf("<a href=\"%s?id=%s\">%s %s</a><br>\n", $PATH_INFO, $myrow["id"], $myrow["first"], $myrow["last"]); }}?></body></html>
咱们方才是把字段内容写入到响应表格元素中的value属性里,这是响应复杂的。咱们再往行进一步,使法式可以把用户修正过的内容写回数据库去。一样,咱们经由过程Submit按钮来判别是不是处置表格输出内容。还要注重,咱们用的SQL语句稍稍有些分歧。
<html><body><?php$db = mysql_connect("localhost", "root");mysql_select_db("mydb",$db);if ($id) { if ($submit) { $sql = "UPDATE employees SET first='$first',last='$last', address='$address',position='$position' WHERE id=$id"; $result = mysql_query($sql); echo "感谢!数据更改完成\n"; } else { // 查询数据库 $sql = "SELECT * FROM employees WHERE id=$id"; $result = mysql_query($sql); $myrow = mysql_fetch_array($result); ?> <form method="post" action="<?php echo $PATH_INFO?>"> <input type=hidden name="id" value="<?php echo $myrow["id"] ?>">名:<input type="Text" name="first" value="<?php echo $myrow["first"] ?>"><br> 姓:<input type="Text" name="last" value="<?php echo $myrow["last"] ?>"><br> 住址:<input type="Text" name="address" value="<?php echo $myrow["address"] ?>"><br> 职位:<input type="Text" name="position" value="<?php echo $myrow["position"] ?>"><br> <input type="Submit" name="submit" value="输出信息"> </form><?php}} else { // 显示员工列表 $result = mysql_query("SELECT * FROM employees",$db); while ($myrow = mysql_fetch_array($result)) { printf("<a href=\"%s?id=%s\">%s %s</a><br>\n", $PATH_INFO, $myrow["id"], $myrow["first"], $myrow["last"]); }}?></body></html>
就是如许。在这个法式中已包括了咱们学过所大多半特征。您也已看到,咱们在一个if()前提辨别语句中又加了一个if()语句,来反省多重前提。
上面,咱们要把一切器材全都加在一同,写出一个很好的法式来。>>
6、完全的法式
在本课停止前,咱们要把一切器材到场到一个法式中,使它具有增添、编纂修正、删除纪录的功效。这是后面一切内容的一个延长,也能够作为极好的温习办法。看看上面的法式。
<html><body><?php$db = mysql_connect("localhost", "root");mysql_select_db("mydb",$db);if ($submit) { // 假如没有ID,则咱们是在增添纪录,不然咱们是在修正纪录 if ($id) { $sql = "UPDATE employees SET first='$first',last='$last', address='$address',position='$position' WHERE id=$id"; } else { $sql = "INSERT INTO employees (first,last,address,position) VALUES ('$first','$last','$address','$position')"; } // 向数据库收回SQL号令 $result = mysql_query($sql); echo "纪录修正胜利!<p>";} elseif ($delete) {// 删除一笔记录 $sql = "DELETE FROM employees WHERE id=$id"; $result = mysql_query($sql); echo "纪录删除胜利!<p>";} else { // 假如咱们还没有按submit按钮,那末履行上面这局部法式 if (!$id) { // 假如不是修正形态,则显示员工列表 $result = mysql_query("SELECT * FROM employees",$db); while ($myrow = mysql_fetch_array($result)) { printf("<a href=\"%s?id=%s\">%s %s</a> \n", $PATH_INFO, $myrow["id"], $myrow["first"], $myrow["last"]); printf("<a href=\"%s?id=%s&delete=yes\">(DELETE)</a>< br>", $PATH_INFO, $myrow["id"]); } } ?> <P> <a href="<?php echo $PATH_INFO?>">ADD A RECORD</a> <P> <form method="post" action="<?php echo $PATH_INFO?>"> <?php if ($id) { // 咱们是在编纂修正形态,因些选择一笔记录 $sql = "SELECT * FROM employees WHERE id=$id"; $result = mysql_query($sql); $myrow = mysql_fetch_array($result); $id = $myrow["id"]; $first = $myrow["first"]; $last = $myrow["last"]; $address = $myrow["address"]; $position = $myrow["position"]; // 显示id,供用户编纂修正 ?> <input type=hidden name="id" value="<?php echo $id ?>"> <?php } ?> 名:<input type="Text" name="first" value="<?php echo $first ?>"><br> 姓:<input type="Text" name="last" value="<?php echo $last ?>"><br> 住址:<input type="Text" name="address" value="<?php echo $address ?>"><br> 职位:<input type="Text" name="position" value="<?php echo $position ?>"><br> <input type="Submit" name="submit" value="输出信息"> </form><?php}?></body><`/html>
这段法式看起来很庞杂,但实践上其实不难。法式次要有三个局部。第一个if()语句反省咱们是不是已按下了谁人“输出信息”的数据提交按钮。假如是,法式再反省$id是不是存在。假如不存在,那咱们就是在增添纪录形态,不然,咱们是在修正纪录形态。
接上去咱们反省变量$delete是不是存在。假如存在,咱们是要删除纪录。注重,第一个if()语句反省的是用POST办法发送来的变量,而这一次咱们反省的是GET办法中传递过去的变量。
最初,法式默许的举措是显示员工列表和表格。一样,咱们要反省变量$id是不是存在。假如存在,咱们就依据它的值检索出响应的纪录显示出来。不然,咱们会显示一个空的表格。
如今,咱们已把所学的器材全体都放在一个法式外头了。咱们用到了while()轮回,用到了if()语句,而且履行了全体的SQL根基操作 - SELECT、INSERT、UPDATE和DELETE。别的,咱们也晓得若何在分歧的网页之间经由过程URL和表格输出来相互传递信息。
在第三课里,咱们要进修若何为网页增添智能化处置才能。
1、根基函数
接待离开本教程的第三课,也是最初一课。假如您已学过第一课和第二课,那末您已把握了MySQL和PHP的装置及编程的根基常识。上面咱们要引见PHP的一些其他函数,这些函数能够会对您有效,使您的开辟进程加倍复杂。起首咱们来看看头文件。
人人应当晓得头文件的一些根基概念吧?头文件是一个内部文件,它的内容被包括到主法式中。办法也非常复杂:在法式文件中援用头文件名,这个头文件就会包括出去了。在PHP中利用头文件,会触及两个函数:include()和require()。这两个函数不同很小,却很主要,所以咱们要仔细研讨一下。require()函数任务体例与XSSI相相似;不论在法式的哪一个局部利用了这个函数,只要法式一入手下手运转,头文件的内容就被作为法式自己的一局部来处置。因而,假如您在一个前提剖断语句中利用了require()函数,那末即便这个前提即便不为真,头文件也会被包括出去。
而include()函数只是在履行到这一条语句时才会把头文件内容包括出去。假如法式没运转到这里,那PHP是不会管它的。这就意味着,您在前提剖断局部利用include时,它会完整依照您但愿的那样任务。
还有,假如您用了require()函数,而您指定的头文件其实不存在,那末法式将会中断运转并发生毛病。假如您用了include(),法式会发生一个正告信息,然而会持续运转。您可以亲身试一下,运转上面的法式,然后把include()换成require(),再对照两个法式运转的了局。
<html><body><?phpinclude("emptyfile.inc");echo "Hello World";?></body></html>
我喜好把头文件的后缀名起成.inc,如许就能够把头文件和普通的法式辨别开来。假如您也这么做,那末请您修正Web办事器软件的设置装备摆设文件,使它可以把.inc文件也看成PHP文件来处置。不然,黑客们或许会猜到您的头文件名,然后用阅读器把头文件内容以纯文本格局显示出来。此时假如您的头文件中有些秘密信息(如数据库口令等)那就糟了。
那末,您用头文件来做甚么呢?很复杂!把对一切法式都通用的那些内容放到头文件里。象HTML文件头啦,脚注啦,数据库毗连代码啦,还有您本人界说的一些函数甚么的。把上面的文字拷贝到一个文件中,保留为header.inc。
<?php$db = mysql_connect("localhost", "root");mysql_select_db("mydb",$db);?><html><head><title><?php echo $title ?></title></head><body><center><h2><?php echo $title ?></h2></center>
然后再创立别的一个文件,名字是footer.txt,该文件可以包括一些法式停止时用到的一些文字和标志。
如今,咱们再来创立一个文件,这个文件外面是真实的PHP法式代码。试一下上面的代码,固然,您要确认MySQL数据库办事器正在运转。
<?php$title = "Hello World";include("header.inc");$result = mysql_query("SELECT * FROM employees",$db);echo "<table border=1>\n";echo "<tr><td>名字</td><td>职位</tr>\n";while ($myrow = mysql_fetch_row($result)) {printf("<tr><td>%s %s</td><td>%s</tr>\n", $myrow[1], $myrow[2], $myrow[3]);}echo "</table>\n";include("footer.inc");?>
看到产生了甚么事了吗?头文件里的内容被兼并到法式中,PHP把一切的代码都履行了一遍。注重在包括header.inc头文件之前$title是若何界说的。在header.inc中的代码可以会见到它的值。如许,网页的题目就被改失落了。如今,您可以在任何法式中利用header.inc头文件了,您所要做的不外是在每一个主法式中为$title变量取一个适合的值。
头文件、HTML、前提剖断语句,还有轮回语句,这些器材加在一些,您就能够用最简洁的代码,写出功效各别的各类庞杂法式来。在与函数同时利用时,头文件更能发扬它的效率,咱们前面就会看到。
接下去,咱们会引见出色的局部:数据校验。>>
2、 数据校验
想象一下如许的情况:咱们把数据库都设计妥善了,如今请用户输出信息来写到数据库中去。假定您有一个字段是请求数字类型的信息,好比价钱;而某个心爱的用户,却在这一栏里输出了文字信息,使得您的使用法式的履行进程呈现了毛病。对您在SQL语句中供应的文字类型的数据,MySQL数据库拒不承受,并向您提出了“严明抗议”。
怎样办呢?您要用数据校验来避免以上情况产生。
复杂地讲,数据校验是指咱们对数据(凡是是用户经过HTML表格传过去的)停止反省,看看它是不是服从必定的划定规矩。划定规矩可所以多种多样的,好比某一数据元素不克不及为空,或请求某一数据项的内容必需知足必定的请求(例如后面的例子中请求必需是数字而不是文字,或请求电子邮件地址中必定要包括一个“@”字等等)。
数据校验既可以在办事器一端作,也能够在客户端来作。PHP是用来作办事器一真个数据校验的,而JavaScript或其他客户端剧本编程言语则可以供应客户真个数据校验功效。本文说的是PHP,所以咱们在这里侧重引见办事器真个校验。假如您想找一些现成的、在客户端运转的数据较验法式,那您可以去网猴法式库看看。
临时把数据库放在一边不谈,咱们先来讲说PHP的数据校验办法。假如您情愿(或说,您想纪录咱们要校验的那些数据的话),您可以在后面所建的员工数据库的里到场其他字段,很复杂,用MySQL的ALTER 语句就好了。
有好几个PHP功效都可以用来作数据校验的任务,有些很复杂,有些则庞杂一些。个中strlen()是对照复杂的一个函数,它可以告知咱们一个变量的长度。
更庞杂一点儿的是ereg(),这个函数可以处置完全的惯例表达式来停止庞杂的校验。我不想就惯例表达式讲得太深,由于很多书都是专门写这个成绩的。不外我会鄙人一页中给出一些复杂的例子。
咱们先从一个复杂的例子入手下手吧。上面这个法式要反省一个变量是不是存在。
<html><body><?phpif ($submit) {if (!$first || !$last) { $error = "对不起,您必需填写一切的栏目!";} else {// 处置表格输出内容echo "感谢!";}}if (!$submit || $error) {echo $error;?><P><form method="post" action="<?php echo $PHP_SELF ?>">第一栏: <input type="text" name="名" value="<?php echo $first ?>"><br>第二栏: <input type="text" name="姓" value="<?php echo $last ?>"><br><input type="Submit" name="submit" value="输出信息"></form><?php} // if停止?></body></html>
这段法式中关头的中央是嵌套的前提剖断语句。第一层反省用户是不是按了发送数据的按钮。假如是,法式接着反省$first和$last两个变量是不是都存在。谁人 || 符号暗示“或”,而 ! 符号暗示“非”。那一句法式用普通言语描写就是“假如$first不存在或$last不存在,那末就把 $error变量置成上面的值。”
接上去,咱们再进一步,反省一段文字的长度。这对用户口令的反省是很有需要的,由于您不想让某些怠惰的用户输出只要1、两个字的口令,能够会请求他们输出六位长的口令。
咱们已讲到strlen()这个函数了。它只是复杂地前往一个数字,该数字等于被测变量中所包括的字符个数。这里,我修正一下下面的法式,反省一下$first与$last的长度。
<html><body><?phpif ($submit) {if (strlen($first) < 6 || strlen($last) < 6) { $error = "对不起,您必需填写一切栏目!";} else {// 处置表格输出内容echo "感谢!";}}if (!$submit || $error) {echo $error;?><P><form method="post" action="<?php echo $PHP_SELF ?>">第一栏: <input type="text" name="名" value="<?php echo $first ?>"><br>第二栏: <input type="text" name="姓" value="<?php echo $last ?>"><br><input type="Submit" name="submit" value="输出信息"></form><?php} // if停止?></body></html>
您可以履行一下这段法式,输出六个字或少于六个字的内容。这类校验很复杂,但很无效。>>
3、 处置惯例表达式
咱们略微讲讲用ereg()和eregi()两个函数处置惯例表达式。后面我已提过,这些函数有的很复杂,有的很庞杂,看您的实践需求而定。
利用惯例表达式,您可以对一个字符串停止反省,搜刮个中的一些布局形式,剖断这些形式是不是知足您的划定。最广泛的用法包含反省电子邮件地址是不是无效(固然,即便这类举措剖断无效,也不克不及包管邮件地址真的存在)。
咱们在这里不细究惯例表达式的庞杂细节了,仅仅给出几个实例。您可使用上一页顶用过的表格 - 把响应的法式代码复制过去,添加到上面的代码段中,就能够看到它是如何任务的。
起首,咱们要确保表格中各栏只能输出字母。上面的惯例表达式在用户输出一个或多个小写字母时剖断为真,而输出数字是不答应的:
if (!ereg("[a-Z]", $first) || !ereg("[a-Z]", $last)) {
如今咱们更进一步,反省字符串的长度是不是是四到六位字符长。用[[:alpha:]]是反省字符是否是字母的复杂体例。大括号内的数字反省字符个数。还要申明的是,^ 和 $ 分离代表字符串的入手下手和停止。
if (!ereg("^[[:alpha:]]{4,6}$", $first) || !ereg("^[[:alpha:]]{4,6}$", $last)) {
最初,咱们来机关一个惯例表达式,来查验电子邮件地址的无效性。这类查验体例的后果已激发了相当多的会商。没有甚么器材是浑然一体的,不外我上面给出的这段法式仍是非常见效的。
我这段宝物法式是从PHP邮件会商组上得来的。那可是个好去向 - 常去看看吧。不错,这段法式看起来是有点乱糟糟的。
if (!ereg('^[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+'.'@'.'[-!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~]+\.'.'[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+$', $last)) {
别花太多工夫来细究这段代码了,仍是先到下一页内容吧。>>
4、 简捷办法
后面的惯例表达式怎样?很成心思,是吧?如果在每一个需求反省电子邮件地址的法式里都写上这么一段法式,那才真叫成心思呢?!想一想看吧,得写那末七零八落的一段法式,还得写上那末多遍!...不外,固然了,还有更简捷的办法。
还记得后面咱们学过的头文件吗?它能让咱们写一段法式,象是这个电子邮件地址的反省法式,然后把这段法式包括进多个法式外面去。如许,咱们要改写这段法式时,只须修改一处就好了,不必修正多个文件。
然而,要做到这一点,咱们必需用到函数。
咱们已用过良多次函数了。每次咱们查询数据库或反省字符串长度时,咱们都是用函数来做的。这些函数是PHP自带的。假如您是位热情的法式员,您可以用本人编写的函数来扩大PHP自己的功效。但对本教程而言,这局部内容是太甚深邃了一点。咱们要创立的函数不是那一种,而是写在PHP剧本法式外部的函数。
函数就是一段法式代码,咱们可以把一个或多个值传给这段代码,然后这段代码会处置咱们传给它的数据并前往一个值。依据实践需求,函数可以很复杂,也能够非常庞杂。然而只需咱们传出来一个数,然后能失掉一个数,您管它外面有是庞杂仍是复杂呢!这就是函数的心爱的地方。
PHP里的函数与C言语里的函数体现差不多。当咱们界说函数时,必需指明函数需求吸收甚么样的数据。一入手下手好象不太好了解为何它要吸收数据出来,不外如许可以避免产生一些奇异的成绩。函数之所以能做到这一点,是由于函数外面的变量都是公有变量,也就是说,它只在该函数外部存在。例如,您在法式中有一个变量叫$myname,假如您创立了一个函数,想让这个函数也利用谁人$myname变量(值也不异),那是不可的。您可以在函数外部创立一个变量,名字也叫$myname,这两个变量可以各平相处,而各自取分歧的值。不外我可不建议您这么做!您假如真的这么做了,等半年后您再来修正如许的法式时,您能够就会被弄懵懂了。
那咱们如今就来创立一个函数,先来个复杂的。咱们要给它取个名字,指定它要吸收甚么的变量。在挪用这个函数之前,咱们还得界说这个函数。
<html><body><?phpfunction addnum($first, $second) {$newnum = $first + $second;return $newnum;}echo addnum(4,5);?></body></html>
这就好了!起首,咱们创立了第一个本人的函数。咱们界说了两个新变量,$first和$second,注重它们是如何被界说的。在挪用这个函数时,要给这两个变量按它们呈现的按次赋好值 - 4赋给$first,5赋给$second。然后咱们复杂地把这两个数加在一同,前往了局。“前往”在这里的意思是把了局送归去。在法式最初局部咱们把数字9显示出来。
咱们再来创立一个函数,让它对咱们的数据库使用有点匡助。一个能妥帖处置毛病的函数怎样?尝尝上面的法式:
<html><body><?phpfunction do_error($error) {echo "噢,好象有点儿成绩...<br>";echo "体系呈报的毛病是:$error.\n<br>";echo "最好是临时封闭网站并告诉体系办理员。";die;}if (!$db = @mysql_connect("localhost","user", "password")) {$db_error = "没法毗连到MySQL数据库";do_error($db_error);}?></body></html>
在运转法式之前,尝尝封闭MySQL数据库,或利用毛病的用户名或口令。您会看到友爱的、有效的毛病信息 。仔细的伴侣会注重到在mysql_connect()函数之前的谁人@符号。它会克制体系毛病信息,使得法式只能从do_error()函数那边失掉有关的毛病信息。您还会注重到,咱们可以把一个在别处界说的变量作为参数传给函数,而不是在挪用时直接赋一个值。
还记得我过函数利用的是公有变量吧?这话说得不完整对。现实上,您可让函数会见到函数里面的变量。您能够要写一个函数,用它来查询数据库,然后把了局显示在多个网页中。您不想每次都把数据库毗连标识都传给函数。在这类情形下,您可以把毗连标识界说成一个全局的变量。例如:
<html><body><?phpfunction db_query($sql) {global $db;$result = mysql_query($sql,$db);return $result;}$sql = "SELECT * FROM mytable";$result = db_query($sql);?></body></html>
这是个很复杂的函数,但主要的是,您在挪用这个函数时,不用传递$db变量 - 您可以经由过程 global这个字使得函数可以会见到该变量。在这条语句中您可以界说多个全局变量,各个全局变量之间用逗号离隔。
最初,您可使用可选参数,如许看起来您已是真实的专家了。这外面关头的一点是,在函数中界说参数时要给它指定一个缺省值。然后您在挪用这个函数时,假如不为该参数变量指定其他值,那末函数会主动把缺省值赋给这个变量。假如您指定了其他值,那末缺省值就不起感化了。
不太分明?例如说,您在毗连数据库时,几近老是毗连到不异的办事器,而且利用不异的用户名和口令。不外有时分,您也需求毗连到其他的办事器。看看上面的法式:
<html><body><?phpfunction db_connect($host = "localhost", $user="username", $pass="graeme") {$db = mysql_connect($host, $username, $password);return $db;}$old_db = db_connect();$new_host = "site.com";$new_db = db_connect($new_host);?></body></html>
很“酷”是否是?在界说函数时,函数外部用到的变量也界说好了。第一次挪用这个函数时,全体参数变量都是用的缺省值。第二次挪用时,办事器名变了,而用户名和口令没有变。真是太棒了!
想一想您在甚么中央还能用到函数。您可以用函数来作数据校验,来完成经常使用的功效,等等。在对Web网页上显示的文字作处置时,我用到了良多函数。我可以一次完成对文字的反省、解析和修正,来到场换行符和HTML标志等。
如今,剩下的就是我要给您的一些忠言了。>>
5、进阶技能
谈起数据库开辟,咱们有良多器材要学。假如您还没有进修过如何停止数据库设计,和如何在分歧的平台上牢靠地运转数据库,那末请您从速去找本这方面的好书来读一读。这方面的才能会带给您没法估计的优点,从久远的目光看,它会为您节俭大批的工夫与精神。还有,仔细学学MySQL。这是一个庞杂而风趣的数据库,有良多不错的文档。学学数据库的表布局、数据类型,还有SQL。假如您真正把握了SQL,您可以完成相当多的实践任务。
最初,还有PHP。您想要的一切几近都可以在PHP的网站上找到,包含周全的文档、邮件会商组的会商内容、法式代码库,等等。进修PHP的一个绝好的举措是研讨用户手册中给出的实例,并查阅网上的代码。网友们宣布的代码包含很多函数和类,您可以在本人的法式中直接利用,而不用本人从头来过。别的,假如您碰到成绩,邮件会商组是一个十分值得使用的资本。PHP的开辟人员本人也会列入邮件会商组,还有很多经历丰厚的高手们,他们都可以匡助您处理成绩。
祝您编程顺遂,一切顺遂 另外要叮嘱各位的是,抵御诱惑,ASP/PHP/JSP/.NET的对比也许会让你无所适从,你也许学了一半PHP,又开始打C#的主意,或者有人说JAVA很强,这个时候的你绝对不能动摇,哪怕你真想学。 |
|