|
当我们运行以上脚本时,将会看到由于程序没有返回任何数据而出现的错误提示。这里,我们为了更好的说明问题选择了一个非常直观的例子。在现实当中,有时问题并不会这么简单。相信大家都已经找到了出现问题的原因,那就是“print $Combined_Result;”中的变量名称“$Combined_Result”应当改为“$Combine_Result”。 事实上,脚本中任何一处出现的拼写错误都会导致同样的问题。如果用户怀疑自己的程序中有拼写错误的话,一个非常好的检查方法就是在变量的前后显示文字信息。例如:
print “The Combined Result is: |”.$Combined_Result.“|”;
按照上述方法替换输出语句的脚本重新执行之后的结果如下:
The Combined Result is: ||
其中,在两个管道符号“|”之间没有任何内容。按照这种方法,我们就可以在程序中找到出现问题的变量。
下面,我们再举一个更加复杂的例子进行说明。
现在,很多网络应用都需要对用户的身份进行验证。一个最简单的实现脚本可以如下:
<? $Password=“Secret”; $Name=“admin”; function VerifyPassword ($UserPassword, $UserName){ if ($Password=$UserPassword && $Name=$UserName){ return 1; } else { return 0;} } if (VerifyPassword (“foo1ish”,“admin”)){ print “The Password is correct”; } else { print “I’m sorry, the password is incorrect”; } ?>
虽然在上述脚本中调用VerifyPassword函数时输入的是错误的密码,但是程序运行之后仍然会产生如下结果:
The Password is correct
问题可能会出现在任何地方,下面就让我们使用排除法一一检查。首先,我们很难确定脚本最后的“if”条件语句是否正确。虽然看上去好象是没有问题,但是为了确保程序正确无误,我们不能放过任何一个环节。因此,我们将该条件语句注释掉,同时按照前面介绍的方法对VerifyPassword()函数进行输出。具体如下:
<? $Password=“Secret”; $Name=“admin”; function VerifyPassword ($UserPassword, $UserName){ if ($Password=$UserPassword && $Name=$UserName){ return 1; } else { return 0;} } print “The result of VerifyPassword() is:”; print VerifyPassword (“foo1ish”, “admin”); /*if (VerifyPassword (“foo1ish”, “admin”)){ print “The Password is correct”; } else { print “I’m sorry, the password is incorrect”; }*/ ?>
因为我们使用了错误的密码,所以结果应当为0。但是程序运行之后,我们发现实际结果如下: phpma开源…
The result of VerifyPassword() is: 1
这样,我们就知道问题是出现在VerifyPassword()函数的身上。检查了一遍函数之后,我们怀疑问题可能出现在“if”语句中。所以我们屏蔽到VerifyPassword()函数中的条件语句,并进行如下输出:
print “UserPassword => $UserPassword, Password => $Password,”; print “Password==UserPassword => ”.(int)($Password==$UserPassword).“<BR>”; print “UserName => $UserName, Name => $Name, ”; print “Name==UserName =>”.(int)($Name==$UserName).“<BR>”;
(说明:我们使用(int)($Password==$UserPassword)语句将比较结果转化为整数0或1)
程序修改之后的实际输出结果如下:
UserPassword => foo1ish, Password => , Password==UserPassword => 0 UserName => admin, Name => , Name==UserName => 1 I’m sorry, the password is incorrect
这里,我们可以清楚的看出Password和Name两个变量都是空值,也就难怪判断语句不起作用了。
那么为什么$Password为空值呢?我们在程序的开头部分就已经明确的对$Password变量进行了赋值,但是因为某种原其变量值无法带入到VerifyPassword()函数中。回想一下PHP语言关于变量作用域的规定,我们可以立刻找到出现问题的原因,那就是如果要想在函数中使用变量,必须将该变量声明为全局变量。知道了错误的根源之后,我们在VerifyPassword()函数的第一行加入以下语句,然后重新运行程序:
global $Password, $Name;
程序运行结果如下: phpma开源…
UserPassword => foo1ish, Password => Secret, Password==UserPassword => 0 UserName => admin, Name => admin, Name==UserName => 1 The Password is correct
为什么?按理说我们应当得到密码不正确的错误提示。再一次仔细检查遍程序之后,终于发现原来我们把逻辑运算符“==”误用成“=”,这样就把$UserPassword变量的值赋给了$Password变量。把最后的这两处错误改正过来之后,完成的程序如下:
<? $Password=“Secret”; $Name=“admin”; function VerifyPassword ($UserPassword, $UserName){ global $Password, $Name; if ($Password==$UserPassword && $Name==$UserName){ return 1; } else { return 0;} } if (VerifyPassword (“foo1ish”, “admin”)){ print “The Password is correct”; } else { print “I’m sorry, the password is incorrect”; } ?>
执行程序得到如下结果: phpma开源…
I’m sorry, the password is incorrect.
输入正确密码重新运行时,得到以下结果:
The Password is correct
这样,我们就成功的找到并解决了问题。希望大家能够从以上的介绍中领悟到查找错误时的一些方法和思路。
关于数据库在WEB编程当中,数据库的作用已经越来越不容忽视。提到数据库,应当说PHP具有非常强大的数据库支持功能,从FileMaker到Oracle,几乎与所有的数据库系统都可以实现无缝连接。为了方便本文的讲解,我们将主要以MySQL为例进行说明。不过对于其它的数据库应用也同样适用。
使用PHP进行数据库操作一般需要包括以下语句: phpma开源…
<? $Host="localhost"; $MySQL_UserName="root"; $MySQL_UserPass="password"; $MySQL_Database="db"; $Query="SELECT * FROM domain"; mysql_connect ($Host, $MySQL_UserName, $MySQL_UserPass); mysql_select_db ($MySQL_Database); $Result_ID=mysql_query ($Query); while ($Result=mysql_fetch_row($Result_ID)){ print "------------------<BR>"; print "$Result[0]<BR>"; print "$Result[1]<BR>"; print "$Result[2]<BR>"; print "$Result[3]<BR>"; print "-------------------<BR>"; }?>
基本步骤包括建立与MySQL数据库的连接,选择数据库操作对象,然后执行查询语句。对于在上述过程中出现的错误的提示信息一般来说都能够较为准确和详细的描述所出现的问题。例如,“Connection failed due to a bad username”错误报告就清楚的指出由于用户名错误而导致与数据库的连接失败。
(阅读次数:)
共4页: 上一页 [1] [2] 3 [4] 下一页
|