首页 | 资讯动态 | linux基础 | 系统管理 | 网络管理 | 编程开发 | linux数据库 | 服务器技术 | linux相关 | linux认证 | 嵌入式 | 下载中心 | 专题 | linux招聘 | 镜像站
OKLinux中文技术站
·设为首页
·加入收藏
·联系我们
系统管理: 中文环境 系统管理 桌面应用 内核技术 | Linux基础: 基础入门 安装配置 常用命令 经验技巧 软件应用 | Linux数据库: Mysql Postgre Oracle DB2 Sybase other
网络管理: 网络安全 网络应用 Linux服务器 环境配置 黑客安全 | 编程开发: PHP CC++ Python Perl Shell 嵌入式开发 java jsp | PHP技术: PHP基础 PHP技巧 PHP应用 PHP文摘
Linux资讯 Linux招聘 Linux专题 Apache | Linux相关: 硬件相关 Linux解决方案 Linux认证 企业应用 其它Unix | 相关下载: 资料下载 参考手册 开发工具 服务器类 软路由 其它
 技术搜索:
会员中心 注册会员 高级搜索  
  → 当前位置:首页>编程开发>php>php基础>正文

PHP/MySQL三日通(3)

http://www.oklinux.cn  2007-02-09  来源: oklinux收集整理   会员收藏  游客收藏  【 】 

  一、 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> ";
echo "<tr><td>姓名</td><td>职位</td></tr> ";
while ($myrow = mysql_fetch_row($result)) {
printf("<tr><td>%s %s</td><td>%s</td></tr> ", $myrow[1], $myrow[2], $myrow[3]);
}
echo "</table> ";
?>
</body>
</html>

  您可能已经注意到,我们在这个程序里加进了一些新东西。最明显的是while()循环。该循环是说,只要数据库里还有记录可读(使用mysql_fetch_row()函数),那就把该记录赋给变量$myrow,然后执行大括号({})内的指令。仔细看一下这里,这部分是比较重要的。

  我们应该注意一下mysql_fetch_row()函数。这里有一点小问题,它返回的是一个数组,必须以数组下标来访问其中的某个字段。第一个字段下标为0,第二个是1,依此类推。在执行某些复杂查询时,这么做简直实在是太烦琐了。

  现在我们更仔细地研究一下循环过程。程序前几行我们在第一课的例子中已经看到过了。然后,在while()循环中,我们从查询结果中读取一条记录并把该记录赋给数组$myrow。接着,我们用printf函数把数据中的内容显示在屏幕上。随后,循环反复执行,读取下一条记录赋给$myrow。这样继续下去,直到所有记录都已被读取完为止。

  使用while()循环的一个好处是,如果数据库查询没有返回任何记录,那您也不会收到错误信息。在刚执行循环语句时,循环条件就不满足,不会有任何数据赋给$myrow,程序就直接往下运行了。

  但是如果查询未返回任何数据,我们怎么让用户知道这一点呢?我们也许该提供点儿相关的消息给用户吧。这是可以做到的,下面我们就看看怎么做。>>

  二、 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> ";
echo "<tr><td>姓名</td><td>住址</td></tr> ";
do {
  printf("<tr><td>%s %s</td><td>%s</tr> ", $myrow["first"], $myrow["last"], $myrow["address"]);
}
while ($myrow = mysql_fetch_array($result));
echo "</table> ";
} 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 代码,使得页面内容更加丰富。相信您会喜欢的。>>

  三、 第一个程序脚本

  我们刚刚学到了循环语句,下面我们将在一个更加实际一点的例子中看看如何运用它。但是在这之前,您应该知道如何处理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> ", $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 <br>", $myrow["first"]);
  printf("姓: %s <br>", $myrow["last"]);
  printf("住址: %s <br>", $myrow["address"]);
  printf("职位: %s <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> ", $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表格加进来,并且向数据库发送数据。




上一篇:PHP/MySQL三日通(6)   下一篇:用php实现生成Excel文件范例(1):客户端


收藏于收藏夹】 【评论】 【推荐】 【打印】 【关闭
相关文档
·PHP/MySQL三日通(6)
·回车还行替换
·PHP/MySQL三日通(7)
·用php插入实例
·PHP/MySQL三日通(4)
·php常见问题
·PHP新手上路(10)
·PHPMyVisites安装
·PHP 如何调用 JAVA 类库
·PHP:路在何方?
·初学入门 PHP 和 MySQL (2)
·PHP新手上路(8)
·PHP新手上路(2)
·PHP新手上路(6)
·php的正则表达式专题
·PHP入门速成
发表评论
密码: 匿名评论
评论内容:

(不超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规)
 
  最新文档
·用PHP执行Oracle存储过程示例
·用php做一个简单的表单
·用Socket发送电子邮件(二)
·用Socket发送电子邮件(一)
·用中文命名,让汉字走向程序开发
·在Linux下安装显卡驱动程序
·在PHP中用描点法“绘制”中文
·在线人数统计源代码
·怎么样可以把 phpinfo()屏蔽掉
·则表达式判断email和URL
·正则表达式(regular expression)
·正则表达式使用详解(二)
  阅读排行
·php.ini 中文版
·PHP安装全攻略:常见问题解答
·Linux新手入门常用命令大全
·入门教程:学习使用PHP数组
·利用PHP和CSS改变网页文字大小
·用AJAX实现聊天功能(part 1)
·PHP5学习笔记第二节PHP5的对象模型
·PHP程序编译中常见错误信息分析及解释
·PHP开发中最常见的文件操作疑难解答
·带你走进PHP世界 PHP新手上路之一
·PHPMyVisites安装
·使用PHP实现登陆验证码
·视频演示:Zend Platform功能特性详解
·基于PHP的AJAX技术实现文件异步上传
·关于PHP--session的问题集锦解决方案
网摘收藏: