13.4.2 根据表单内容修改数据库数据
通过程序数据修改数据库数据,和通过程序向数据库插入数据类似。从程序角度看,一个是通过PHP程序执行插入操作(INSERT语句),另外一个是执行更新操作(UPDATE语句)。
通过PHP程序实现更新操作,首先需要一个显示数据的Web页面。另外,要根据不同的URL参数,该Web页面显示不同用户的信息,因此,该页面应该由内嵌在HTML文档中的PHP程序完成。然后,在这个页面修改用户数据,最后提交表单,由程序完成数据库数据的修改。代码13-11用来在Web页面显示用户数据,它由内嵌PHP代码的HTML文档实现,并在其中实现了用户信息的更新。该页面和代码13-9所示的提交用户信息的页面几乎完全一样,只是该页面根据URL参数,将不同的用户数据显示在页面的表单元素里。
代码13-11 显示用户信息的页面13-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="13-7.php">13-7.php</a>查看数据';
42 exit;
43 }
44 ?>
45
46 <html>
47 <head>
48 <title>13-11.php</title>
49 </head>
50
51 <body>
52 <b>修改用户信息</b>
53 <form name="form"method="post"action="13-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>':
71 '<option 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页面显示某一用户的数据,同时也完成了根据页面传入的数据,修改数据库中对应用户的信息。更新操作成功后,代码13-11会显示一个信息,并给出到13-7.php的链接,以便验证更新操作是否成功并且正确。代码13-11显示用户数据的效果如图13-12所示。读者要注意页面URL中传递过来的参数$_GET['uid']。