AD
AD

PHP/MySQL三日通-第二天

时间:2007-12-29 08:54:48  来源:  作者:
AD

一、 while循环 

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

字串4

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

字串4

<html> 字串6

<body>

字串8

<?php

字串4


$db = mysql_connect("localhost", "root");

字串7

mysql_select_db("mydb",$db);

字串3

$result = mysql_query("SELECT * FROM employees",$db);

字串7

echo "<table border=1>\n"; 字串7

echo "<tr><td>姓名</td><td>职位</td></tr>\n";

字串2

while ($myrow = mysql_fetch_row($result)) {

字串1

printf("<tr><td>%s %s</td><td>%s</td></tr>\n", $myro
w[1], $myrow[2], $myrow[3]);

字串6


}

字串1

echo "</table>\n";

字串4

?>

字串1

</body>

字串1

</html>  字串8

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

字串7

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

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

字串5

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

字串2

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

字串6

二、 if-else 

字串1

请看下面的/doc/">程序。  字串1

  字串9

<html>

字串6

<body>

字串5

<?php

字串3

$db = mysql_connect("localhost", "root");

字串7

mysql_select_db("mydb",$db); 字串4

$result = mysql_query("SELECT * FROM employees",$db); 字串2

if ($myrow = mysql_fetch_array($result)) { 字串2

echo "<table border=1>\n";

字串5

echo "<tr><td>姓名</td><td>住址</td></tr>\n"; 字串5

do {

字串1

printf("<tr><td>%s %s</td><td>%s</tr>\n", $myrow["first"], 
$myrow["last"], $myrow["address"]); 字串9

} while ($myrow = mysql_fetch_array($result));

字串9

echo "</table>\n";

字串5

} else {

字串1

echo "对不起,没有找到记录!";  字串2

}

字串2


?>

字串9


</body>

字串9


</html> 字串1


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

字串3

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

字串9

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

字串6

最后,如果查询结果没有任何记录的话,/doc/">程序就会执行包含在else{}部分的那些语句。如果您想看到这部分/doc/">程序的执行情况,可以把SQL语句改为SELECT * FROM employees WHERE id=6,或改成其他形式,使得查询结果中没有任何记录。 

字串2

下面我们来扩充一下循环if-else 代码,使得页面内容更加丰富。相信您会喜欢的。 

字串7


本/news/">新闻共2页,当前在第1页 1 2  字串1


PHP/MySQL三日通-第二天(二) 字串6

 

字串3

四、 向服务器发送数据 

字串9

现在我们从数据库读取数据已经没有太多困难了。但是怎么反过来向数据库发送数据呢?其实这不是PHP的问题。 

字串5

首选,我们创建一个带有简单表格的网页。  字串8

<html> 字串7

<body> 字串6

<form method="post" action="<?php echo $PATH_INFO?>"> 字串2

名:<input type="Text" name="first"><br> 字串1

姓:<input type="Text" name="last"><br>

字串1

住址:<input type="Text" name="address"><br>

字串6

职位:<input type="Text" name="position"><br> 字串7

<input type="Submit" name="submit" value="输入信息">

字串6

</form> 字串7

</body> 字串4

</html>  字串5

同样要注意$PATH_INFO的用法。就象我在第一课里讲到的,您可以在HTML代码中的任意位置使用PHP。您也会注意到,表格中的每一个元素都对应着数据库中的一个字段。这种对应关系并不是必须的,这么做只是更直观一些,便于您以后理解这些代码。 

字串9

还要注意的是,我在Submit按钮中加入了name属性。这样我在/doc/">程序中可以试探$submit变量是否存在。于是,当网页被再次调用时,我就会知道调用页面时是否已经填写了表格。  字串6

我应该指出,您不一定要把上面的网页内容写到PHP/doc/">程序中,再返过来调用/doc/">程序本身。您完全可以把显示表格的网页和处理表格的/doc/">程序分开放在两个网页、三个网页甚至更多网页中,悉听尊便。放在一个文件中只是可以使内容更加紧凑而已。  字串6

那好,我们现在加入一些代码,来检查用户在表格中输入的内容。我会把用$HTTP_POST_VARS把所有查询参数变量都显示出来,这只不过是为了证明PHP确实把所有变量都传给了/doc/">程序。这种方法是一个很有用的调试手段。如果您要想看全部的变量,可以用$GLOBALS。 

字串6

<html> 字串2

<body>

字串1

<?php

字串5

if ($submit) {

字串2

<-- // process form -->
// 处理表格输入

字串2

while (list($name, $value) = each($HTTP_POST_VARS)) {

字串3

echo "$name = $value<br>\n";

字串2

} 字串5

} else{ 字串3

<-- // display form -->
// 显示表格

字串4

?>

字串2

<form method="post" action="<?php echo $PATH_INFO?>">

字串5

名:<input type="Text" name="first"><br> 字串7

姓:<input type="Text" name="last"><br>

字串4

住址:<input type="Text" name="address"><br> 字串3

职位:<input type="Text" name="position"><br> 字串2

<input type="Submit" name="submit" value="输入信息">

字串1

</form>

字串7

<?php 字串6

} // end if,if结束 字串9

?> 字串3

</body> 字串3

</html$#@62

字串1

五、修改数据 

字串3

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

字串8

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

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

字串8

  字串4

<html>

字串3

<body> 字串3

<?php

字串7

$db = mysql_connect("localhost", "root");

字串4

mysql_select_db("mydb",$db);

字串3

if ($id) { 字串2

<-- // query the DB -->
// 查询数据库

字串1

$sql = "SELECT * FROM employees WHERE id=$id";

字串6

$result = mysql_query($sql);  字串5

$myrow = mysql_fetch_array($result); 字串2

?> 字串5

<form method="post" action="<?php echo $PATH_INFO?>">

字串1

<input type=hidden name="id" value="<?php echo $myrow["id"] ?>"> 字串8

名:<input type="Text" name="first" value="<?php echo 
$myrow["first"] ?>"><br>

字串1

姓:<input type="Text" name="last" value="<?php echo 
$myrow["last"] ?>"><br> 字串4

住址:<input type="Text" name="address" value="<?php echo 
$myrow["address"] ?>"><br> 字串4

职位:<input type="Text" name="position" value="<?php echo 
$myrow["position"] ?>"><br> 字串7

<input type="Submit" name= bmit" value="输入信息"> 字串8

</form> 字串9

<?php 字串4

} else { 字串7

<-- // display list of employees -->
// 显示员工列表 字串6

$result = mysql_query("SELECT * FROM employees",$db); 字串7

while ($myrow = mysql_fetch_array($result)) {

字串4

printf("<a href=\"%s?id=%s\">%s %s</a><br>\n", $PATH_INFO, 
$myrow["id"], $myrow["first"], $myrow["last"]);

字串5

}

字串8

} 字串6

?> 字串1

</body> 字串2

</html>

字串4

 

字串6

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

六、完整的/doc/">程序  字串7

在本课结束前,我们要把所有东西加入到一个/doc/">程序中,使它具有增加、编辑修改、删除记录的功能。这是前面所有内容的一个延伸,也可以作为极好的复习方法。看看下面的/doc/">程序。 

字串1

<html> 字串4

<body>

字串5

<?php

字串1

$db = mysql_connect("localhost", "root");

字串3

mysql_select_db("mydb",$db); 字串6

if ($submit) { 字串8

<-- // here if no ID then adding else were editing -->
// 如果没有ID,则我们是在增加记录,否则我们是在修改记录

字串8

if ($id) {

字串2

$sql = "UPDATE employees SET first=$first,last=$last,
address=$address,position=$position WHERE id=$id"; 字串3

} else { 字串7

$sql = "INSERT INTO employees (first,last,address,position) 
VALUES ($first,$last,$address,$position)";

字串6

}

字串9

<-- // run SQL against the DB -->
// 向数据库发出SQL命令 字串7

$result = mysql_query($sql);

字串1

<-- echo "Record updated/edited!<p>"; -->
echo "记录修改成功!<p>"; 字串3

} elseif ($delete) {

字串5

<-- // delete a record -->
// 删除一条记录

字串7

$sql = "DELETE FROM employees WHERE id=$id";  字串3

$result = mysql_query($sql);

字串4

<-- echo "$sql Record deleted!<p>"; -->
echo "记录删除成功!<p>";

字串1

} else { 字串8

<-- // this part happens if we dont press submit -->
// 如果我们还没有按submit按钮,那么执行下面这部分/doc/">程序

字串9

if (!$id) { 字串8

<-- // print the list if there is not editing -->
// 如果不是修改状态,则显示员工列表

字串2

$result = mysql_query("SELECT * FROM employees",$db); 字串6

while ($myrow = mysql_fetch_array($result)) {

字串5

printf("<a f=\"%s?id=%s\">%s %s</a> \n", 
$PATH_INFO, $myrow["id"], $myrow["first"], $myrow["last"]); 字串9

printf("<a href=\"%s?id=%s&delete=yes\">(DELETE)</a><
br>", $PATH_INFO, $myrow["id"]); 字串8

}

字串3

}

字串1

?>

字串1

<P> 字串7

<a href="<?php echo $PATH_INFO?>">ADD A RECORD</a>

字串3

<P>

字串5

<form method="post" action="<?php echo $PATH_INFO?>">

字串4

<?php 字串2

if ($id) {

字串1

<-- // editing so select a record -->
// 我们是在编辑修改状态,因些选择一条记录

字串4

$sql = "SELECT * FROM employees WHERE id=$id";

字串1

$result = mysql_query($sql); 字串1

$myrow = mysql_fetch_array($result); 字串1

$id = $myrow["id"]; 字串9

$first = $myrow["first"]; 字串8

$last = $myrow["last"]; 字串8

$address = $myrow["address"];

字串7

$position = $myrow["position"];

字串1

<-- // print the id for editing -->
// 显示id,供用户编辑修改 字串3

?> 字串6

<input type=hidden name="id" value="<?php echo $id ?>">

字串8

<?php 字串6

} 字串3

?> 字串5

<-- First name:<input type="Text" name="first" value="<?php echo $first ?>"><br> -->
名:<input type="Text" name="first" value="<?php echo $first ?>"><br> 字串6

<-- Last name:<input type="Text" name="last" value="<?php echo $last ?>"><br> -->
姓:<input type="Text" name="last" value="<?php echo $last ?>"><br> 字串7

<-- Address:<input type="Text" name="address" value="<?php echo $address ?>"><br> -->
住址:<input type="Text" name="address" value="<?php echo $address ?>"><br>

字串4

<-- Position:<input type="Text" name="position" value="<?php echo $position ?>"><br> -->
职位:<input type="Text" name="position" value="<?php echo $position ?>"><br>

字串2

<-- <input type="Submit" name="submit" value="Enter information"> -->
<input type="Submit" name="submit" value="输入信息">

字串8

</form> 字串4

<?php

字串1

}

字串7

?>

字串1

</body>

字串9

<`/html>  字串7


这段/doc/">程序看起来很复杂,但实际上并不难。/doc/">程序主要有三个部分。第一个if()语句检查我们是否已经按下了那个“输入信息”的数据提交按钮。如果是,/doc/">程序再检查$id是否存在。如果不存在,那我们就是在增加记录状态,否则,我们是在修改记录状态。 

字串3

接下来我们检查变量$delete是否存在。如果存在,我们是要删除记录。注意,第一个if()语句检查的是用POST方法发送来的变量,而这一次我们检查的是GET方法中传递过来的变量。  字串7

最后,/doc/">程序默认的动作是显示员工列表和表格。同样,我们要检查变量$id是否存在。如果存在,我们就根据它的值检索出相应的记录显示出来。否则,我们会显示一个空的表格。  字串2

现在,我们已经把所学的东西全部都放在一个/doc/">程序里头了。我们用到了while()循环,用到了if()语句,并且执行了全部的SQL基本操作 - SELECT、INSERT、UPDATE以及DELETE。另外,我们也知道如何在不同的网页之间通过URL和表格输入来互相传递信息。 字串5

  字串1


文章评论

共有 0位编程爱好者发表了评论 查看完整内容

    评论加载中…
忒好程序员:www.teihao.com

推荐信息

     
忒好程序员
AD