飘飘悠悠 发表于 2015-2-16 00:25:20

PHP网页编程之技能:PHP+MYSQL静态网页编程纠错指南

刚开始写页面程序,调试完书中的例子。然后就可以尝试编写留言板了,   关于数据库在WEB编程傍边,数据库的感化已愈来愈不容无视。提到数据库,应该说PHP具有十分壮大的数据库撑持功效,从FileMaker到 Oracle,几近与一切的数据库体系都可以完成无缝毗连。为了便利本文的解说,咱们将次要以MySQL为例停止申明。不外关于其它的数据库使用也一样合用。
  利用PHP停止数据库操作普通需求包含以下语句:
  <?
  $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<BR>";
  print "$Result<BR>";
  print "$Result<BR>";
  print "$Result<BR>";
  print -------------------<BR>;
  }?>
  根基步调包含创立与MySQL数据库的毗连,选择数据库操尴尬刁难象,然后履行查询语句。关于在上述过程当中呈现的毛病的提醒信息普通来讲都可以较为正确和具体的描写所呈现的成绩。例如,“Connection failed due to a bad username”毛病呈报就清晰的指出因为用户名毛病而招致与数据库的毗连掉败。
  咱们可以对以上所提到的这些函数的前往值加以使用,从而削减呈现不用要的费事。例如,mysql_connect函数在毗连胜利时会前往一个毗连ID标识,假如毗连掉败则收回毛病提醒。对此,咱们可以停止以下使用:
  if (!mysql_connect (’localhost’, ’root’, ’password’)){
  print "Cannot connect to MySQL<BR>";
  exit;
  }
  当与数据库的毗连呈现成绩时,咱们可以输入毛病提醒,并终止法式的履行。从久远来看,这是一项十分好的提防办法。以此体例,咱们从头编写剧本以下:
  <?
  $Host="localhost";
  $MySQL_UserName="root";
  $MySQL_UserPass="password";
  $MySQL_Datab ="db";
  $Query="SELECT * FROM domain";
  if (!mysql_connect ($Host, $MySQL_UserName, $MySQL_UserPass)){
  print "Cannot connect to MySQL: ".mysql_error();
  exit;
  }
  if (!mysql_select_db ($MySQL_Database)){
  print "Cannot select db<BR>";
  exit;
  }
  if (!$Result_ID=mysql_query ($Query)){
  print "Query Error: ".mysql_error();
  exit;
  }
  while ($Result=mysql_fetch_row($Result_ID)){
  print ------------------<BR>;
  print "$Result<BR>";
  print "$Result<BR>";
  print "$Result<BR>";
  print "$Result<BR>";
  print -------------------<BR>;
  }?>
  如许,当法式呈现成绩时,咱们就能够立即找到毛病的本源,从而可以做到有的放矢。
  接上去,咱们就能够对数据库停止查询。不外,良多时分,当咱们运转编写好的查询语句时,却得不就任何前往数据。究竟是甚么中央失足了呢?最好的处理办法是把SQL语句付与一个变量,例如:
  <?
  ....
  $SQL="SELECT * FROM $TableName WHERE $ColumnName > $Limit";
  $Result_ID=mysql_query($QUERY);
  ...?>
  然后当呈现成绩时,利用“print”或“echo”号令显示该语句。注重反省$ColumnName和$Limit的拼写是不是准确,是不是有意傍边创立了新的变量。利用输入显示的办法可以很轻易的找到并处理拼写毛病的成绩。然而假如咱们将SQL语句显示出来以后依然没有找到分明的毛病该怎样办呢?这里咱们可以把输入的语句粘贴到象Mysql号令行接口如许的号令行东西中,看一看是不是可以前往数据。假如仍是没法处理成绩,就应当检查一下所利用帐号的用户权限。
  现在,咱们可使用很多收费供应的类完成绝大局部的数据库操作。PHP Classes(http://phpclasses.upperdesign.com/)上就有很多相干的信息,可以供有乐趣的用户参考。个中, MetaBase可以供应不依附某种数据库体系的查询和办理。假如用户正在同时利用几种分歧的数据库体系,或但愿本人的法式可以移植到其它的数据库平台上的话,可以寄望一下MetaBase的利用。
  注重事项最初,咱们把利用PHP停止编程的过程当中所应该注重的一些成绩停止一下汇总,但愿可以对人人有所匡助。
  1.反省(),[],和{}等符号,看看是不是成对呈现。
  2.反省字符串,注重假如要想在“”傍边再利用“”的话,必需利用本义符“\”。
  3.反省保存关头字的拼写是不是准确。例如,myslq_num_rows()应该改成mysql_num_rows。
  4.对比PHP用户手册(www.php.net/manual),反省法式的语法是不是准确。
  5.假如在函数中利用全局变量,必定不要忘了停止变量声明。
  6.假如但愿利用setCookie()函数设置Cookie信息,必定要确保在此之前没有输入任何字符,包含在“<?”或“<?php”之前不克不及有任何空格。“<?”必需作为法式的第一行。
  7.假如数据库查询操作掉败,利用echo或print写出查询语句,反省语法是不是准确,出格应该注重语句中呈现的变量。
  8.假如SQL语句没有分明成绩,可以测验考试着利用数据库体系所供应的号令行接口。
  9.假如成绩依然没有处理,应该反省是不是具有足够的数据库会见权限。
  10.假如呈现“can’t redeclare foo()”毛病,标明用户能够把统一个文件援用了两次。可使用include_once()函数防止呈现这一成绩。
  11.注重辨别巨细写。例如,$Foo和$FOO是两个分歧的变量。
  12.注重数组的准确利用格局。例如:$this->$foo()和$this->$variable应该分离改成$this->foo()和$this->variable。
分号的利用正象咱们平常写文章时必需要在每句话的开头处加上句号一样,PHP请求法式中的每条语句都必需利用分号“;”停止。这是一条最根基的语律例则,然而同时也最轻易呈现成绩。咱们在编写法式时,很少会一行一行的反省是不是漏失落了分号,然而一旦呈现任何一处忽略,解析法式就回立即收回毛病呈报。有时,呈报中能够会包括呈现成绩的语句行数。
  <?
  $Output="Hello World";
  echo $Output
  $Other="Blah";
  print $SomeMoreText;
  ?>
  上述代码的第二行“echo $Output”的开头处咱们漏失落了一个分号,假如履行该剧本将会发生以下毛病提醒:
  Parse error: parse error, expecting `’,’’ or `’;’’ in /usr/local/apache/htdocs/test.php on line 8呈报固然指出了呈现毛病的缘由,即漏失落了逗号“,”或分号“;”,然而却将呈现成绩的语句定在了第八行。由于这段代码十分复杂,咱们很轻易就能够找到真正呈现毛病的中央。然而,假如法式十分庞杂时,要想顺遂的找失足误就有些坚苦了。
  依据笔者以往的经历,建议采取以下办法:
  假如当毛病呈报中指出的语句没有分明的成绩时,可以反省位于该语句之前的其它指令行(不包含正文行)是不是准确。假如依然没有找到毛病,可以将呈报中指出的语句行正文失落(在该语句行的最后面加上“//”或“#”正文符号)或改成用户可以确保完整没有成绩的其它语句。以后,从头运转法式,假如毛病提醒依然指向统一行,就标明真正有成绩的语句应该位于被正文失落的语句行的后面。依照上述办法一一反省地位靠前的每行指令,直到毛病提醒信息产生改动。这时候,咱们就胜利的挖出了真实的祸首罪魁。
  变量的成绩与其它编程言语请求用户显式声明变量分歧,PHP言语答应用户主动利用一切变量而不用停止事前的声明。变量称号的拼写毛病成为困扰PHP用户的一个大成绩。
  <?
  function Combine ($FirstHalf, $SecondHalf)
  {
   $Combined_String=$FirstHalf.$SecondHalf;
   return $Combined_String;
  }
  $FirstString="WDVL - ";
  $SecondString="Illustrated Encyclopedia";
  $Combine_Result=Combine ($FirstString, $SecondString);
  print $Combined_Result;
  ?>
  当咱们运转以上剧本时,将会看到因为法式没有前往任何数据而呈现的毛病提醒。这里,咱们为了更好的申明成绩选择了一个十分直不雅的例子。在实际傍边,有时成绩其实不会这么复杂。信任人人都已找到了呈现成绩的缘由,那就是“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。然而法式运转以后,咱们发明实践了局以下:
   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;
法式运转了局以下:
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”;
 }
?>
履行法式失掉以下了局:
  I’m sorry, the password is incorrect.
输出准确暗码从头运转时,失掉以下了局:
  The Password is correct
如许,咱们就胜利的找到并处理了成绩。但愿人人可以从以上的引见中融会到查找毛病时的一些办法和思绪。
  关于数据库在WEB编程傍边,数据库的感化已愈来愈不容无视。提到数据库,应该说PHP具有十分壮大的数据库撑持功效,从FileMaker到Oracle,几近与一切的数据库体系都可以完成无缝毗连。为了便利本文的解说,咱们将次要以MySQL为例停止申明。不外关于其它的数据库使用也一样合用。
  利用PHP停止数据库操作普通需求包含以下语句:
  <?
  $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<BR>";
  print "$Result<BR>";
  print "$Result<BR>";
  print "$Result<BR>";
  print "-------------------<BR>";
  }?>
  根基步调包含创立与MySQL数据库的毗连,选择数据库操尴尬刁难象,然后履行查询语句。关于在上述过程当中呈现的毛病的提醒信息普通来讲都可以较为正确和具体的描写所呈现的成绩。例如,“Connection failed due to a bad username”毛病呈报就清晰的指出因为用户名毛病而招致与数据库的毗连掉败。
  咱们可以对以上所提到的这些函数的前往值加以使用,从而削减呈现不用要的费事。例如,mysql_connect函数在毗连胜利时会前往一个毗连ID标识,假如毗连掉败则收回毛病提醒。对此,咱们可以停止以下使用:
  if (!mysql_connect (’localhost’, ’root’, ’password’)){
  print "Cannot connect to MySQL<BR>";
  exit;
  }
  当与数据库的毗连呈现成绩时,咱们可以输入毛病提醒,并终止法式的履行。从久远来看,这是一项十分好的提防办法。以此体例,咱们从头编写剧本以下:
  <?
  $Host="localhost";
  $MySQL_UserName="root";
  $MySQL_UserPass="password";
  $MySQL_Database="db";
 $Query="SELECT * FROM domain";
  if (!mysql_connect ($Host, $MySQL_UserName, $MySQL_UserPass)){
  print "Cannot connect to MySQL: ".mysql_error();
  exit;
 }
  if (!mysql_select_db ($MySQL_Database)){
  print "Cannot select db<BR>";
  exit;
  }
  if (!$Result_ID=mysql_query ($Query)){
  print "Query Error: ".mysql_error();
  exit;
  }
  while ($Result=mysql_fetch_row($Result_ID)){
  print "------------------<BR>";
  print "$Result<BR>";
  print "$Result<BR>";
  print "$Result<BR>";
  print "$Result<BR>";
  print "-------------------<BR>";
  }?>
  如许,当法式呈现成绩时,咱们就能够立即找到毛病的本源,从而可以做到有的放矢。
  接上去,咱们就能够对数据库停止查询。不外,良多时分,当咱们运转编写好的查询语句时,却得不就任何前往数据。究竟是甚么中央失足了呢?最好的处理办法是把SQL语句付与一个变量,例如:
  <?
  ....
  $SQL="SELECT * FROM $TableName WHERE $ColumnName > $Limit";
  $Result_ID=mysql_query($QUERY);
  ...?>
  然后当呈现成绩时,利用“print”或“echo”号令显示该语句。注重反省$ColumnName和$Limit的拼写是不是准确,是不是有意傍边创立了新的变量。利用输入显示的办法可以很轻易的找到并处理拼写毛病的成绩。然而假如咱们将SQL语句显示出来以后依然没有找到分明的毛病该怎样办呢?这里咱们可以把输入的语句粘贴到象Mysql号令行接口如许的号令行东西中,看一看是不是可以前往数据。假如仍是没法处理成绩,就应当检查一下所利用帐号的用户权限。
在一个团队之中或者说是在一个公司的工作岗位上,需要注重团队之间的交流合作;在学习或工作上都要端正自己的态度,要以认真的态度来对每件事,这样才能让自己更快的投入、更快的学习,而不至于浪费自己的时间。

海妖 发表于 2015-2-16 01:32:37

开发工具也会慢慢的更专业,每个公司的可能不一样,但是zend studio是个大伙都会用的。

灵魂腐蚀 发表于 2015-2-23 20:23:47

找到的的资料很多都是在论坛里的,需要注册,所以我一般没到一个论坛都注册一个id,所有的id都注册成一样的,这样下次再进来的时候就不用重复注册啦。当然有些论坛的某些资料是需要的付费的。

小妖女 发表于 2015-2-28 19:05:28

微软最近出的新字体“微软雅黑”,虽然是挺漂亮的,不过firefox支持的不是很好,所以能少用还是少用的好。

再现理想 发表于 2015-3-5 23:15:07

如果你可以写完像留言板这样的程序,那么你可以去一些别人的代码了,

若相依 发表于 2015-3-7 12:15:29

你很难利用原理去编写自己的代码。对于php来说,系统的学习我认为还是很重要的,当你有一定理解后,你可你针对某种效果研究,我想那时你不会只是复制代码的水平了。

仓酷云 发表于 2015-3-11 00:22:55

没接触过框架的人,也不用害怕,其实框架就是一种命名规范及插件,学会一个框架其余的框架都很好上手的。

愤怒的大鸟 发表于 2015-3-15 08:39:21

遇到出错的时候,我经常把错误信息直接复制到 google的搜索栏,一般情况都是能搜到结果的,不过有时候会搜出来一大片英文的出来,这时候就得过滤一下,吧中文的弄出来,挨着式方法。

因胸联盟 发表于 2015-3-21 21:36:08

至于模板嘛,各位高人一直以来就是争论不休,我一只小菜鸟就不加入战团啦,咱们新手还是多学点东西的好。

兰色精灵 发表于 2015-3-25 06:32:26

有时候汉字的空格也能导致页面出错,所以在写代码的时候,要输入空格最好用引文模式。

爱飞 发表于 2015-3-27 13:22:55

其实也不算什么什么心得,在各位大侠算是小巫见大巫了吧,望大家不要见笑,若其中有错误的地方请各位大虾斧正。

山那边是海 发表于 2015-4-3 05:29:34

我要在声明一下:我是个菜鸟!!我对php这门优秀的语言也是知之甚少。但是我要在这里说一下php在网站开发中最常用的几个功能:

柔情似水 发表于 2015-4-7 03:40:44

作为一个合格的coder 编码的规范是必须,命名方面我推崇“驼峰法”,另外就是自己写的代码最好要带注释,不然时间长了,就算是自己的代码估计看起来都费事,更不用说别人拉。

只想知道 发表于 2015-4-11 11:44:33

兴趣是最好的老师,百度是最好的词典。

深爱那片海 发表于 2015-4-11 17:23:45

遇到出错的时候,我经常把错误信息直接复制到 google的搜索栏,一般情况都是能搜到结果的,不过有时候会搜出来一大片英文的出来,这时候就得过滤一下,吧中文的弄出来,挨着式方法。

谁可相欹 发表于 2015-4-11 23:03:15

php里的数组为空的时候是不能拿来遍历的;(这个有点低级啊,不过我刚被这个边界问题墨迹了好长一会)

活着的死人 发表于 2015-4-24 22:48:00

如果你可以写完像留言板这样的程序,那么你可以去一些别人的代码了,

老尸 发表于 2015-5-8 02:00:13

你很难利用原理去编写自己的代码。对于php来说,系统的学习我认为还是很重要的,当你有一定理解后,你可你针对某种效果研究,我想那时你不会只是复制代码的水平了。

不帅 发表于 2015-6-8 23:29:25

环境搭建好,当你看见你的浏览器输出“it works\\\\\\\"时你一定是喜悦的。在你解决问题的时候,我强烈建议多读php手册。

飘飘悠悠 发表于 2015-6-12 20:51:27

微软最近出的新字体“微软雅黑”,虽然是挺漂亮的,不过firefox支持的不是很好,所以能少用还是少用的好。
页: [1] 2
查看完整版本: PHP网页编程之技能:PHP+MYSQL静态网页编程纠错指南