php入门经典文章
2007-02-13 16:45
281 查看
看到一篇讲php的,正好有时也会用到php。所以收藏了。
varsc_project=1912586;varsc_invisible=1;varsc_partition=17;varsc_security="a1947b25";
varsc_project=1912586;varsc_invisible=1;varsc_partition=17;varsc_security="a1947b25";
varsc_project=1912586;varsc_invisible=1;varsc_partition=17;varsc_security="a1947b25";
PHP/MySQL三日通-第一天 原作者: | ||||||||||
您应该听说过开放源代码软件(OSS),除非最近六到八个月来您一直住在火星上。这场运动有着巨大的冲击力,已引起一些大公司的注意。象Oralce、Informix,还有多家公司都开始把他们的主力数据库产品移植到OSS的产物之一-Linux操作系统上。 如果您有足够的技术力量,拥有一个复杂庞大的关系数据库系统(RDBMS)则是如虎添翼。但是也许您对数据库还刚刚入门,您刚刚读了 那么我建议您使用PHP和MySQL。这两样东西加在一起,对于开发数据驱动的网站这项工作而言,真是最佳组合。其实用不着我多费唇舌解释。一项由 MySQL是一个小巧灵珑的数据库服务器软件,对于小型(当然也不一定很小)应用系统是非常理想的。除了支持标准的ANSISQL语句,它还支持多种平台,而在Unix系统上该软件支持多线程运行方式,从而能获得相当好的性能。对于不使用Unix的用户,它可以在WindowsNT系统上以系统服务方式运行,或者在Windows95/98系统上以普通进程方式运行。 PHP是一种服务器端解释的脚本语言。如果你接触过 除了免费这一点(当然,MySQL也有一些使用许可方面的限制),PHP-MySQL的组合还可以跨平台运行,这意味着您可以在Windows上开发,然后在Unix平台上运行。另外,PHP也能作为标准的CGI进程来运行,此时它是一个独立的脚本解释器,或者是Apache的一个嵌入模块。 如果您有兴趣使用其他数据库服务器的话,PHP也支持Informix、Oracle、Sybase、Solid和PostgreSQL,以及通用的ODBC。 PHP支持Internet开发的一些前沿技术。这些技术包括身份认证、 最后要说的是,两种软件都是大量程序员协同开发的,因此文档及邮件列表等支持方式很多。程序错误的修正很快,而如果您要求加入新功能的话,总会有人考虑您的要求,并且在可行性足够高的前提下加以实现。 说得够多了!我们来看看这篇教程里都有些什么内容吧。 第一课讲的是在Unix和Windows环境下安装这两个软件。如果您不太关心这个问题(也许您是在ISP的服务器上开发),您可以直接跳到 在第二课里,我们要学习一些更加复杂的脚本功能,比如循环、处理用户输入,以及与数据库交换数据等等。 第三课要讲的是确认功能,以及如何使您的脚本程序清晰简练。 我们开始吧。 二、安装MySQL 快点行动,拿到这些软件包,仔细研究一下吧。这可不是件容易的事儿。你从获取软件包、编译软件包到安装软件包的过程中都有不少的选择项。我们先从MySQL开始,因为有了它才能运行PHP。 MySQL中央网站是 在这时候你也会有多种选择。如果你是发烧友的话,可以下载源代码;否则,网上也有各种平台上运行的预先编译过的二进制文件可以直接下载。 另外,MySQL还为Windows用户准备了一个共享软件版本,它的版本号稍低一些。如果你想要最新的版本,得花钱买一个软件许可。MySQL还提供了ODBC驱动程序,使前端应用程序可以访问MySQL数据库。有关其他一些详细信息在它的网站上都有得介绍,您可以去看看。 预先编译过的Unix版本和Windows版本都很简单,只须解包即可使用,不需要做太多说明了。因此,我们来介绍一下源代码的编译。Windows用户请记住,您需要运行mysqld程序,该程序是在mysql/bin目录下。 下载压缩过的软件包文件,放在一个目录下。使用gzip和tar来解压缩和解包。比较快的做法是使用下面这样的命令: gunzip<mysql-xxxx.tar.gz|tarxvf- 其中,xxxx是你自己任取的一个版本标记。上面的命令将创建一个名为mysql-xxxx目录,所有的源程序文件都在这个目录下。通过执行cdmysql-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是相当复杂的程序,编译起来得用一段时间。如果发现错误,可以检查文档,看看只否您漏掉了某些与您的操作系统有关的准备工作。 接下来,键入makeinstall命令,所有必需的文件都会安装到相应的目录。您差不多就可以开始使用了!如果您是MySQL新手,以前从未安装过MySQL,那您得创建默认的许可权限才能安装,因此请键入...scripts/mysql_install_db来进行相应的设置。 就这样。我们的准备工作完成了。再下面所要做的就是在机器启动时自动启动数据库,并在关机时自动关闭数据库。是的,这项工作也有一个专门的脚本程序。mysql.serverstart命令可以启动数据库,而mysql.serverstop可以关闭数据库。实在是再简单不过了。如果您想手动启动数据库(这样就不用重启机器了),你以进到安装MySQL的最上层目录(/usr/local/mysql)然后键入bin/safe_mysqld&命令。 我们已经完成了一半了。接下来是PHP部分。 三、安装PHP 好,看到这里时,希望您已经把MySQL安装好并运行起来了。那实在是太有意思了!下面是PHP...这个过程要容易一些,不过那些大量的选项还是使人眼花缭乱。当然,您大可不必惊慌。您随时可以重头再来,重新编译PHP,根据需要来加入或去掉某个选项。 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软件的版本)中加入下一行: Actionapplication/x-httpd-php3"php3/php.exe" AddTypeapplication/x-httpd-php3.php3 或者,如果您使用的是IIS,那么请用鼠标右键单击php_iis_reg.inf文件,并选择“安装”。您得重新启动系统,才能使刚才所做的改动生效。 OK,说完了Windows,再来说说Unix。当然,我们要从源代码开始编译。与MySQL相似,把源文件下载、解包。PHP也同样包含一个配置脚本程序,可是您不能完全使用默认设置。运行./configure-help|more命令,可以逐页地观看有哪些新的、有趣的选项。您必须选择是把PHP编译成外部CGI程序还是Apache内嵌模块。如果您正在使用ApacheWeb服务器,并且您可以对它进行重新编译的话,请选择内嵌模块方式,这种方式运行更快,使用也更简便。否则,您可以选CGI方式。另外,您还得指定将对MySQL的支持部分编译进去。 现在我们假定要以内嵌模块方式编译,并带有MySQL支持部分。如果随后您需要增加其他选项或库文件的话,可以在以后再加进去。键入下面的命令: ./configure-with-apache=/path/to/apache/dir-with-mysql=/usr/local/mysql 如果您打算以外部CGI程序方式来编译的话,请去掉-with-apache选项。配置程序运行起来后,会创建相应的系统文件。接下来简单地执行make命令就行了。 又可以喝一杯咖啡了。如果您在此时感到坐立不安的话,不必担心。每个人在初次安装PHP的时候都有一点近不及待的感觉。再多喝点咖啡就是了。 如果您选择CGI程序方式来编译,那么现在可以就可以使用了。只须把产生的可执行文件复制到CGI程序目录下就行了。如果您使用Apache内嵌模块方式来编译,要再执行一下makeinstall命令,把有关文件复制到Apache目录下。在该目录下,您可以按照Apache的文档说明,向其中加入PHP模块,并重新编译Apache。 现在您得告诉Web服务器如何通过PHP程序来处理页面内容。如果您使用的不是Apache,那您需要查阅Web服务器软件的文档,看看如何让它处理后缀是.php3的文件。Apache1.3.x版本的用户仅须在httpd.conf或srm.conf文件中加入:AddTypeapplication/x-httpd-php3.php3。如果您使用的是CGI程序方式,那您在AddType前面还得加入下面内容: Actionapplication/x-httpd-php3"php3/php.exe 就是这样。您的运气还不那么差,现在MySQL也运行起来了,PHP也工作正常了。别忘了,在遇到问题时可以去查阅常见问题解答和软件文档。还可以试试 既然我们已经进行了这么多,下面我们可以实际操练了。 四、第一个脚本 如果我告诉您真正难过的一关已经过了,您一定会很高兴。软件的安装过程总是无法预料,因为系统跟系统之间可以说是千差万别。不过您运气不错,数据库运行起来,PHP也编译安装完毕,Web服务器也可以正确处理扩展名为.php3的文件了。 我们下面就开始正式上路,要写第一个脚本程序了。创建一个文本文件,在其中加入下面的内容:
就是这样了!这是您的第一个PHP程序。如果您查看一下这个页面的HTML源代码,您会发现里面只有HelloWorld这样的文字。 那是因为PHP引擎过滤了文件内容,对其中的代码作了处理,转换成了标准的HTML。 在上面的程序中您最先注意到的可能是定界符,也就是以<?php开始的那几行。这个标记说明后面是PHP代码,而?>表示代码结束。PHP的强大之处在于,这些代码可以以多种不同方式放在任意位置-我是说任意位置。后面我们会看到一些很有趣的例子,现在我们还是从最简单的开始。如果您愿意,也可以设置PHP,让它使用短标记,<?和?>,但这与XML会发生冲突,所以要小心使用。如果您是从ASP转向PHP,您甚至可以让PHP使用<%和%>作为定界符。 您还会注意到每行后面的分号。这些分号称为分隔符,用于分隔不同的指令。您可以把所有的PHP代码写在一行里,用分隔符把命令分开。但是那样看起来很乱,所以我们在每个分号后面都另起一行。记住,每行最后都要以分号结束。 最后,您会注意到myvar这个字以$符号开头。这个符号告诉PHP,这是一个变量。我们把“HelloWorld”赋给变量$myvar。一个变量可以是数字,也可以是数组。不管怎样,所有的变量都是以$符开头。 PHP真正强大之处来源于它的函数。函数,基本上是处理指令序列。如果您把所有的选件都编译进PHP,总共会有超过700个函数。这些函数可以让您做很多事情。 现在我们再加进一些MySQL的内容进去。 五、装载数据库 现在,我们要加入MySQL的内容了。要想知道PHP中包含哪些选项,或服务器方面的一些情况,一种简便的方法是使用函数phpinfo()。创建一个象下面这样的程序:
如果找到了MySQL那一行,那您可以继续了。 从MySQL数据库中读取数据之前,我们得先往数据库里放一些数据。在现在这一阶段,还没有一个简便的方法来做这件事情。大多数的PHP程序都带有一个数据文件,该文件包含一些数据来创建并激活MySQL数据库。这个过程不在本教程范围之内,所以让我来替您做这件事情吧。 MySQL使用它自己的用户权限表。在安装时,会创建一个默认的用户(root),该用户是没有口令的。数据库管理员可以根据需要来增加用户并赋予用户各种不同的权限,但这项工作完全可以另写一本书了,所以我们只使用root用户。如果您自己管理服务器和数据库,为root用户分配一个口令是很重要的。 总之,我们还是接着说数据库吧。对Win32用户来说,很对不起,不过您要在DOS下做些工作。您不得不使用DOS窗口,或者在“执行”窗口中键入所有命令。别忘了,输入命令时要带上MySQL/bin的目录名。Unix用户可以在MySQL的bin目录下输入命令,但命令必须以./开头,才能让程序运行起来。 我们要做的第一件事情是实际创建出数据库。在命令行下,键入下列命令: mysqladmin-urootcreatemydb 这样就创建了一个名为“mydb”的数据库。-u选项告诉MySQL我们使用的是root用户。 下一步,我们要加入一些数据,这里我们用的示例数据是大家都喜欢用的员工数据库。我们将会用到我前面提到过的数据文件。如果您想在这方面多了解一些,可以查阅MySQL所带的手册或访问 把下面的文字复制到一个文件中,把该文件存在MySQL的bin目录下(我假定文件名是mydb.dump)。
mysql-urootmydb<mydb.dump 此时您应该不会遇到什么错误。如果真的出错了,请仔细检查一下是否因上面的文字折行而引起错误。 六、测试 OK,现在我们已经把数据导入到数据库中了。现在我们来处理这些数据。把下面的文字存入一个文件中,把该文件存在Web服务器的文档目录下,后缀名为.php3。
随后,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,请参阅 这一课我们就讲到这里了。我们已经成功地编译、安装和设置了MySQL和PHP,并且运行了一个简单的程序来读取数据库中的信息。在第二课里,我们会做一些更复杂的工作,来显示多行记录的数据,甚至与数据库互相交换数据。 继续努力吧! |
PHP/MySQL三日通-第二天 原作者: | |||||||||||||||||||||
在这一课里,我们将会继续深入下去,使用PHP和MySQL来写出一些简单而有用的页面。我们从 首先,我们用下面的代码来查询数据库内容。
我们应该注意一下mysql_fetch_row()函数。这里有一点小问题,它返回的是一个数组,必须以数组下标来访问其中的某个字段。第一个字段下标为0,第二个是1,依此类推。在执行某些复杂查询时,这么做简直实在是太烦琐了。 现在我们更仔细地研究一下循环过程。程序前几行我们在 使用while()循环的一个好处是,如果数据库查询没有返回任何记录,那您也不会收到错误信息。在刚执行循环语句时,循环条件就不满足,不会有任何数据赋给$myrow,程序就直接往下运行了。 但是如果查询未返回任何数据,我们怎么让用户知道这一点呢?我们也许该提供点儿相关的消息给用户吧。这是可以做到的,下面我们就看看怎么做。 二、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*FROMemployeesWHEREid=6,或改成其他形式,使得查询结果中没有任何记录。 下面我们来扩充一下循环if-else代码,使得页面内容更加丰富。相信您会喜欢的。 三、第一个程序脚本 我们刚刚学到了循环语句,下面我们将在一个更加实际一点的例子中看看如何运用它。但是在这之前,您应该知道如何处理Web表格、查询参数串,以及表单的GET方法和POST方法。不久之前我们刚刚有 现在,我们要处理查询参数串,正如您所知道的,有三种方法可以把参数内容写入到查询参数串中。第一种是在表格中使用GET方法;第二种是在浏览器的地址栏中输入网址时直接加上查询参数;第三种是把查询参数串嵌入到网页的超链接中,使得超链接的内容象下面这样:<ahref="http://my_machine/mypage.php3?id=1">。我们现在要用到最后这一种方法。 一开始,我们再来查询我们的数据库,列出员工姓名。看看下面的程序,其中大部分内容我们都已经很熟悉了。
首先要注意的是,所有的引号前面都有一个反斜杠。这个反斜杠告诉PHP直接显示后面的字符,而不能把后面的字符当作程序代码来处理。另外要注意变量$PATH_INFO的用法。该变量在所用程序中都可以访问,是用来保存程序自身的名称与目录位置的。我们之所以用到它是因为要在页面中再调用这个程序本身。使用$PATH_INFO,我们可以做到,即使程序被挪到其他目录,甚至是其他机器上时,我们也能保证正确地调用到这个程序。 正如我刚才提到的,程序所生成的网页,其中包含的超链接会再次调用程序本身。不过,再次调用时,会加入一些查询参数。 PHP见到查询参数串中包含有“名字=值”这样的成对格式时,会作一些特别的处理。它会自动生成一个变量,变量名称与取值都与查询参数串中所给定的名称和取值相同。这一功能使得我们可以在程序中判断出是第一次执行本程序还是第二次。我们所要做的只是问问PHP$id这个变量是否存在。 当我知道这个问题的答案后,我可以在第二次调用程序时显示一些不同的结果出来。请看:
到这里,我们已经学会了第一个真正有用的PHP/MySQL脚本程序!现在,我们要看看怎样把Web表格加进来,并且向数据库发送数据。 四、向服务器发送数据 现在我们从数据库读取数据已经没有太多困难了。但是怎么反过来向数据库发送数据呢?其实这不是PHP的问题。 首选,我们创建一个带有简单表格的网页。
还要注意的是,我在Submit按钮中加入了name属性。这样我在程序中可以试探$submit变量是否存在。于是,当网页被再次调用时,我就会知道调用页面时是否已经填写了表格。 我应该指出,您不一定要把上面的网页内容写到PHP程序中,再返过来调用程序本身。您完全可以把显示表格的网页和处理表格的程序分开放在两个网页、三个网页甚至更多网页中,悉听尊便。放在一个文件中只是可以使内容更加紧凑而已。 那好,我们现在加入一些代码,来检查用户在表格中输入的内容。我会把用$HTTP_POST_VARS把所有查询参数变量都显示出来,这只不过是为了证明PHP确实把所有变量都传给了程序。这种方法是一个很有用的调试手段。如果您要想看全部的变量,可以用$GLOBALS。
别担心。我们一步一步来。 五、修改数据 在个教程中,我都把要执行的SQL语句放到一个变量($sql)中,然后才用mysql_query()来执行数据库查询。在调试时这是很有用的。如果程序出了什么问题,您随时可以把SQL语句的内容显示出来,检查其中的语法错误。 我们已经学习了如何把数据插入到数据库中。现在我们来学习如何修改数据库中已有的记录。数据的编辑包括两部分:数据显示和通过表格输入把数据返回给数据库,这两部分我们前面都已经讲到了。然而,数据编辑还是有一点点不同,我们必须先在表格中显示出相关的数据。 首先,我们回过头再看看第一课的程序代码,在网页中显示员工姓名。但是这次,我们要把数据显示在表格中。程序看起来象下面这样:
我们刚才是把字段内容写入到相应表格元素中的value属性里,这是相应简单的。我们再往前进一步,使程序可以把用户修改过的内容写回数据库去。同样,我们通过Submit按钮来判断是否处理表格输入内容。还要注意,我们用的SQL语句稍稍有些不同。
下面,我们要把所有东西全都加在一起,写出一个很好的程序来。 六、完整的程序 在本课结束前,我们要把所有东西加入到一个程序中,使它具有增加、编辑修改、删除记录的功能。这是前面所有内容的一个延伸,也可以作为极好的复习方法。看看下面的程序。
接下来我们检查变量$delete是否存在。如果存在,我们是要删除记录。注意,第一个if()语句检查的是用POST方法发送来的变量,而这一次我们检查的是GET方法中传递过来的变量。 最后,程序默认的动作是显示员工列表和表格。同样,我们要检查变量$id是否存在。如果存在,我们就根据它的值检索出相应的记录显示出来。否则,我们会显示一个空的表格。 现在,我们已经把所学的东西全部都放在一个程序里头了。我们用到了while()循环,用到了if()语句,并且执行了全部的SQL基本操作-SELECT、INSERT、UPDATE以及DELETE。另外,我们也知道如何在不同的网页之间通过URL和表格输入来互相传递信息。 在第三课里,我们要学习如何为网页增加智能化处理能力。 |
PHP/MySQL三日通-第三天 原作者: | |||||||||||||||||||||
欢迎来到本教程的第三课,也是最后一课。如果您已经学过 大家应该知道头文件的一些基本概念吧?头文件是一个外部文件,它的内容被包含到主程序中。方法也十分简单:在程序文件中引用头文件名,这个头文件就会包含进来了。在PHP中使用头文件,会涉及两个函数:include()和require()。这两个函数差别很小,却很重要,所以我们要认真研究一下。require()函数工作方式 而include()函数只是在执行到这一条语句时才会把头文件内容包含进来。如果程序没运行到这里,那PHP是不会管它的。这就意味着,您在条件判定部分使用include时,它会完全按照您希望的那样工作。 还有,如果您用了require()函数,而您指定的头文件并不存在,那么程序将会停止运行并产生错误。如果您用了include(),程序会产生一个警告信息,但是会继续运行。您可以亲自试一下,运行下面的程序,然后把include()换成require(),再比较两个程序运行的结果。
那么,您用头文件来做什么呢?很简单!把对所有程序都通用的那些内容放到头文件里。象HTML文件头啦,脚注啦,数据库连接代码啦,还有您自己定义的一些函数什么的。把下面的文字拷贝到一个文件中,保存为header.inc。
现在,我们再来创建一个文件,这个文件里面是真正的PHP程序代码。试一下下面的代码,当然,您要确认MySQL数据库服务器正在运行。
头文件、HTML、条件判定语句,还有循环语句,这些东西加在一些,您就可以用最简练的代码,写出功能各异的各种复杂程序来。在与函数同时使用时,头文件更能发挥它的效力,我们后面就会看到。 接下去,我们会介绍精彩的部分:数据校验。 二、数据校验 想象一下这样的情形:我们把数据库都设计妥当了,现在请用户输入信息来写到数据库中去。假设您有一个字段是要求数字类型的信息,比如价格;而某个可爱的用户,却在这一栏里输入了文字信息,使得您的应用程序的执行过程出现了故障。对您在SQL语句中提供的文字类型的数据,MySQL数据库拒不接受,并向您提出了“严正抗议”。 怎么办呢?您要用数据校验来防止以上状况发生。 简单地讲,数据校验是指我们对数据(通常是用户经由HTML表格传过来的)进行检查,看看它是否遵从一定的规则。规则可以是多种多样的,比如某一数据元素不能为空,或者要求某一数据项的内容必须满足一定的要求(例如前面的例子中要求必须是数字而不是文字,或者要求电子邮件地址中一定要包含一个“@”字等等)。 数据校验既可以在服务器一端作,也可以在客户端来作。PHP是用来作服务器一端的数据校验的,而JavaScript或其他客户端脚本编程语言则能够提供客户端的数据校验功能。本文说的是PHP,所以我们在这里着重介绍服务器端的校验。如果您想找一些现成的、在客户端运行的数据较验程序,那您可以去 暂时把数据库放在一边不谈,我们先来说说PHP的数据校验方法。如果您愿意(或者说,您想记录我们要校验的那些数据的话),您可以在前面所建的员工数据库的里加入其他字段,很简单,用MySQL的 有好几个PHP功能都可以用来作数据校验的工作,有些很简单,有些则复杂一些。其中strlen()是比较简单的一个函数,它能够告诉我们一个变量的长度。 更复杂一点儿的是ereg(),这个函数可以处理完整的 我们先从一个简单的例子开始吧。下面这个程序要检查一个变量是否存在。
接下来,我们再进一步,检查一段文字的长度。这对用户口令的检查是很有必要的,因为您不想让某些懒惰的用户输入只有一、两个字的口令,可能会要求他们输入六位长的口令。 我们已经讲到strlen()这个函数了。它只是简单地返回一个数字,该数字等于被测变量中所包含的字符个数。这里,我修改一下上面的程序,检查一下$first与$last的长度。
三、处理常规表达式 我们稍微讲讲用ereg()和eregi()两个函数处理常规表达式。前面我已经提过,这些函数有的很简单,有的很复杂,看您的实际需要而定。 使用常规表达式,您可以对一个字符串进行检查,搜索其中的一些结构模式,判定这些模式是否满足您的规定。最普遍的用法包括检查电子邮件地址是否有效(当然,即使这种办法判定有效,也不能保证邮件地址真的存在)。 我们在这里不细究常规表达式的复杂细节了,仅仅给出几个实例。您可以使用上一页中用过的表格-把相应的程序代码复制过来,添加到下面的代码段中,就可以看到它是怎样工作的。 首先,我们要确保表格中各栏只能输入字母。下面的常规表达式在用户输入一个或多个小写字母时判定为真,而输入数字是不允许的: if(!ereg("[a-Z]",$first)||!ereg("[a-Z]",$last)){ 现在我们更进一步,检查字符串的长度是否是四到六位字符长。用[[:alpha:]]是检查字符是不是字母的简单方式。大括号内的数字检查字符个数。还要说明的是,^和$分别代表字符串的开始和结束。 if(!ereg("^[[:alpha:]]{4,6}$",$first)||!ereg("^[[:alpha:]]{4,6}$",$last)){ 最后,我们来构造一个常规表达式,来检验电子邮件地址的有效性。这种检验方式的效果已经引发了相当多的讨论。没有什么东西是十全十美的,不过我下面给出的这段程序还是十分奏效的。 我这段宝贝程序是从PHP
四、简便方法 前面的常规表达式怎么样?很有意思,是吧?要是在每个需要检查电子邮件地址的程序里都写上这么一段程序,那才真叫有意思呢?!想想看吧,得写那么乱七八糟的一段程序,还得写上那么多遍!...不过,当然了,还有更简便的方法。 还记得前面我们学过的头文件吗?它能让我们写一段程序,象是这个电子邮件地址的检查程序,然后把这段程序包含进多个程序里面去。这样,我们要改写这段程序时,只须改动一处就行了,不用修改多个文件。 但是,要做到这一点,我们必须用到函数。 我们已经用过很多次函数了。每次我们查询数据库或检查字符串长度时,我们都是用函数来做的。这些函数是PHP自带的。如果您是位热心的程序员,您可以用自己编写的函数来扩充PHP本身的功能。但对本教程而言,这部分内容是太过高深了一点。我们要创建的函数不是那一种,而是写在PHP脚本程序内部的函数。 函数就是一段程序代码,我们可以把一个或多个值传给这段代码,然后这段代码会处理我们传给它的数据并返回一个值。根据实际需要,函数可以很简单,也可以十分复杂。但是只要我们传进去一个数,然后能得到一个数,您管它里面有是复杂还是简单呢!这就是函数的可爱之处。 PHP里的函数与C语言里的函数表现差不多。当我们定义函数时,必须指明函数需要接收什么样的数据。一开始好象不太好理解为什么它要接收数据进去,不过这样可以防止发生一些怪异的问题。函数之所以能做到这一点,是因为函数里面的变量都是私有变量,也就是说,它只在该函数内部存在。例如,您在程序中有一个变量叫$myname,如果您创建了一个函数,想让这个函数也使用那个$myname变量(值也相同),那是不行的。您可以在函数内部创建一个变量,名字也叫$myname,这两个变量可以各平相处,而各自取不同的值。不过我可不建议您这么做!您如果真的这么做了,等半年后您再来修改这样的程序时,您可能就会被弄糊涂了。 那我们现在就来创建一个函数,先来个简单的。我们要给它取个名字,指定它要接收什么的变量。在调用这个函数之前,我们还得定义这个函数。
我们再来创建一个函数,让它对我们的数据库应用有点帮助。一个能妥善处理错误的函数怎么样?试试下面的程序:
还记得我过函数使用的是私有变量吧?这话说得不完全对。事实上,您可以让函数访问到函数外面的变量。您可能要写一个函数,用它来查询数据库,然后把结果显示在多个网页中。您不想每次都把数据库连接标识都传给函数。在这种情况下,您可以把连接标识定义成一个全局的变量。例如:
最后,您可以使用可选参数,这样看起来您已经是真正的专家了。这里面关键的一点是,在函数中定义参数时要给它指定一个缺省值。然后您在调用这个函数时,如果不为该参数变量指定其他值,那么函数会自动把缺省值赋给这个变量。如果您指定了其他值,那么缺省值就不起作用了。 不太明白?比方说,您在连接数据库时,几乎总是连接到相同的服务器,并且使用相同的用户名和口令。不过有时候,您也需要连接到其他的服务器。看看下面的程序:
想想您在什么地方还能用到函数。您可以用函数来作数据校验,来完成常用的功能,等等。在对Web网页上显示的文字作处理时,我用到了很多函数。我可以一次完成对文字的检查、解析和修改,来加入换行符和HTML标记等。 现在,剩下的就是我要给您的一些忠告了。 五、进阶技巧 谈起数据库开发,我们有很多东西要学。如果您还没有学习过怎样进行数据库设计,和怎样在不同的平台上可靠地运行数据库,那么请您赶快去找本这方面的好书来读一读。这方面的能力会带给您无法估量的好处,从长远的眼光看,它会为您节省大量的时间与精力。还有,认真学学MySQL。这是一个复杂而有趣的数据库,有很多不错的文档。学学数据库的表结构、数据类型,还有SQL。如果您真正掌握了SQL,您可以完成相当多的实际工作。 最后,还有PHP。您想要的一切几乎都可以在PHP的网站上找到,包括全面的文档、邮件讨论组的讨论内容、程序代码库,等等。学习PHP的一个绝好的办法是研究用户手册中给出的实例,并查阅网上的代码。网友们发表的代码包括许多函数和类,您可以在自己的程序中直接使用,而不必自己从头来过。另外,如果您遇到问题,邮件讨论组是一个非常值得利用的资源。PHP的开发人员自己也会参加邮件讨论组,还有许多经验丰富的高手们,他们都可以帮助您解决问题。 祝您编程顺利,一切顺利! |
varsc_project=1912586;varsc_invisible=1;varsc_partition=17;varsc_security="a1947b25";
varsc_project=1912586;varsc_invisible=1;varsc_partition=17;varsc_security="a1947b25";
相关文章推荐
- 韩顺平_php从入门到精通_视频教程_第14讲_盒子模型经典应用②_作业布置_学习笔记_源代码图解_PPT文档整理
- 【原创】真正的驱动入门(—)[附小程序代码]作 者:CCDeath时 间:2007-12-07,23:13链 接:http://bbs.pediy.com/showthread.php?t=56192【文章标题】: 真正的驱动入门(—)[附小程序代码]【文
- V4L入门经典文章(转)
- (转)经典的JBOSS入门文章(转)经典的JBOSS入门文章
- 韩顺平_php从入门到精通_视频教程_第13讲_选择器使用细节_块元素和行内元素_盒子模型_盒子模型经典应用①_学习笔记_源代码图解_PPT文档整理
- 经典的php 协程文章
- [经典文章]PHP高级技巧全放送
- PHP类入门经典文章
- V4L入门经典文章(转)
- JavaScript入门经典的文章
- PHP常用代码大全(新手入门不可错过的好文章)
- IBM developerWorks中国近期经典PHP文章列表
- IBM developerWorks中国近期经典PHP文章列表
- php 文章经典文章
- spring aop 入门经典的 和 aop实现方式的几篇文章
- PHP扩展入门的好文章
- 【php学习】PHP 入门经典第一章笔记
- PHP 入门经典第二章笔记
- 推荐经典php书籍:PHP、MySQL和Apache入门经典(第5版)
- 【php学习】PHP 入门经典第二章笔记