$#@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)) {
do {
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"]);
} while ($myrow = mysql_fetch_array($result));
} else {
echo "对不起,没有找到记录!";
}
?$#@62;
$#@60;/body$#@62;
$#@60;/html$#@62;
这里没什么非凡的,只是printf函数有些不同。那我们就来仔细研究一下。
首先要注重的是,所有的引号前面都有一个反斜杠。这个反斜杠告诉PHP直接显示后面的字符,而不能把后面的字符当作程序代码来处理。另外要注重变量$PATH_INFO的用法。该变量在所用程序中都可以访问,是用来保存程序自身的名称与目录位置的。我们之所以用到它是因为要在页面中再调用这个程序本身。使用$PATH_INFO,我们可以做到,即使程序被挪到其他目录,甚至是其他机器上时,我们也能保证正确地调用到这个程序。
正如我刚才提到的,程序所生成的网页,其中包含的超链接会再次调用程序本身。不过,再次调用时,会加入一些查询参数。
PHP见到查询参数串中包含有“名字=值”这样的成对格式时,会作一些非凡的处理。它会自动生成一个变量,变量名称与取值都与查询参数串中所给定的名称和取值相同。这一功能使得我们可以在程序中判定出是第一次执行本程序还是第二次。我们所要做的只是问问PHP$id这个变量是否存在。
当我知道这个问题的答案后,我可以在第二次调用程序时显示一些不同的结果出来。请看:
$#@60;body$#@62;
$#@60;?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\n$#@60;br$#@62;", $myrow["first"]);
printf("姓: %s\n$#@60;br$#@62;", $myrow["last"]);
printf("住址: %s\n$#@60;br$#@62;", $myrow["address"]);
printf("职位: %s\n$#@60;br$#@62;", $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("$#@60;a href=\"%s?id=%s\"$#@62;%s %s$#@60;/a$#@62;$#@60;br$#@62;\n", $PATH_INFO,
$myrow["id"], $myrow["first"], $myrow["last"]);
} while ($myrow = mysql_fetch_array($result));
} else {
// no records to display
// 没有记录可显示
echo "对不起,没有找到记录!";
}
}
?$#@62;
$#@60;/body$#@62;
$#@60;/html$#@62;
程序开始变得复杂了,所以我在这里面加了注释,来解释一下到底发生了什么。您可以用//加入单行注释,或者用/*和*/来括住大段的注释。
到这里,我们已经学会了第一个真正有用的PHP/MySQL脚本程序!现在,我们要看看怎样把Web表格加进来,并且向数据库发送数据。
