PHP/MySQL三日通-第二天(一)

一、 while循环

五、修改数据

在这一课里,我们将会继续深入下去,使用PHP和MySQL来写出一些简单而有用的页面。我们从昨天创建的数据库开始,显示库中的数据,但是会再稍微加以润色。

在个教程中,我都把要执行的SQL语句放到一个变量中,然后才用mysql_query()来执行数据库查询。在调试时这是很有用的。如果程序出了什么问题,您随时可以把SQL语句的内容显示出来,检查其中的语法错误。

首先,我们用下面的代码来查询数据库内容。

我们已经学习了如何把数据插入到数据库中。现在我们来学习如何修改数据库中已有的记录。数据的编辑包括两部分:数据显示和通过表格输入把数据返回给数据库,这两部分我们前面都已经讲到了。然而,数据编辑还是有一点点不同,我们必须先在表格中显示出相关的数据。

$#@60;html$#@62;$#@60;body$#@62;$#@60;?php$db =
mysql_connect(“localhost”,
“root”);mysql_select_db(“mydb”,$db);$result = mysql_query(“SELECT *
FROM employees”,$db);echo “$#@60;table border=1$#@62;/n”;echo
“$#@60;tr$#@62;$#@60;td$#@62;姓名$#@60;/td$#@62;$#@60;td$#@62;职位$#@60;/td$#@62;$#@60;/tr$#@62;/n”;while
($myrow = mysql_fetch_row($result))
{printf(“$#@60;tr$#@62;$#@60;td$#@62;%s
%s$#@60;/td$#@62;$#@60;td$#@62;%s$#@60;/td$#@62;$#@60;/tr$#@62;/n”,
$myrow[1], $myrow[2], $myrow[3]);}echo
“$#@60;/table$#@62;/n”;?$#@62;$#@60;/body$#@62;$#@60;/html$#@62;

首先,我们回过头再看看第一课的程序代码,在网页中显示员工姓名。但是这次,我们要把数据显示在表格中。程序看起来象下面这样:

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

$#@60;html$#@62;$#@60;body$#@62;$#@60;?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);?$#@62;$#@60;form method=”post”
action=”$#@60;?php echo $PATH_INFO?$#@62;”$#@62;$#@60;input
type=hidden name=”id” value=”$#@60;?php echo $myrow[“id”]
?$#@62;”$#@62;名:$#@60;input type=”Text” name=”first”
value=”$#@60;?php echo $myrow[“first”]
?$#@62;”$#@62;$#@60;br$#@62;姓:$#@60;input type=”Text”
name=”last” value=”$#@60;?php echo $myrow[“last”]
?$#@62;”$#@62;$#@60;br$#@62;住址:$#@60;input type=”Text”
name=”address” value=”$#@60;?php echo $myrow[“address”]
?$#@62;”$#@62;$#@60;br$#@62;职位:$#@60;input type=”Text”
name=”position” value=”$#@60;?php echo $myrow[“position”]
?$#@62;”$#@62;$#@60;br$#@62;$#@60;input type=”Submit” name= bmit”
value=”输入信息”$#@62;$#@60;/form$#@62;$#@60;?php} else {//
显示员工列表$result = mysql_query(“SELECT * FROM employees”,$db);while
($myrow = mysql_fetch_array($result)) {printf(“$#@60;a
href=/”%s?id=%s/”$#@62;%s %s$#@60;/a$#@62;$#@60;br$#@62;/n”,
$PATH_INFO, $myrow[“id”], $myrow[“first”],
$myrow[“last”]);}}?$#@62;$#@60;/body$#@62;$#@60;/html$#@62;

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

我们刚才是把字段内容写入到相应表格元素中的value属性里,这是相应简单的。我们再往前进一步,使程序可以把用户修改过的内容写回数据库去。同样,我们通过Submit按钮来判断是否处理表格输入内容。还要注意,我们用的SQL语句稍稍有些不同。

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

$#@60;html$#@62;$#@60;body$#@62;$#@60;?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);?$#@62;$#@60;form method=”post”
action=”$#@60;?php echo $PATH_INFO?$#@62;”$#@62;$#@60;input
type=hidden name=”id” value=”$#@60;?php echo $myrow[“id”]
?$#@62;”$#@62;名:$#@60;input type=”Text” name=”first”
value=”$#@60;?phpecho $myrow[“first”]
?$#@62;”$#@62;$#@60;br$#@62;姓:$#@60;input type=”Text”
name=”last” value=”$#@60;?php echo $myrow[“last”]
?$#@62;”$#@62;$#@60;br$#@62;住址:$#@60;input type=”Text”
name=”address” value=”$#@60;?php echo $myrow[“address”]澳门新葡亰网站注册,
?$#@62;”$#@62;$#@60;br$#@62;职位:$#@60;input type=”Text”
name=”position” value=”$#@60;?php echo $myrow[“position”]
?$#@62;”$#@62;$#@60;br$#@62;$#@60;input type=”Submit”
name=”submit” value=”输入信息”$#@62;$#@60;/form$#@62;$#@60;?php}}
else {// 显示员工列表$result = mysql_query(“SELECT * FROM
employees”,$db);while ($myrow = mysql_fetch_array($result))
{printf(“$#@60;a href=/”%s?id=%s/”$#@62;%s
%s$#@60;/a$#@62;$#@60;br$#@62;/n”, $PATH_INFO, $myrow[“id”],
$myrow[“first”],
$myrow[“last”]);}}?$#@62;$#@60;/body$#@62;$#@60;/html$#@62;

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

就是这样。在这个程序中已经包含了我们学过所大多数特性。您也已经看到,我们在一个if()条件判别语句中又加了一个if()语句,来检查多重条件。

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

下面,我们要把所有东西全都加在一起,写出一个很好的程序来。

二、 if-else

请看下面的程序。

$#@60;html$#@62;$#@60;body$#@62;$#@60;?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
“$#@60;table border=1$#@62;/n”;echo
“$#@60;tr$#@62;$#@60;td$#@62;姓名$#@60;/td$#@62;$#@60;td$#@62;住址$#@60;/td$#@62;$#@60;/tr$#@62;/n”;do
{printf(“$#@60;tr$#@62;$#@60;td$#@62;%s
%s$#@60;/td$#@62;$#@60;td$#@62;%s$#@60;/tr$#@62;/n”,
$myrow[“first”], $myrow[“last”], $myrow[“address”]);} while
($myrow = mysql_fetch_array($result));echo “$#@60;/table$#@62;/n”;}
else {echo “对不起,没有找到记录!”;
}?$#@62;$#@60;/body$#@62;$#@60;/html$#@62;

这段程序中包含有不少新内容,不过这些内容都相当简单。首先是mysql_fetch_array()函数。该函数与mysql_fetch_row()十分相近,只有一点不同:使用这个函数时,我们可以通过字段名而不是数组下标来访问它返回的字段,比如$myrow[“first”]。这样我们就可以省不少力气了。另外,程序中还加进了do/while循环和if-else条件判定语句。

if-else条件判定语句的含意是,如果我们成功地把一条记录赋给了$myrow变量,那就继续;否则,就跳到else部分,执行那里的指令。

do/while循环是我们在上页中用户的while()循环的一个变体。我们要用到do/while的原因是:在最初的if语句中,我们已经把查询返回的第一条记录赋给变量$myrow了。如果这时我们执行一般的while循环,那我们就会把第二条记录赋给$myrow,而第一条记录就被冲掉了。但是do/while循环可以让我们执行一次循环体内容之后再来判定循环条件。因此,我们就不会不小心漏掉第一条记录了。