14.4使用PHP维护MySQL数据库的数据
14.4 使用PHP维护MySQL数据库的数据
14.3节介绍了如何使用PHP函数操作数据库的查询结果集,并将结果集显示在页面上。这节介绍通过Web页面获取数据,向MySQL数据库添加或更新数据。
14.4.1 从页面获取数据并插入数据库
首先建立一个Web页面,供用户输入数据之用,该页可由代码14-9创建。
代码14-9 创建一个用来提交用户信息的HTML页面14-9.html
01 <html>
02 <head>
03 <title>14-9.html</title>
04 </head>
05
06 <body>
07 <b>
提交用户信息</b>
08 <form name="form" method="post" action="14-10.php">
09 <table width="75%" border="0" cellpadding="0" cellspacing="2">
10 <tr>
11 <td width="24%" height="29">
用户名:</td>
12 <td width="76%"><input name="user_name" type="text" id="user_name" size="20"></td>
13 </tr>
14 <tr>
15 <td height="25">
来自城市:</td>
16 <td>
17 <select name="city">
18 <option value="Beijing">
北京</option>
19 <option value="London">
伦敦</option>
20 <option value="NewYork">
纽约</option>
21 <option value="Paris">
巴黎</option>
22 <option value="Rome">
罗马</option>
23 </select>
24 </td>
25 </tr>
26 <tr>
27 <td height="31">
28 <input type="submit" name="Submit" value="
提交"></td>
29 <td> </td>
30 </tr>
31 </table>
32 </form>
33 </body>
34 </html>

图14-11 提交用户信息的页面
【代码解析】代码第08行的action属性决定本页面在执行第28行代码后的目的地。第17~23行是一个下拉列表框,允许用户选择指定的这5个城市。代码的运行效果如图14-11所示。
由代码14-9可以看出,该页面的表单将会提交给14-10.php处理。在14-10.php中完成获取表单数据,并将表单数据插入数据库。代码14-10就是14-10.php的程序代码。
代码14-10 获取表单数据并将数据插入数据库14-10.php
01 <?php
02 $host = "localhost";
03 $user_name = "root";
04 $password = "admin";
05
06 //
通过POST
方法传入的表单数据
07 $name = $_POST["user_name"];
08 $city = $_POST["city"];
09
10 if(empty($name) || trim($name)=="") //
判断用户名是否为空或者空格
11 {
12 echo "
请填写用户名!<a href="14-9.html">
返回</a>";
13 exit;
14 }
15
16 $conn = mysql_connect($host,$user_name,$password);
17 if(!$conn)
18 {
19 die("
数据库连接失败:".mysql_error());
20 }
21 mysql_select_db("test");
22
23 //
表users
中的created_time
字段使用通过MySQL
函数NOW()
取得的系统时间
24 $sql = "insert into users set id=7,name="" . $name . "",city="" . $city . "",created_time=NOW()";
25 mysql_query($sql) OR die("<br/>ERROR: <b>".mysql_error()."</b><br/>SQL
:".$sql);
26 mysql_close($conn);
27
28 echo "
数据插入成功,打开<a href="14-7.php">14-7.php</a>
查看数据";
29 ?>
【代码解析】这段代码首先获取表单数据,当用户提交数据不为空(或空格)时,就会向数据库插入一条记录。当数据成功插入数据库后,代码14-10会输出一个成功信息,并给出到14-7.php的链接,程序14-7.php提供了对表users数据的查询,通过浏览14-7.php查看表users中的所有数据,可以验证程序14-10是否完成了数据插入操作。
说明 代码14-10中的SQL语句给表users的字段id赋值为7,事实上,表的字段id设为主键时,通常也会设置为自动增加(ATUO_INCREMENT),但在第12章创建users表时,并未设置其字段id为自动增加,所以,代码14-10的SQL语句直接为其赋值为7。如果表users中的id字段设置为自动增加,那么程序中的SQL语句可以不为其赋值,MySQL在执行插入时会为字段id赋值,所赋值为字段id当前最大的值加1。
14.4.2 根据表单内容修改数据库数据
通过程序数据修改数据库数据,和通过程序向数据库插入数据很类似,从程序角度看,一个是通过PHP程序执行插入操作(INSERT语句),另外一个是执行更新操作(UPDATE语句)。
通过PHP程序实现更新操作,首先需要一个显示数据的Web页面。另外,要根据不同的URL参数,该Web页面显示不同用户的信息,因此,该页面应该由内嵌在HTML文档中的PHP程序完成。然后,在这个页面修改用户数据,最后提交表单,由程序完成数据库数据的修改。代码14-11即用来在Web页面显示用户数据,它由内嵌PHP代码的HTML文档实现,并在其中实现了用户信息的更新。该页面和代码14-9实现的提交用户信息的页面几乎完全一样,只是该页面根据URL参数,将不同的用户数据显示在页面的表单元素里。
代码14-11 显示用户信息的页面14-11.php
01 <?php
02 $host = "localhost"; //
定义服务器
03 $user_name = "root"; //
定义用户名
04 $password = "admin"; //
定义密码
05
06 //
页面中的城市列表将有数组生成
07 $arr_city = array("Beijing"=>"
北京","NewYork"=>"
纽约","Paris"=>"
巴黎","London"=>"
伦敦","Rome"=>"
罗马");
08
09 $conn = mysql_connect($host,$user_name,$password); //
连接MySQL
10 if(!$conn)
11 {
12 die("
数据库连接失败:".mysql_error());
13 }
14 mysql_select_db("test"); //
选择数据库
15
16 if(!isset($_GET["uid"])) //
获取所要显示数据的用户的id
17 {
18 echo "
参数错误!";
19 exit;
20 }
21 $id = $_GET["uid"];
22
23 $sql = "select * from users where id=$id";
24 $result = mysql_query($sql) OR die("<br/>ERROR: <b>".mysql_error()."</b><br/>SQL
: ".$sql);
25 if(!mysql_num_rows($result))
26 {
27 echo "
用户ID
错误!";
28 exit;
29 }
30
31 $row = mysql_fetch_array($result);
32
33 $name = $_POST["user_name"];
34 $city = $_POST["city"];
35 if(!empty($name) || trim($name)!="") //
当页面有POST
数据传入时,则修改数据库数据
36 {
37 $sql = "update users set name="" . $name . "",city="" . $city . "" where id=$id";
38 mysql_query($sql) OR die("<br/>ERROR: <b>".mysql_error()."</b><br/>SQL
:".$sql);
39 mysql_close($conn);
40
41 echo "
数据修改成功,打开<a href="14-7.php">14-7.php</a>
查看数据";
42 exit;
43 }
44 ?>
45
46 <html>
47 <head>
48 <title>14-11.php</title>
49 </head>
50
51 <body>
52 <b>
修改用户信息</b>
53 <form name="form" method="post" action="14-11.php?uid=<?php echo $id; ?>">
54 <table width="75%" border="0" cellpadding="0" cellspacing="2">
55 <tr>
56 <td width="24%" height="29">
用户名:</td>
57 <td width="76%"><input name="user_name" type="text" id="user_name" size="20"
58 value="<?php echo $row["name"]; ?>"></td>
59 </tr>
60 <tr>
61 <td height="25">
来自城市:</td>
62 <td>
63 <select name="city">
64 <?php
65 //
通过数组循环,生成页面上城市选项的下拉列表
66 foreach($arr_city as $k=>$v)
67 {
68 //
这里根据字段的值和数组中的索引值,使用三目运算符 ? :
做用户来自哪个城市的判断,
69 //
如果city
字段的值和数组循环中的某个城市的索引值相等,则将用户的城市在下拉列表中选中
70 $option = ($row["city"] == $k) ? "<option value="".$k."" selected>" .$v."</option>" : "<option
71 value="".$k."">".$v."</option>";
72 echo $option."\n";
73 }
74 ?>
75 </select>
76 </td>
77 </tr>
78 <tr>
79 <td>
注册时间:</td>
80 <td><?php echo $row["created_time"]; ?></td>
81 </tr>
82 <tr>
83 <td height="31">
84 <input type="submit" name="Submit" value="
修改"></td>
85 <td> </td>
86 </tr>
87 </table>
88 </form>
89 </body>
90 </html>
【代码解析】这段程序即实现了向Web页面显示某一用户的数据,同时也完成了根据页面传入的数据,修改数据库中对应用户的信息。更新操作成功后,代码14-11会显示一个信息,并给出到14-7.php的链接,以便验证更新操作是否成功并且正确。代码14-11显示用户数据的效果如图14-12所示。读者要注意页面URL中传递过来的参数$_GET["uid"]。
14.4.3 通过PHP删除数据库数据
对程序14-7.php稍作修改,在用户列表中添加一列,在这一列为每个用户行添加加删除链接,这个链接将链接到一个完成删除功能的PHP程序,如图14-13所示。这个页面由代码14-12实现。

图14-12 用户信息修改界面

图14-13 添加删除链接的用户信息列表
代码14-12 为用户信息列表添加“删除”链接14-12.php
01 <?php
02 $host = "localhost"; //
定义服务器
03 $user_name = "root"; //
定义用户名
04 $password = "admin"; //
定义密码
05
06 $conn = mysql_connect($host,$user_name,$password); //
连接MySQL
07 if(!$conn)
08 {
09 die("
数据库连接失败:".mysql_error());
10 }
11 mysql_select_db("test"); //
选择数据库
12
13 $sql = "select id,name,city,created_time from users";
14
15 $result = mysql_query($sql) OR die("<br/>ERROR: <b>".mysql_error()."</b><br/>
产生
问题的SQL
:".$sql);
16 ?>
17 <html>
18 <head>
19 <title>14-12.php</title>
20 <script language="javascript">
21
22 </script>
23 </head>
24 <center>
25
26 <body>
27 <table width="75%" border="0" cellpadding="0" cellspacing="1" bgcolor="#7B7B84">
28 <tr bgcolor="#8BBCC7">
29 <td height="33"><div ><strong>
用户ID</strong></div></td>
30 <td><div ><strong>
用户名称</strong></div></td>
31 <td><div ><strong>
来自城市</strong></div></td>
32 <td><div ><strong>
注册时间</strong></div></td>
33 <td><div ><strong>
操作</strong></div></td>
34 </tr>
35
36 <?php
37 if($num = mysql_num_rows($result))
38 {
39 while($row = mysql_fetch_array($result,MYSQL_ASSOC))
40 {
41 ?>
42 <tr bgcolor="#FFFFFF">
43 <td height="22" ><?php echo $row["id"]; ?> </td>
44 <td height="22"> <?php echo $row["name"]; ?> </td>
45 <td height="22"> <?php echo $row["city"]; ?> </td>
46 <td height="22"> <?php echo $row["created_time"]; ?> </td>
47 <td height="22"> <a onclick="javascript:if(confirm("
确定要删除用户信息吗?"))
48 return true; else return false;" href="14-14.php?id=<?php echo $row["id"]; ?>">
删除</a> </td>
49 </tr>
50 <?php
51 }
52 }
53 mysql_close($conn);
54 ?>
55
56 </table>
57 </body>
58 </center>
59 </html>

图14-14 删除确认对话框
【代码解析】第47行代码使用confirm()函数来弹出一个确认对话框。第48行的href属性指定链接目的地并传递一个id参数。
当用户在页面点击“删除”链接时,首先会弹出一个JavaScript确认对话框,如图14-14所示。
如果在这个JavaScript确认对话框中单击“取消”按钮,程序则仍然停留在该页面。如果单击“确定”按钮,那么程序就会链接到14-14.php,在这个程序中完成从数据库中删除用户数据。请读者仔细看一下代码中JavaScript是如何实现确认和取消功能的。
代码14-13 在PHP中删除数据库数据14-14.php
01 <?php
02 if(!isset($_GET["id"]))
03 {
04 echo "
参数错误!";
05 exit;
06 }
07
08 $id = $_GET["id"];
09 if(empty($id))
10 {
11 echo "
用户ID
不能为空!";
12 exit;
13 }
14
15 $host = "localhost"; //
定义服务器
16 $user_name = "root"; //
定义用户名
17 $password = "admin"; //
定义密码
18
19 $conn = mysql_connect($host,$user_name,$password); //
连接MySQL
20 if(!$conn)
21 {
22 die("
数据库连接失败:".mysql_error());
23 }
24 mysql_select_db("test"); //
选择数据库
25
26 //
先判断是否存在该ID
的用户
27 $sql = "select * from users where id=$id";
28 $result = mysql_query($sql) OR die("<br/>ERROR: <b>".mysql_error()."</b><br/>SQL
: ".$sql);
29 if(!mysql_num_rows($result))
30 {
31 echo "
用户ID
错误!";
32 exit;
33 }
34
35 //
删除用户数据
36 $sql = "delete from users where id=$id";
37 mysql_query($sql) OR die("<br/>ERROR: <b>".mysql_error()."</b><br/>SQL
:".$sql);
38 mysql_close($conn);
39
40 echo "
数据删除成功,返回<a href="14-12.php">14-12.php</a>
查看数据";
41 ?>
【代码解析】程序最关键的是第08行和第36行,第08行获取传递过来的id参数,第36行执行删除数据的SQL语句。和修改数据一样,删除数据成功后,14-14.php会向Web页面显示一条到用户信息列表页面的链接,以便通过浏览用户列表,验证删除操作是否正确执行。
