php5查询MySQL5.1, 数据集中包含的中文不显示出来

键盘手老张 2007-12-21 01:59:39
我用的是php5.2.5查询MySQL5.1, 数据集中包含有中文字符却显示的是问号,为什么??
...全文
66 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
my_web 2007-12-21
  • 打赏
  • 举报
回复
就是乱码
<?
$conn=mysql_connect('localhost','root','123456');
mysql_query("SET NAMES 'gb2312'");
mysql_select_db("gb2312",$conn);
$sql="select * from test";
$query=mysql_query($sql);
while($result=mysql_fetch_array($query))
{
print_r($result);
}
?>
书名:《PHP开发实战1200例(第I卷)》(清华大学出版社.潘凯华.刘华) PDF格式扫描版,全书分为5篇15章,共899页。2011年1月出版。 全书压缩打包成2部分,这是第1部分。 注:本系列图书的第I、II卷再版时均相应改名为《xxx开发实例大全》(基础卷)及(提高卷),但内容基本无变化,需要的童鞋可自由匹配查找。 内容简介   《PHP开发实战1200例》分为I、II两卷共计1200个例子,包括了开发各个方面最常用的实例,是目前市场上实例最全面的开发类图书;书实例来源于多位工程师的多年积累,具有很强的实用性。 本书是第I卷,以开发人员在项目开发经常遇到的问题和必须掌握的技术为心,介绍了应用PHP进行Web开发的各个方面的知识和技巧,主要包括开发环境、PHP基础、Web页面交互、文件操作、会话应用、图形图像处理及面向对象等内容。本书分为5篇15章,共计625个实例和625个经验技巧。每个实例都经作者精心筛选,具有很强的实用性,其一些实例是开发人员难于寻觅的解决方案。    本书适合PHP的初学者,如高校学生、求职人员作为练习、速查、学习使用,也适合PHP程序员参考、查阅。 目 录 目录: 第1篇 基础篇 第1章 开发环境 2 1.1 AppServ——PHP集成化安装包 3 实例001 通过AppServ配置PHP开发环境 3 实例002 AppServ应用技巧 6 实例003 第1个PHP程序 7 1.2 XAMPP——PHP集成化安装包 8 实例004 通过XAMPP配置PHP开发环境 8 实例005 测试XAMPP是否安装成功 11 实例006 XAMPP应用技巧 12 实例007 第2个PHP程序 13 1.3 IIS+PHP+MySQL——独立搭建PHP 开发环境 14 实例008 安装PHP 14 实例009 安装MySQL 15 实例010 安装IIS 21 实例011 第3个PHP程序 23 1.4 LAMP——独立配置PHP开发环境 24 实例012 安装Apache服务器 24 实例013 安装MySQL数据库服务器 26 实例014 安装PHP.50 28 实例015 第4个PHP程序 30 1.5 XAMPP——Linux版PHP集成化安装包 31 实例016 XAMPP——Linux下PHP开发环境的集成化 31 实例017 Linux操作系统下启动XAMPP 32 实例018 设置MySQL数据库root用户的密码 33 实例019 第5个PHP程序 34 1.6 Dreamweaver开发工具 35 实例020 Dreamweaver编码格式的选择 35 实例021 Dreamweaver创建表格 36 实例022 在表格插入宠物照片 38 实例023 Dreamweaver创建表单 40 实例024 Dreamweaver创建和附加CSS样式 42 实例025 Dreamweaver控制弹出信息 45 实例026 Dreamweaver控制浏览器的窗口 46 实例027 通过Dreamweaver创建站点 47 实例028 通过Dreamweaver开发第1个PHP程序 48 1.7 Zend Studio开发工具 50 实例029 安装Zend Studio 50 实例030 Zend Studio创建PHP项目 52 实例031 Zend Studio编码格式的转换 56 实例032 Zend Studio快捷键的运用 57 实例033 Zend Studio部署Apache服务器 60 第2章 PHP基础 63 2.1 基本语法 64 实例034 在页面打印PHP的配置信息 64 实例035 在页面打印服务器时间 65 实例036 在页面打印当前执行的PHP文件名 67 实例037 区分单引号和双引号 68 实例038 动态输出JavaScript代码 69 实例039 当数字遇到了字符串 70 实例040 PHP程序员的基础——变量的应用 72 实例041 打印系统环境变量信息print_r($_ENV) 73 实例042 使用可变变量输出“I Like PHP!” 73 实例043 使用转义字符输出特殊字符 74 实例044 使用常量指定PI的值计算圆的面积 75 2.2 运算符 75 实例045 自定义数字的加密/解密算法 76 实例046 比较两个时间戳的大小 77 实例047 使用条件运算符判断数字的奇偶性 78 实例048 判断用户是否具有后台管理权限 79 实例049 打印随机组合生日祝福语 80 实例050 打印2000~2020年的所有闰年 81 实例051 前置运算符和后置运算符的区别 82 实例052 使用位运算对数字进行加密和解密 83 2.3 包含语句 84 实例053 提高代码重用率 84 实例054 包含数据库连接文件 85 实例055 包含网站头文件 86 实例056 包含网站尾文件 87 实例057 包含网站的主文件 88 2.4 条件语句 89 实例058 员工生日提醒 89 实例059 考试成绩评定标准 90 实例060 控制登录用户权限 91 实例061 网页框架的制作 92 实例062 图片验证码 93 实例063 健康生活提醒 95 2.5 循环控制 96 实例064 员工生日列表 96 实例065 员工详细信息浏览 97 实例066 员工信息的批量删除 98 实例067 表格的动态创建 99 实例068 SESSION购物车数据的读取 100 实例069 员工信息的管理 102 实例070 网页版九九乘法表 104 实例071 读取数组购物车的数据 105 实例072 图像验证码的生成 106 2.6 跳转语句 107 实例073 控制页面表情图的输出 107 实例074 控制页面数据的输出数量 108 实例075 动态改变页面单元格的背景颜色 109 实例076 屏蔽偶数次的数据输出 110 实例077 跳过数据输出指定的记录 111 实例078 执行指定次数的循环 112 2.7 自定义函数 113 实例079 自定义函数截取字符串 113 实例080 公告标题的截取 114 实例081 论坛内容的简短输出 116 实例082 自定义函数过滤字符串 117 2.8 字符串 118 实例083 过滤论坛帖子的空白和特殊字符 118 实例084 对论坛帖子的内容进行转义 119 实例085 还原论坛帖子的内容 120 实例086 截取论坛标题 121 实例087 分割、合成字符串 121 实例088 查询关键字描红 122 实例089 统计查询关键字的出现次数 123 实例090 获取上传文件的后缀 124 实例091 统一上传文件名称的大小写 125 实例092 论坛直接输出HTML脚本 126 实例093 统计帖子标题的长度 127 实例094 计算论坛帖子的字节数 128 实例095 实现帖子内容的定位查找 129 实例096 去除帖子标题的首尾空格 129 实例097 货币数据的格式化输出 130 实例098 日期、时间的格式化输出 131 实例099 比对论坛帖子的相似度 132 实例100 对用户注册的密码进行加密和解密 132 实例101 保护URL地址传递的参数 133 实例102 解析URL地址传递的编码参数 134 实例103 转义帖子的特殊字符 135 实例104 获取任意字符的ASCII码 136 实例105 查找指定ASCII码对应的字符 136 实例106 合理定义上传文件的名称 137 实例107 通过异或方式对用户注册密码进行加密 139 实例108 统一英文注册用户首字母的大小写 139 实例109 字符串与数字之间的转换 140 实例110 通过正则表达式对字符串进行匹配查找 141 实例111 通过IP地址查找主机所在地 142 实例112 解决用substr()函数对字符串截取时出现乱码的问题 143 实例113 字符串与HTML标记相互转换 144 实例114 运用PHP 5.0新型字符串输出XML数据 145 实例115 判断字符串是否存在指定子串 146 2.9 正则表达式 147 实例116 验证电话号码的格式是否正确 147 实例117 验证Email地址格式是否正确 148 实例118 验证IP地址是否有效 149 实例119 统计关键字的查询结果 150 实例120 计算查询操作的执行时间 151 实例121 查询关键字描红 152 实例122 判断上传文件的类型 153 实例123 判断邮政编码格式是否正确 154 2.10 数组 154 实例124 创建并输出数组 155 实例125 统计数组元素个数 156 实例126 向数组添加元素 156 实例127 将数组指定索引位置的元素替换 157 实例128 获取数组最后一个元素 158 实例129 去除数组的重复元素 158 实例130 字符串与数组的转换 159 实例131 对数组元素进行随机排序 160 实例132 随机抽取数组元素 161 实例133 二维数组的输出 162 实例134 获取数组当前的键名和值 162 实例135 检测数组是否存在某个值 163 实例136 获取数组的当前单元 164 实例137 从数组随机取出元素 165 实例138 合并数组 166 实例139 拆分数组 167 实例140 遍历数组 168 2.11 日期和时间 169 实例141 设置系统的当前时间 169 实例142 将日期和时间转换为时间戳 170 实例143 获取系统的特定日期和时间 171 实例144 比较时间的大小 172 实例145 计算考试时间 173 实例146 倒计时 173 实例147 网页闹钟 174 实例148 计算程序运行时间 176 第3章 Web页面交互 178 3.1 获取表单元素的值 179 实例149 设计论坛登录界面 179 实例150 可以上传图片的表单 180 实例151 通过POST方法提交表单元素 182 实例152 通过$_POST方法获取表单元素 182 实例153 通过GET方法提交表单元素 184 实例154 通过$_GET方法获取表单元素 185 3.2 文本框组件的应用 186 实例155 以文本域的形式显示数据信息 186 实例156 限制多行文本域输入的字符个数 187 实例157 设置文本框的只读属性 188 实例158 自动计算金额 189 实例159 为文本框设置默认值 190 实例160 设置文本框的样式 191 实例161 文本域的滚动条 192 3.3 下拉列表的应用 193 实例162 省市级联动菜单 193 实例163 省市县级联动菜单 194 实例164 应用下拉列表选择所要联机的网站 196 实例165 可输入字符的下拉菜单 197 实例166 设置下拉列表的默认值 198 实例167 设置下拉列表的样式 199 实例168 下拉列表打开窗口 200 实例169 Tab键在文本域的体现 201 3.4 表单元素的动态操作 203 实例170 投票系统单选按钮与复选框的应用 203 实例171 选单选按钮后显示其他表单元素 205 实例172 不提交表单获取单选按钮的值 207 实例173 实现复选框的全选、反选和不选 208 实例174 隐藏域提交用户的ID值 210 实例175 图像域替代提交按钮 211 实例176 跳转菜单实现页面跳转 213 实例177 上传图片预览 214 实例178 去掉下拉选项的边框 215 实例179 修改表单属性为弹出窗口 216 实例180 表单输入单元的文字设置 217 实例181 表单输入单元单击删除 218 实例182 表单文本输入的移动选择 219 实例183 通过下拉列表选择头像 220 3.5 CSS+DIV页面布局 222 实例184 应用CSS+DIV实现无边框窗口 222 实例185 设置表格样式 224 实例186 设置图片的样式 225 实例187 滚动条样式 226 实例188 设置表单样式 227 实例189 设置超链接的样式 229 实例190 设置body的样式 230 实例191 模拟的进度条 231 实例192 标签设计用户注册页面 232 实例193 div标签设计论坛帖子浏览页面 234 实例194 标签设计论坛后台管理页面 236 实例195 标签设计页面布局 237 实例196 页面布局(2列左窄右宽高度自适应) 240 实例197 页面布局(2列固定宽度+头部+导航+尾部) 242 实例198 页面布局(3列左右侧固定间自适应居) 244 实例199 页面布局(2列右侧固定左侧自适应宽度) 247 实例200 页面布局(2列左固定右自适宽度+底平齐) 249 实例201 页面布局(2列右固定左自适宽度+底平齐) 252 3.6 弹出窗口 254 实例202 弹出指定尺寸的无边框窗口 254 实例203 全屏显示无边框有滚动条窗口 255 实例204 网页拾色器 257 实例205 日期选择器 259 实例206 弹出全屏显示的网页模式对话框 261 实例207 关闭IE主窗口时不弹出询问对话框 262 实例208 弹出提示对话框并重定向网页 263 实例209 自动关闭的广告窗口 264 实例210 在弹出的对话框选择个性头像 265 实例211 浮动的广告窗口 266 实例212 在页面右下角弹出渐显的广告窗口 268 3.7 状态栏设计 269 实例213 跑马灯文字 269 实例214 状态栏的收缩显示文字 270 实例215 状态栏显示数字时钟 271 3.8 导航菜单设计 272 实例216 树状导航菜单 272 实例217 收缩式导航菜单 274 实例218 展开式导航菜单 276 实例219 解释型菜单 277 实例220 半透明背景的下拉菜单 277 实例221 二级导航菜单 279 实例222 导航条的动画效果 281 第2篇 常用技术篇 第4章 文件操作 284 4.1 文件上传 285 实例223 以二进制形式上传文件到数据库 285 实例224 上传文件到服务器 287 实例225 限制上传文件的大小 288 实例226 限制上传文件的类型 291 实例227 上传多个文件到服务器 292 4.2 文件下载 294 实例228 通过链接方式下载 294 实例229 通过header函数进行下载 295 4.3 文件遍历 296 实例230 读取整个文件的内容 296 实例231 文本文件的分页读取 298 4.4 文件操作 300 实例232 文件操作汇总 300 实例233 目录、文件定位器 302 实例234 改头换面 303 实例235 文件属性分析 304 实例236 文件类型检测 306 实例237 判断文件的权限 308 实例238 从文本文件读取注册服务条款 309 实例239 可以屏蔽刷新功能的文本计数器 310 实例240 判断文件是否被修改 312 实例241 重新定义上传文件的名称 313 实例242 读取远程文件的数据 314 实例243 删除指定目录下的所有.ini文件 315 实例244 将文本文件数据存储到数据库 316 4.5 文件的压缩与解压 318 实例245 PHP压缩RAR文件 319 实例246 PHP将上传文件转换成RAR文件 320 实例247 PHP对RAR文件进行解压 321 实例248 PHP压缩ZIP文件 322 实例249 PHP解压ZIP文件 323 4.6 目录操作 323 实例250 目录操作汇总 324 实例251 重新定义目录的名称 326 实例252 获取磁盘分区的大小 327 实例253 遍历指定目录下的所有文件 329 实例254 遍历、删除指定目录下的所有文件 330 第5章 会话应用 333 5.1 COOKIE 334 实例255 控制登录用户的过期时间 334 实例256 自动登录 335 实例257 单击登录 336 实例258 统计用户在线时间 339 实例259 限制用户访问网站的时间 340 实例260 用户来访时客户端创建COOKIE 341 实例261 删除客户端的COOKIE 343 实例262 使客户端浏览器支持COOKIE 344 5.2 SESSION 345 实例263 掌控登录用户的权限 346 实例264 屏蔽页面刷新对计数器的影响 347 实例265 在不同页面之间传递数据 348 实例266 SESSION购物车 350 实例267 解决SESSION的常见问题 353 实例268 控制页面的访问权限 354 实例269 将SESSION数据存储到数据库 355 实例270 SESSION更换聊天室界面 357 实例271 清理SESSION缓存提高网站访问的效率 358 第6章 图形图像处理 361 6.1 图像与统计 362 实例272 图形计数器 362 实例273 GD2图形计数器 363 实例274 通过图像显示投票统计结果 365 实例275 通过图像显示密码安全强度 367 实例276 数字图像验证码 369 实例277 图像验证码 370 实例278 缩略图艺术库 371 实例279 提取图像的EXIF信息 374 6.2 控制、显示图片特性 376 实例280 通过鼠标滑轮控制图片大小 376 实例281 显示随机图像 377 实例282 获取页面图像的实际尺寸 378 实例283 图像的手动播放 379 实例284 图像的自动播放 380 实例285 任意调整上传图片的大小 381 实例286 Apache防盗链技术 383 实例287 通过SESSION变量防盗链 385 6.3 Jpgraph类库 386 实例288 柱形图分析产品月销售量 386 实例289 柱形图展示年度收支情况 388 实例290 柱状图展示编程词典6、7月份销售量 390 实例291 柱状图展示编程词典上半年销量 391 实例292 柱形图展示2009年上半年总销售额 393 实例293 柱形图展示2009年第一季度编程词典销量 394 实例294 折线图分析网站一天内的访问走势 396 实例295 柱形图与折线图分析图书销量和市场占有率 398 实例296 折线图分析2009年牛肉市场价格走势 399 实例297 折线图分析2009年销售额 400 实例298 柱形图分析编程词典销售比例 402 实例299 饼形图分析2009年图书销量 403 实例300 饼形图展示各语言编程词典销售比例 404 实例301 多饼形图区块分析2009年图书销量 406 实例302 多饼形图分析2009年上半年编程词典销量 407 实例303 环饼形图分析2009年图书销量 408 6.4 GD2函数库 410 实例304 绘制基本的几何图形 410 实例305 GD2函数填充几何图形 411 实例306 GD2函数输出英文字符串 412 实例307 GD2函数在照片上添加文字 413 实例308 GD2函数为图片添加文字水印 415 实例309 GD2函数为图片添加图像水印 416 实例310 GD2函数生成图形验证码 417 实例311 GD2函数折线图分析网站月访问量走势 419 实例312 GD2函数柱形图分析编程词典满意度调查 421 实例313 GD2函数饼形图分析图书市场的份额 422 第7章 面向对象 425 7.1 类的定义 426 实例314 使用类的属性保存数据库连接参数 426 实例315 数据库连接类定义数据库连接方法 427 实例316 数据统计类定义求数值平均值的方法 429 实例317 使用重载实现不同类型数据的运算 430 实例318 使用$this关键字调用汽车类自身的方法 431 实例319 使用self关键字调用学生类自身的静态方法 433 实例320 调用汽车类的刹车方法和颜色属性 435 实例321 学生类使用构造方法为学生信息初始化 436 实例322 圆类使用const关键字定义圆周率类常量 437 7.2 类的访问修饰符 439 实例323 汽车类使用public关键字定义汽车的行驶方法 439 实例324 使用private关键字定义汽车的颜色属性 440 实例325 使用protected关键字定义汽车的保修年限 441 7.3 类的继承 442 实例326 苹果子类继承水果父类 442 实例327 使用parent关键字调用父类的方法 444 实例328 苹果子类覆盖水果父类的方法 445 7.4 抽象类和接口 446 实例329 美食抽象类 447 实例330 学生类多重接口的实现 448 7.5 类的多态 450 实例331 通过继承实现多态 450 实例332 通过接口实现多态 451 7.6 常用关键字 453 实例333 使用final关键字防止类被继承 453 实例334 使用static关键字定义类的静态成员 454 实例335 使用clone关键字实现对象的克隆 456 实例336 检测当前对象属于哪个类 458 7.7 魔术方法 459 实例337 使用__set()方法为类未声明的属性赋值 459 实例338 使用__get()方法获取未定义属性的名称 461 实例339 使用__call()方法打印类未定义方法的信息 462 实例340 使用__toString()方法将类的实例转化为字符串 463 实例341 使用__isset()方法提示未定义属性信息 464 实例342 使用__unset()方法提示未定义属性信息 466 实例343 使用__autoload()方法自动导入类文件 467 7.8 设计模式 468 实例344 使用单例模式制作数据库管理类 468 实例345 使用策略模式打印客户端浏览器类型 470 实例346 使用工厂模式设置用户访问权限 472 第3篇 数据库篇 第8章 MySQL数据库与PHP 478 8.1 MySQL服务器的启动和关闭 479 实例347 启动MySQL服务器 479 实例348 连接MySQL服务器 480 实例349 关闭MySQL服务器 481 8.2 MySQL数据库 482 实例350 创建PHP图书数据库 482 实例351 选择PHP图书数据库 483 实例352 删除PHP图书数据库 484 8.3 MySQL数据表 485 实例353 在PHP图书数据库创建图书信息表 485 实例354 查看图书信息表 486 实例355 修改图书信息表 487 实例356 重命名图书信息表 488 实例357 删除图书信息表 489 8.4 MySQL数据 489 实例358 向图书信息表添加数据 489 实例359 修改图书信息表的数据 490 实例360 删除图书信息表所有数据 492 实例361 删除图书信息表指定数据 493 8.5 PHP操作MySQL数据库 494 实例362 mysql_connect()函数连接MySQL服务器 494 实例363 mysql_select_db()函数选择MySQL数据库 495 实例364 mysql_query()函数执行SQL语句 496 实例365 mysql_fetch_array()函数将结果返回到数组 497 实例366 mysql_fetch_row()函数从结果集获取数据 499 实例367 mysql_num_rows()函数获取结果集记录数 500 实例368 mysql_result()函数获取结果数据 501 实例369 Insert语句添加图书信息 502 实例370 Select语句查询图书信息 503 实例371 分页显示图书信息 505 实例372 Update语句更新图书信息 506 实例373 图书信息的批量更新 508 实例374 Delete语句删除图书信息 510 实例375 数据信息的批量删除 511 实例376 避免输出字符串时出现乱码 512 实例377 动态创建MySQL数据库 514 实例378 动态创建数据表 515 实例379 动态创建MySQL数据字段 516 8.6 SQL查询语句 518 实例380 查询数值型数据 518 实例381 查询字符串 519 实例382 查询日期型数据 520 实例383 查询逻辑型数据 521 实例384 查询非空数据 522 实例385 利用变量查询数值型数据 523 实例386 利用变量查询字符串数据 524 实例387 查询前n条记录 526 实例388 查询后n条记录 527 实例389 查询从指定位置的n条记录 528 实例390 查询统计结果的前n条记录 529 实例391 查询指定时间段的数据 530 实例392 按月查询统计数据 531 实例393 查询大于指定条件的记录 533 实例394 查询结果不显示重复记录 534 实例395 NOT与谓词进行组合条件的查询 535 实例396 显示数据表的重复记录和记录条数 536 实例397 对数据进行降序查询 537 实例398 对数据进行多条件排序 538 实例399 对统计结果进行排序 539 实例400 单列数据分组统计 540 实例401 多列数据分组统计 541 实例402 多表分组统计 542 实例403 使用聚集函数sum()对学生成绩进行汇总 543 实例404 使用聚集函数avg求学生的平均成绩 545 实例405 使用聚集函数min()求利润最少的商品 546 实例406 使用聚集函数max()求销售利润最高的商品 547 实例407 使用聚集函数count()求利润大于某值的数据 548 实例408 聚集函数first()和last()的使用 549 8.7 多表查询 551 实例409 使用select子句进行多表查询 551 实例410 使用表的别名进行多表查询 552 实例411 合并多个结果集 553 实例412 简单的嵌套查询 554 实例413 复杂的嵌套查询 555 实例414 嵌套查询查询统计的应用 556 实例415 使用子查询作派生的表 558 实例416 使用子查询作表达式 559 实例417 使用子查询关联数据 560 实例418 多表联合查询 561 实例419 对联合查询后的结果进行排序 562 实例420 条件联合语句 563 实例421 简单内连接查询 564 实例422 复杂内连接查询 565 实例423 两表的内连接关联 566 实例424 使用外连接进行多表联合查询 567 实例425 left outer join查询 568 实例426 right outer join查询 569 实例427 利用in或notin关键字限定范围 570 实例428 用in查询的记录信息 571 实例429 由in引入的关联子查询 572 实例430 利用transform分析数据 573 实例431 利用transform动态分析数据 574 实例432 使用格式化函数转换查询条件的数据类型 575 实例433 在查询使用字符串函数 577 实例434 在查询使用日期函数 578 实例435 利用having语句过滤分组数据 580 8.8 数据的导入和导出 581 实例436 MySQL数据自身的导入和导出 581 实例437 SQL Server数据导入到MySQL数据库 582 实例438 Access数据导入到MySQL数据库 584 8.9 MySQL数据库的备份和恢复 586 实例439 通过命令模式备份数据库 586 实例440 通过phpMyAdmin备份数据库 587 实例441 通过手动方式备份数据库 588 实例442 通过命令模式恢复数据库 589 实例443 通过phpMyAdmin恢复数据库 590 实例444 通过手动方式恢复数据库 591 8.10 phpMyAdmin图形化管理工具 591 实例445 通过phpMyAdmin修改MySQL用户密码 591 实例446 通过phpMyAdmin设置数据库、数据表编码 593 实例447 phpMyAdmin操作数据库 594 实例448 phpMyAdmin操作数据表 595 实例449 phpMyAdmin操作数据 596 第9章 MySQL高级应用技术 598 9.1 PHPMySQLi扩展库 599 实例450 使用MySQLi扩展库连接MySQL数据库 599 实例451 通过mysqli扩展库实现数据库信息的检索 600 实例452 查看服务器连接错误报告 602 实例453 通过MySQLi扩展库实现多表查询 603 实例454 通过MySQLi扩展技术实现内存的回收 604 实例455 用户登录 606 实例456 用户注册 607 实例457 数据的浏览 609 实例458 数据库、数据表数据的动态输出 611 9.2 MySQL视图的应用 613 实例459 在MySQL数据库创建视图 613 实例460 修改MySQL数据库的视图 614 实例461 删除MySQL视图 616 实例462 使用MySQL视图查询学生成绩信息 617 9.3 MySQL存储过程 618 实例463 创建MySQL存储过程 618 实例464 使用存储过程实现用户登录 619 实例465 使用存储过程实现用户注册 621 9.4 MySQL触发器 622 实例466 创建MySQL触发器 622 实例467 查看MySQL触发器 623 9.5 MySQL事务 624 实例468 使用事务处理技术实现关联表间信息的删除 624 实例469 使用事务处理技术实现银行的安全转账 626 第10章 PHP操作SQL Server数据库 628 10.1 连接数据库 629 实例470 通过ADO方式连接SQL Server数据库 629 实例471 mssql_connect()函数连接SQL Server数据库 630 10.2 操作数据库 631 实例472 通过ADO方式实现指定时间段的信息检索 632 实例473 检索商品信息 633 实例474 获取指定位置的图书信息 634 实例475 取得数据指定的字段信息 635 实例476 利用mssql_field_name()函数获取字段名称 637 实例477 通过结果集对象输出数据 638 实例478 通过结果集数组输出数据 639 实例479 返回结果集的单元内容 640 实例480 利用函数返回指定字段的长度 641 实例481 利用函数返回指定字段的类型 642 实例482 取得结果集的字段数目 644 实例483 获取数据表数据记录数 645 实例484 mssql_free_result()函数的应用 646 实例485 mssql_close()函数的应用 647 实例486 编写数据库连接类 648 实例487 添加图书类的实现 649 实例488 删除图书类的实现 651 实例489 更新图书类的实现 653 实例490 通过ADO方式实现输入页码跳转到指定页 655 实例491 利用mssql函数库实现指定页跳转 657 10.3 SQL Server数据库的综合应用 659 实例492 首页设计 659 实例493 网站模块导航设计 660 实例494 内容树状导航设计 663 实例495 内容展示区设计 666 10.4 SQL Server数据库的安全与维护 668 实例496 压缩数据库 668 实例497 收缩日志和数据 669 实例498 备份数据库 670 实例499 备份事务日志 671 实例500 检查备份集 673 实例501 定时备份数据库 674 实例502 数据库数据的加密 675 实例503 SQL Server数据库的分离和附加 675 实例504 从SQL Server数据库导出到Excel表 676 实例505 将查询到的数据导成一个Excel文件 678 第11章 PHP操作Access数据库 679 11.1 连接数据库 680 实例506 通过COM类连接Access数据库 680 实例507 连接带密码的Access数据库 681 11.2 操作Access数据库 682 实例508 通用数据信息的查询 682 实例509 查询结果的分页显示 684 实例510 用户身份验证类 686 实例511 图片的分栏显示 687 实例512 插入图书信息 688 实例513 删除图书信息 689 11.3 Access数据库的安全 691 实例514 操作带密码的Access数据库 691 实例515 防止Access数据库被下载 693 11.4 Access数据库的综合运用 694 实例516 ADODB连接Access数据库 694 实例517 ADODB操作Access数据库 696 实例518 聊天室 698 实例519 聊天室管理 702 第12章 PHP操作Oracle数据库 704 12.1 连接Oracle数据库 705 实例520 oci_connect()函数连接Oracle数据库 705 实例521 ADODB连接Oracle数据库 707 实例522 删除Oracle数据库数据 710 12.2 操作Oracle数据库 711 实例523 员工信息的添加、更新和查询 711 实例524 下拉列表框值的动态添加 713 实例525 统计数据库数据的记录数 714 实例526 动态获取数据表的字段和数据 716 实例527 获取数据表字段的详细信息 718 实例528 修改Oracle数据库用户的密码 719 实例529 应用事务处理技术确保操作的同步执行 720 实例530 通过PHP变量输出数据表数据 722 12.3 Oracle数据库应用 723 实例531 Oracle——管理员注册功能 723 实例532 Oracle——管理员登录 725 实例533 Oracle——管理员数据管理 727 实例534 Smarty+Adodb完成Oracle数据的分页显示 729 实例535 Oracle——存储过程更新员工信息 732 12.4 Oracle数据的导入和导出 734 实例536 Oracle数据库数据导出到文本文件 734 实例537 文本文件数据导入到Oracle 735 第4篇 新技术篇 第13章 ADODB类库 738 13.1 封装ADODB操作类 739 实例538 ADODB连接数据库类 739 实例539 ADODB操作数据库类 741 实例540 ADODB分页类 743 13.2 ADODB的应用 745 实例541 ADODB分页技术 745 实例542 Adodb_pager类实现分页功能 746 实例543 ADODB操作结果集的方法 747 实例544 ADODB控制结果集的存取方法 750 实例545 一次连接两个数据库 751 实例546 ADODB连接数据库类 753 实例547 ADODB生成HTML表格 754 实例548 ADODB生成下拉列表框 755 实例549 事务处理机制保证数据库操作的完整性 756 13.3 ADODB的错误处理 758 实例550 输出系统执行的SQL语句 758 实例551 ErrorMsg返回错误信息 759 实例552 返回所有错误信息 760 实例553 将错误信息存储于日志文件 761 13.4 ADODB操作数据库 762 实例554 应用ADODB访问Access数据库 762 实例555 应用ADODB访问MySQL数据库 764 实例556 应用ADODB访问SQL Server数据库 765 第14章 Smarty模板 767 14.1 环境搭建 768 实例557 Smarty开发环境搭建 768 实例558 Smarty模板的配置 769 实例559 封装Smarty模板的配置方法 771 14.2 输出数据 773 实例560 通过if语句判断当前用户的权限 773 实例561 Smarty模板生成数字验证码 775 实例562 Smarty模板的页面设计 776 实例563 Smarty模板直接定义CSS样式 778 实例564 Smarty模板嵌入JavaScript脚本 779 实例565 html_option函数向下拉列表添加列表项 780 实例566 Smarty模板制作日期、时间选择器 782 14.3 综合应用 785 实例567 Smarty模板制作用户注册页面 785 实例568 Smarty模板制作后台管理系统主页 788 实例569 通过section循环输出数据 790 实例570 Smarty模板数据的分页显示 792 实例571 Smarty+ADODB完成数据的分页显示 794 实例572 Smarty模板日期、时间的格式化输出 797 实例573 Smarty模板的编码 798 实例574 Smarty模板应用正则表达式 799 实例575 Smarty模板的关键字描红技术 801 实例576 Smarty模板控制输出字符串的行宽 802 实例577 Register_object()方法注册模板对象 804 实例578 Register_function()方法注册模板函数 807 实例579 Smarty模板truncate方法截取字符串 809 实例580 开启网站注册页面的缓存 811 实例581 通过配置文件定义变量 813 第5篇 综合应用篇 第15章 综合应用 816 15.1 PHP页面编码 817 实例582 设计GB2312编码格式的网页 817 实例583 设计GBK编码格式的网页 818 实例584 设计UTF-8编码格式的网页 819 实例585 PHP的国际化 821 15.2 网站公共文件设计 823 实例586 数据库连接类 823 实例587 数据库管理类 825 实例588 数据库分页类 827 实例589 Smarty模板引擎配置类 829 实例590 字符串处理类 830 实例591 网站的头文件设计 833 实例592 网站的尾文件设计 835 实例593 首页广告设计 836 15.3 注册、登录 837 实例594 用户注册 837 实例595 用户登录 840 实例596 用户心 841 实例597 我的订单 844 实例598 找回密码 846 15.4 数据的输出 847 实例599 图书导航 847 实例600 图书fenlei 848 实例601 特别图书 851 实例602 图书试读 853 实例603 图书详细信息展示 855 实例604 新闻公告 857 15.5 站内搜索 859 实例605 一般搜索 859 实例606 高级搜索 861 15.6 购物车 863 实例607 购物车类 863 实例608 购物车功能实现 865 15.7 图书订单处理 868 实例609 填写收货人信息 868 实例610 确认订购信息 870 实例611 支付宝在线支付 871 实例612 工行在线支付 873 15.8 后台管理系统登录 875 实例613 管理员登录 875 实例614 后台管理系统主页设计 877 15.9 系统管理 879 实例615 系统信息设置 879 实例616 更改管理员密码 880 15.10 图书类别管理 881 实例617 图书大类管理 881 实例618 图书小类管理 883 实例619 出版社fenlei管理 884 15.11 图书管理 886 实例620 图书信息管理 887 实例621 图书试读管理 890 15.12 用户管理 892 实例622 用户管理 892 实例623 用户反馈管理 894 15.13 订单信息管理 895 实例624 订单信息管理 895 15.14 通用信息管理 897 实例625 新闻公告管理 897
书名:《PHP开发实战1200例(第I卷)》(清华大学出版社.潘凯华.刘华) PDF格式扫描版,全书分为5篇15章,共899页。2011年1月出版。 全书压缩打包成2部分,这是第2部分。 注:本系列图书的第I、II卷再版时均相应改名为《xxx开发实例大全》(基础卷)及(提高卷),但内容基本无变化,需要的童鞋可自由匹配查找。 内容简介   《PHP开发实战1200例》分为I、II两卷共计1200个例子,包括了开发各个方面最常用的实例,是目前市场上实例最全面的开发类图书;书实例来源于多位工程师的多年积累,具有很强的实用性。 本书是第I卷,以开发人员在项目开发经常遇到的问题和必须掌握的技术为心,介绍了应用PHP进行Web开发的各个方面的知识和技巧,主要包括开发环境、PHP基础、Web页面交互、文件操作、会话应用、图形图像处理及面向对象等内容。本书分为5篇15章,共计625个实例和625个经验技巧。每个实例都经作者精心筛选,具有很强的实用性,其一些实例是开发人员难于寻觅的解决方案。    本书适合PHP的初学者,如高校学生、求职人员作为练习、速查、学习使用,也适合PHP程序员参考、查阅。 目 录 目录: 第1篇 基础篇 第1章 开发环境 2 1.1 AppServ——PHP集成化安装包 3 实例001 通过AppServ配置PHP开发环境 3 实例002 AppServ应用技巧 6 实例003 第1个PHP程序 7 1.2 XAMPP——PHP集成化安装包 8 实例004 通过XAMPP配置PHP开发环境 8 实例005 测试XAMPP是否安装成功 11 实例006 XAMPP应用技巧 12 实例007 第2个PHP程序 13 1.3 IIS+PHP+MySQL——独立搭建PHP 开发环境 14 实例008 安装PHP 14 实例009 安装MySQL 15 实例010 安装IIS 21 实例011 第3个PHP程序 23 1.4 LAMP——独立配置PHP开发环境 24 实例012 安装Apache服务器 24 实例013 安装MySQL数据库服务器 26 实例014 安装PHP.50 28 实例015 第4个PHP程序 30 1.5 XAMPP——Linux版PHP集成化安装包 31 实例016 XAMPP——Linux下PHP开发环境的集成化 31 实例017 Linux操作系统下启动XAMPP 32 实例018 设置MySQL数据库root用户的密码 33 实例019 第5个PHP程序 34 1.6 Dreamweaver开发工具 35 实例020 Dreamweaver编码格式的选择 35 实例021 Dreamweaver创建表格 36 实例022 在表格插入宠物照片 38 实例023 Dreamweaver创建表单 40 实例024 Dreamweaver创建和附加CSS样式 42 实例025 Dreamweaver控制弹出信息 45 实例026 Dreamweaver控制浏览器的窗口 46 实例027 通过Dreamweaver创建站点 47 实例028 通过Dreamweaver开发第1个PHP程序 48 1.7 Zend Studio开发工具 50 实例029 安装Zend Studio 50 实例030 Zend Studio创建PHP项目 52 实例031 Zend Studio编码格式的转换 56 实例032 Zend Studio快捷键的运用 57 实例033 Zend Studio部署Apache服务器 60 第2章 PHP基础 63 2.1 基本语法 64 实例034 在页面打印PHP的配置信息 64 实例035 在页面打印服务器时间 65 实例036 在页面打印当前执行的PHP文件名 67 实例037 区分单引号和双引号 68 实例038 动态输出JavaScript代码 69 实例039 当数字遇到了字符串 70 实例040 PHP程序员的基础——变量的应用 72 实例041 打印系统环境变量信息print_r($_ENV) 73 实例042 使用可变变量输出“I Like PHP!” 73 实例043 使用转义字符输出特殊字符 74 实例044 使用常量指定PI的值计算圆的面积 75 2.2 运算符 75 实例045 自定义数字的加密/解密算法 76 实例046 比较两个时间戳的大小 77 实例047 使用条件运算符判断数字的奇偶性 78 实例048 判断用户是否具有后台管理权限 79 实例049 打印随机组合生日祝福语 80 实例050 打印2000~2020年的所有闰年 81 实例051 前置运算符和后置运算符的区别 82 实例052 使用位运算
目录 第1章 PHP的介绍及环境搭建 2 1.1 PHP简介 2 1.1.1 PHP语言的发展简史 2 1.1.2 PHP的发展现状与未来展望 3 1.1.3 PHP语言的优势 3 1.1.4 相关资源及自学提示 4 1.2 PHP的应用范围及案例 5 1.2.1 PHP可以做什么 5 1.2.2 PHP擅长的几个领域及产品介绍 5 1.2.3 PHP不适合做什么 6 1.2.4 其他案例 6 1.3 PHP的Hello, world预览 6 1.3.1 第一个PHP程序Hello, world 6 1.3.2 学习PHP应该准备哪些软件 8 1.3.3 相关知识领域的介绍 9 1.4 程序运行环境的搭建 10 1.4.1 Apache简介 10 1.4.2 安装Apache与PHP 10 1.4.3 使用phpinfo()确认Apache与PHP 1.4.3 的安装成功 12 1.4.4 Apache的启动与关闭 12 1.4.5 Apache的配置文件httpd.conf与 1.4.5 .htaccess的简介 13 1.4.6 PHP的配置文件php.ini的简介 13 1.4.7 PHP常用参数的配置 14 1.5 几种综合网络服务器系统的安装 14 1.5.1 XAMPP 14 1.5.2 WAMP 16 1.5.3 Appserv 17 1.5.4 EasyPHP 18 1.5.5 VertrigoServ 19 1.6 几种开发工具的介绍 20 1.6.1 Vi及Vim 20 1.6.2 Eclipse+PHPEclipse插件 21 1.6.3 UltraEdit 21 1.6.4 EditPlus 22 1.6.5 支持PHP的IDE环境 22 1.7 小结 23 第2章 PHP的基础语法 24 2.1 语言构成与工作原理 24 2.2 常量与变量 25 2.2.1 常量的定义 25 2.2.2 变量的定义 26 2.2.3 变量的作用域 27 2.2.4 动态变量 29 2.3 运算符和关键字 29 2.4 流程控制语法 30 2.4.1 程序控制语句的简介 30 2.4.2 条件控制语句 30 2.4.3 循环控制语句 33 2.4.4 转移控制语句 35 2.5 表达式 36 2.5.1 简单的表达式例子 36 2.5.2 表达式的分类 36 2.5.3 算术操作表达式 36 2.5.4 字符串操作表达式 38 2.5.5 逻辑操作表达式 38 2.5.6 比较操作表达式 39 2.5.7 位操作表达式 40 2.5.8 运算符的优先级 41 2.6 特殊的全局变量的介绍 42 2.7 文件包含 42 2.7.1 使用require和require_once语句 2.7.1 进行文件包含 42 2.7.2 使用include与include_once语句 2.7.2 进行文件包含 44 2.8 小结 45 第3章 PHP的数据类型与操作 46 3.1 数据类型的介绍 46 3.1.1 标量数据类型 46 3.1.2 合成数据类型 49 3.1.3 特殊的数据类型 50 3.1.4 数据类型的获得与验证 51 3.2 数据类型间的转换 52 3.2.1 转换成整型 52 3.2.2 转换成浮点型 54 3.2.3 转换成字符串型 55 3.2.4 转换成布尔型 55 3.2.5 转换成数组 56 3.2.6 转换成对象 56 3.2.7 使用函数进行数据类型的强制 3.2.7 转换 57 3.3 小结 57 第4章 函数处理与数据引用 58 4.1 函数的定义与使用 58 4.1.1 函数的调用 58 4.1.2 用户自定义函数的编写 58 4.2 PHP常用函数 59 4.2.1 获得日期时间信息的函数getdate 60 4.2.2 获得当前时间的函数 4.2.2 gettimeofday 61 4.2.3 日期验证函数checkdate 61 4.2.4 格式化本地时间日期的函数date 62 4.2.5 获得本地化时间戳的函数mktime 64 4.2.6 输出控制函数flush 65 4.2.7 变量检测函数isset与变量释放 4.2.7 函数unset 66 4.2.8 随机函数rand与srand 66 4.3 关于引用的解释 67 4.3.1 对变量的引用 67 4.3.2 对函数的引用 68 4.3.3 引用的释放 68 4.4 小结 69 第5章 PHP类的应用 70 5.1 PHPOOP的应用 70 5.1.1 类简介 70 5.1.2 类的信息封装 71 5.1.3 静态类 71 5.2 创建一个简单类 71 5.3 PHP5与PHP4的差异 72 5.4 定义属性和方法 72 5.4.1 属性与方法的定义 72 5.4.2 传统的构造函数 73 5.4.3 PHP的一些特殊方法 74 5.5 类的引用、扩展与继承 75 5.5.1 类的引用 75 5.5.2 类的扩展与继承 76 5.6 操作与调用 77 5.6.1 静态类的调用 77 5.6.2 实例类型的判断方法instanceof 78 5.6.3 对象的克隆 78 5.7 一些设计观念 80 5.7.1 策略模式(Strategy Pattern) 81 5.7.2 单例模式(Singleton Pattern) 81 5.7.3 工厂模式(Factory Pattern) 83 5.8 接口与抽象类 86 5.8.1 接口的定义 86 5.8.2 单一接口的实现 87 5.8.3 多重接口的实现 87 5.8.4 抽象类 88 5.9 小结 90 第6章 文件系统与文本数据操作 91 6.1 PHP目录操作详解 91 6.1.1 打开目录 91 6.1.2 关闭目录 91 6.1.3 读取目录的文件 92 6.1.4 创建目录 92 6.1.5 删除目录 93 6.2 PHP件操作详解 93 6.2.1 打开文件 93 6.2.2 关闭文件 94 6.2.3 读取文件 94 6.2.4 写入文件 95 6.2.5 删除文件 96 6.2.6 复制文件 96 6.3 本地文件的操作实例——小型留言本 96 6.3.1 留言发表模块 96 6.3.2 浏览模块 98 6.4 远程文件的操作实例 99 6.5 文件的上传与下载 99 6.5.1 文件的上传 99 6.5.2 文件的下载 100 6.6 小结 101 第7章 字符的处理与正则表达式 102 7.1 字符类型的特殊性 102 7.2 字符的显示与格式化 102 7.2.1 字符的显示 102 7.2.2 字符的格式化 103 7.3 常见的操作 104 7.3.1 字符串重复操作——str_repeat 104 7.3.2 字符串替换操作——str_replace 7.3.2 和str_ireplace 104 7.3.3 字符串分解操作——str_split 106 7.3.4 字符串单词数的计算函数—— 7.3.4 str_word_count 107 7.3.5 字符串查找操作——strstr 108 7.3.6 获得字符串的长度——strlen 108 7.3.7 获得字符串的子串——substr 109 7.4 正则表达式简介 109 7.5 正则表达式与字符操作的综合应用 110 7.5.1 获得与模式匹配的数组单元—— 7.5.1 preg_grep 110 7.5.2 进行全局正则表达式的匹配—— 7.5.2 preg_match_all 111 7.5.3 进行正则表达式的匹配——preg_ 7.5.3 match 113 7.5.4 转义正则表达式字符——preg_ 7.5.4 quote 113 7.5.5 执行正则表达式的搜索和替换 7.5.5 函数——preg_replace 114 7.5.6 通过回调函数执行正则表达式 7.5.6 的搜索和替换——preg_replace_ 7.5.6 callback 114 7.5.7 用正则表达式进行字符串分割 7.5.7 ——preg_split 115 7.6 字符操作的注意事项 117 7.7 小结 118 第8章 数组操作与数据结构算法 119 8.1 一维数组与多维数组 119 8.1.1 一维数组简介 119 8.1.2 多维数组简介 119 8.2 常用的数组操作 120 8.2.1 数组的创建与调用 120 8.2.2 数组的更新 121 8.2.3 数组元素的遍历 122 8.3 数组索引与键值的操作技巧 123 8.4 数组的排序 125 8.4.1 递增排序——sort 125 8.4.2 递减排序——rsort 125 8.4.3 数组排序——array_multisort 126 8.5 几种数组的应用实例 127 8.5.1 顺序查找 127 8.5.2 二分法查找 128 8.5.3 使用array_search函数进行查找 129 8.5.4 线性表的入栈与出栈 129 8.5.5 数组的合并 131 8.5.6 数组的拆分 133 8.5.7 随机排序 134 8.6 小结 135 第9章 PHP程序调试 136 9.1 PHP的错误类型 136 9.1.1 语法错误 136 9.1.2 语义错误 137 9.1.3 逻辑错误 137 9.1.4 注释错误 137 9.1.5 运行时的错误 138 9.2 PHP程序调试策略 138 9.2.1 PHP的错误级别 138 9.2.2 打开PHP的错误报告 140 9.2.3 使用print进行程序调试 140 9.3 使用PHPEclipse进行PHP程序调试 141 9.3.1 使用Eclipse编写PHP程序的 9.3.1 好处 141 9.3.2 PHPEclipse的安装与启动 141 9.3.3 PHPEclipse的使用 142 9.3.4 PHPEclipse的语法错误强调功能 144 9.3.5 PHPEclipse的调试界面 144 9.3.6 使用PHPEclipse调试PHP代码 9.3.6 的常见问题 148 9.4 错误的处理 149 9.4.1 错误的隐藏 149 9.4.2 错误信息的定制 150 9.4.3 超时错误的处理 151 9.5 小结 152 第10章 PHP的异常处理 153 10.1 异常处理的原理 153 10.2 PHP的异常处理 154 10.2.1 异常类Exception 154 10.2.2 异常抛出关键字throw 155 10.2.3 异常捕获语句try-catch 156 10.2.4 异常处理函数设置set_exception 10.2.4 _handler 157 10.2.5 完整的异常信息 158 10.3 扩展的异常处理类 160 10.4 异常的传递与重掷 163 10.5 小结 165 第11章 PHP与表单 166 11.1 HTML表单简介 166 11.1.1 表单标签form 166 11.1.2 输入标签input与文本框 167 11.1.3 按钮 168 11.1.4 单选框与复选框 169 11.1.5 多行文本域标签textarea 171 11.1.6 下拉框与列表框标签select 172 11.2 表单数据的接收 173 11.2.1 GET方法 173 11.2.2 POST方法 176 11.3 常用表单数据的验证方法 177 11.3.1 姓名验证 177 11.3.2 日期验证 177 11.3.3 E-mail地址验证 178 11.3.4 密码字段的验证 178 11.3.5 改进的用户信息输入程序 178 11.4 URL编码解码函数 181 11.4.1 编码字符串——urlencode 181 11.4.2 解码字符串——urldecode 181 11.5 小结 182 第12章 PHP与JavaScript交互 183 12.1 JavaScript简介 183 12.2 JavaScript的数据类型 183 12.3 JavaScript程序设计基础 184 12.3.1 在HTML嵌入JavaScript 184 12.3.2 变量 185 12.3.3 注释 185 12.3.4 函数的定义与调用 186 12.3.5 条件语句 186 12.3.6 循环语句 189 12.3.7 对象 191 12.3.8 事件 192 12.4 PHP动态生成JavaScript代码 193 12.4.1 多行输出 193 12.4.2 单行输出 194 12.4.3 PHP动态生成JavaScript的 12.4.3 实例——进度条 194 12.5 在JavaScript调用PHP程序 196 12.5.1 页面的跳转 196 12.5.2 隐性调用PHP程序 196 12.6 JavaScript和PHP的综合实例——表单 12.6 验证 197 12.6.1 表单设计 197 12.6.2 JavaScript代码设计 199 12.6.3 PHP代码设计 200 12.6.4 代码的运行 201 12.7 小结 202 第2篇 PHP与数据库 第13章 关系型数据库的基础知识 204 13.1 关系型数据库与关系型数据库系统的 13.1 介绍 204 13.2 关系型数据库系统的结构与运行过程 205 13.2.1 关系型数据库系统的层次结构 205 13.2.2 关系型数据库系统的运行过程 206 13.3 常用的关系型数据库的介绍 206 13.3.1 MySQL 206 13.3.2 ORACLE 207 13.3.3 SYBASE 207 13.3.4 DB2 207 13.3.5 SQL Server 207 13.4 SQL语言简介 207 13.5 常见的数据库设计问题 208 13.6 关系型数据库的设计原则 209 13.6.1 第一范式(1NF) 209 13.6.2 第二范式(2NF) 209 13.6.3 第三范式(3NF) 210 13.7 数据库设计的方法与步骤 210 13.7.1 需求分析 211 13.7.2 概念设计的E-R方法 214 13.7.3 数据库的逻辑设计方法 215 13.7.4 物理设计阶段 218 13.7.5 数据库的实施阶段 218 13.7.6 数据库的运行和维护阶段 218 13.8 小结 218 第14章 MySQL的安装与操作 219 14.1 MySQL数据库的介绍 219 14.2 安装与配置 219 14.2.1 下载MySQL 219 14.2.2 MySQL的安装 220 14.2.3 MySQL的配置 221 14.2.4 MySQL的启动与关闭 222 14.3 如何创建一个数据库与表 223 14.3.1 登录与退出MySQL的命令行 14.3.1 管理模式 223 14.3.2 MySQL的数据库操作 224 14.3.3 表的创建 225 14.4 数据类型的介绍 228 14.5 索引与唯一值的介绍 229 14.6 数据的操作 230 14.6.1 表的修改 230 14.6.2 表的删除 231 14.6.3 数据的查询 231 14.6.4 数据的插入 236 14.6.5 数据的更新 238 14.6.6 数据的删除 239 14.7 小结 239 第15章 MySQLPHP的应用 240 15.1 PHP结合数据库应用的优势 240 15.2 Web数据库的工作原理 240 15.3 使用PHP操作MySQL数据库 240 15.3.1 数据库服务器的连接与断开 241 15.3.2 选择数据库 242 15.3.3 执行SQL语句 242 15.3.4 获得查询结果集的记录数 243 15.3.5 获得结果集的某一条记录 244 15.3.6 逐行获取结果集的每一条 15.3.6 记录 245 15.3.7 结果集的分页 248 15.3.8 用户动态添加记录 249 15.3.9 用户动态更新记录 251 15.3.10 用户动态删除记录 253 15.4 使用PHP获取MySQL数据库的信息 255 15.4.1 获取数据库的信息 255 15.4.2 获取表的信息 256 15.4.3 获取列的数目 256 15.4.4 获取列的名称 257 15.4.5 获取列的数据类型 257 15.4.6 获取列的长度 257 15.4.7 获取列的标志 257 15.4.8 一个完整的查看表各列属性 15.4.8 的实例 258 15.5 常见问题与解决方案 259 15.6 小结 261 第16章 数据库的程序逻辑 262 16.1 数据库程序逻辑与PHP程序逻辑的分体 16.1 设计原则 262 16.2 数据库的程序逻辑与数据的关系 262 16.3 存储过程的设计 263 16.3.1 定界符重定义 263 16.3.2 存储过程的创建与调用 264 16.3.3 存储过程的参数 265 16.3.4 复合语句 267 16.3.5 变量 268 16.3.6 条件语句 269 16.3.7 循环语句 271 16.3.8 游标 273 16.3.9 存储过程的删除 275 16.4 触发器的设计 275 16.4.1 触发器的创建与触发 275 16.4.2 触发器的删除 276 16.5 PHP与存储过程、触发器 277 16.5.1 PHP调用存储过程 277 16.5.2 PHP调用触发器 277 16.6 小结 279 第17章 Session与Cookie 280 17.1 Session与Cookie简介 280 17.2 PHPSession的实现 280 17.2.1 开始使用Session 280 17.2.2 Session预定义数组 281 17.2.3 Session的检测与注销 281 17.2.4 PHPSession处理的定制 282 17.3 Session应用实例——登录验证 286 17.3.1 数据库设计 286 17.3.2 HTML表单的设计 287 17.3.3 验证页面的编写 287 17.3.4 欢迎页面的编写 288 17.3.5 注销页面的编写 288 17.3.6 代码的运行 289 17.3.7 代码的改进 289 17.4 PHPCookie的实现 290 17.4.1 Cookie语法格式 290 17.4.2 Cookie预定义数组 290 17.4.3 创建一个Cookie 291 17.4.4 创建一个有时间限制的Cookie 291 17.4.5 创建一个有范围限制的Cookie 292 17.4.6 删除Cookie 292 17.4.7 浏览器重定向 292 17.4.8 Cookie的常见问题 293 17.5 Cookie应用实例——登录验证 293 17.5.1 HTML表单的设计 293 17.5.2 验证页面的编写 294 17.5.3 欢迎页面的编写 295 17.5.4 代码的运行 296 17.6 Cookie与Session的比较 296 17.7 小结 297 第18章 MySQLPHP的应用实例 第18章 ——留言本 298 18.1 留言本实例的系统分析 298 18.1.1 系统简介 298 18.1.2 系统模型设计 298 18.1.3 数据库设计 299 18.1.4 公共功能设计 299 18.2 使用MySQLPHP创建一个留言本 300 18.2.1 查看留言功能 301 18.2.2 发表留言功能 304 18.2.3 管理员身份验证功能 305 18.2.4 管理首页设计 307 18.2.5 留言回复功能 309 18.2.6 留言删除功能 311 18.2.7 留言回复删除功能 311 18.2.8 留言审批功能 312 18.2.9 退出管理员登录功能 312 18.3 小结 313 第19章 PostgreSQL与PHP的应用 314 19.1 PostgreSQL简介 314 19.2 PostgreSQL的安装 314 19.2.1 PostgreSQL的下载 314 19.2.2 PostgreSQL的安装 315 19.2.3 PostgreSQL服务的启动与停止 316 19.3 PostgreSQL的基本操作 317 19.3.1 pgAdmin Ⅲ的启动 317 19.3.2 服务器的连接 317 19.3.3 创建一个新数据库 318 19.3.4 创建一个表 318 19.3.5 对表数据的操作 320 19.3.6 SQL语句的执行 320 19.4 使用PHP存取PostgreSQL数据库 321 19.4.1 使用PHP的PostgreSQL扩展 321 19.4.2 数据库的连接与关闭 322 19.4.3 执行SQL语句 322 19.4.4 获得查询结果集的记录数 323 19.4.5 逐行获取结果集的每一条 19.4.5 记录 324 19.4.6 数据的插入、更新和删除 326 19.4.7 执行动态SQL语句 330 19.4.8 information_schema 331 19.5 小结 333 第20章 SQL Server与PHP的应用 334 20.1 SQL Server简介 334 20.2 SQL Server的安装 334 20.2.1 SQL Server的安装 335 20.2.2 SQL Server企业管理器 336 20.3 SQL Server的基本操作 336 20.3.1 创建一个数据库 336 20.3.2 创建一个表 337 20.3.3 对表数据的操作 338 20.3.4 SQL语句的执行 338 20.4 使用PHP存取SQL Server数据库 338 20.4.1 使用PHP的mssql扩展 339 20.4.2 数据库的连接与关闭 339 20.4.3 执行SQL语句 340 20.4.4 获得查询结果集的记录数 341 20.4.5 逐行获取结果集的每一条 20.4.5 记录 342 20.5 小结 344 第21章 Oracle与PHP的应用 345 21.1 Oracle简介 345 21.2 Oracle的安装 345 21.2.1 Oracle的安装 345 21.2.2 Oracle企业管理器 347 21.3 Oracle的基本操作 348 21.3.1 创建一个表 348 21.3.2 对表数据的操作 350 21.3.3 SQL语句的执行 350 21.4 使用PHP存取Oracle数据库 351 21.4.1 使用PHP的oci8扩展 351 21.4.2 数据库的连接与关闭 352 21.4.3 执行SQL语句 353 21.4.4 逐行获取结果集的每一条 21.4.4 记录 354 21.5 小结 355 第22章 不同数据库的差异 356 22.1 ANSI SQL及常见关系型数据库的SQL 22.1 扩展 356 22.1.1 ANSI SQL 356 22.1.2 MySQL对ANSI SQL的扩充 357 22.1.3 SQL Server的T-SQL 358 22.1.4 Oracle的PL/SQL 359 22.2 PHP数据库应用的差异 360 22.2.1 MySQLPHP的应用 360 22.2.2 PostgreSQL与PHP的应用 361 22.2.3 SQL Server与PHP的应用 361 22.2.4 Oracle与PHP的应用 362 22.2.5 SQLite与PHP的应用 363 22.2.6 Access与PHP的应用 363 22.2.7 ODBC与PHP的应用 364 22.3 小结 365 第3篇 PHP的高级应用 第23章 PEAR、PECL的应用 368 23.1 PEAR与PECL的介绍 368 23.2 PEAR的安装 368 23.3 PEAR的安装与使用 372 23.3.1 查看已安装的PEAR包 372 23.3.2 查看PEAR包的详细信息 373 23.3.3 安装一个PEAR包 373 23.3.4 PEAR包的升级 374 23.3.5 PEAR包的使用 375 23.4 常用的PEAR类库实例 375 23.4.1 使用DB类库进行数据库查询 375 23.4.2 使用Auth_HTTP类库进行身份 23.4.2 校验 378 23.4.3 使用HTML_Template_IT类库 23.4.3 进行模板替换 379 23.5 PECL的安装与使用 381 23.6 PECL扩展应用实例——Zip 381 23.6.1 Zip扩展的安装 381 23.6.2 一个Zip扩展的应用实例 382 23.7 小结 382 第24章 ADOdb的应用 383 24.1 ADOdb介绍 383 24.1.1 ADOdb的优势 383 24.1.2 ADOdb的适用场合 383 24.2 ADOdb类库的安装与配置 384 24.2.1 ADOdb的下载与安装 384 24.2.2 ADOdb的第一个测试程序 384 24.3 ADOdb的常用数据库操作 386 24.3.1 连接数据库 386 24.3.2 数据的插入、更新与删除 389 24.3.3 数据查询 390 24.3.4 记录分页的实现 391 24.3.5 多个数据库的连接方法 393 24.4 ADOdb的程序调试 395 24.5 小结 396 第25章 FPDF类库的应用 397 25.1 FPDF简介 397 25.2 FPDF的安装与配置 397 25.3 FPDF创建PDF文档 397 25.3.1 FPDF创建Hello World 397 25.3.2 在PDF插入图片 399 25.3.3 页眉与页脚 400 25.3.4 绘制表格 401 25.4 为FPDF增加支持 403 25.5 FPDF的实际应用 404 25.5.1 为文章系统创建PDF页面 405 25.5.2 动态生成企业产品名录 407 25.6 小结 408 第26章 PHP的缓存与静态化应用 409 26.1 为什么要静态化 409 26.2 大型应用的缓存机制与静态化 412 26.2.1 缓存机制 412 26.2.2 静态化机制 413 26.3 PHP如何实现静态化 413 26.3.1 根据模板生成静态页面 413 26.3.2 数据库与静态页的关系 415 26.3.3 静态页内容的修改 417 26.3.4 模板的替换 418 26.3.5 静态页上的动态操作 419 26.3.6 静态页面文件的目录 420 26.4 小结 423 第27章 PHP与XML格式操作 424 27.1 XML简介 424 27.2 简单的XML操作 425 27.2.1 创建一个SimpleXML对象 425 27.2.2 读取SimpleXML对象的XML 27.2.2 数据 427 27.2.3 XML数据的修改 432 27.2.4 标准化XML数据 432 27.2.5 XML数据的存储 432 27.3 XML文档的动态创建 433 27.4 XML应用实例——留言本 435 27.4.1 XML文件结构设计 435 27.4.2 提交页面的编写 435 27.4.3 显示页面的编写 437 27.5 小结 438 第28章 Smarty类库 439 28.1 Smarty简介 439 28.2 Smarty的安装与配置 440 28.2.1 Smarty的安装 440 28.2.2 Smarty的配置 440 28.3 Smarty程序设计 441 28.3.1 简单的Smarty程序设计 441 28.3.2 模板对象属性的定义 442 28.3.3 Smarty程序编写的一般步骤 443 28.4 Smarty模板设计 444 28.4.1 模板的变量 444 28.4.2 变量的修饰 444 28.4.3 区域循环方法 445 28.4.4 模板的条件判断 449 28.4.5 外部文件的载入 450 28.5 Smarty的实际应用——多模板网站 451 28.5.1 模板的设计 452 28.5.2 页面实现 453 28.6 小结 453 第29章 Zend Framework框架 454 29.1 Zend Framework的安装 454 29.2 dispatch程序的编写 455 29.3 controller程序的编写 456 29.3.1 首页controller的编写 456 29.3.2 其他页面controller的编写 457 29.4 视图文件的调用 458 29.4.1 普通文件的直接调用 458 29.4.2 模板文件的调用 459 29.5 用户输入的验证与过滤 460 29.5.1 字符串的验证与过滤 460 29.5.2 数组的验证与过滤 462 29.6 Zend Framework应用实例——留言本 463 29.7 小结 466 第30章 PHP与图像操作 467 30.1 PHP图像函数库简介 467 30.2 GD库的配置 467 30.3 一个简单的图像创建程序 468 30.4 GD库的应用实例 470 30.4.1 使用GD库创建图片缩略图 470 30.4.2 使用GD库生成验证码 472 30.4.3 使用GD库下载远程图片 474 30.4.4 使用GD库为页面增加水印 474 30.5 小结 476 第31章 Jpgraph创建统计图 477 31.1 Jpgraph简介 477 31.2 Jpgraph的安装与配置 477 31.2.1 Jpgraph的安装 477 31.2.2 Jpgraph的配置 478 31.3 Jpgraph绘制统计图的实例 478 31.3.1 简单的X-Y坐标图 478 31.3.2 改进的X-Y坐标图 481 31.3.3 柱形图 484 31.3.4 饼图 485 31.3.5 3D饼图 486 31.4 Jpgraph应用实例——工厂销量查询 31.4 系统 487 31.5 小结 491 第32章 PHP访问LDAP 492 32.1 LDAP简介 492 32.2 LDAP服务器的安装与配置 492 32.2.1 OpenLDAP的安装 493 32.2.2 OpenLDAP的配置 493 32.2.3 OpenLDAP的启动与关闭 495 32.2.4 OpenLDAP的数据操作 496 32.2.5 phpLDAPadmin简介 497 32.3 PHPLDAP扩展的配置 497 32.4 PHP与LDAP的相关操作 498 32.4.1 连接LDAP服务器 498 32.4.2 绑定LDAP服务器 498 32.4.3 断开LDAP服务器 499 32.4.4 查询LDAP目录内容 499 32.4.5 获得查询结果的值 501 32.4.6 计算查询结果的记录数 502 32.4.7 向LDAP添加一条新记录 503 32.4.8 更新LDAP的一条记录 503 32.4.9 从LDAP删除一条记录 504 32.4.10 错误处理 504 32.5 使用LDAP验证用户身份 505 32.6 小结 506 第33章 PHP与邮件系统 507 33.1 PHP邮件发送功能的配置 507 33.1.1 PHPSMTP功能的配置 507 33.1.2 建立自己的SMTP服务器 508 33.2 PHP的mail函数 509 33.2.1 简单的邮件发送方法 509 33.2.2 发送HTML格式文本 510 33.2.3 发送带附件的邮件 511 33.3 一个简单的邮件发送类 513 33.3.1 邮件发送类的创建 513 33.3.2 邮件发送系统的实现 515 33.4 小结 517 第34章 PHP加速器 518 34.1 Zend Optimizer 518 34.1.1 Zend Optimizer的安装 518 34.1.2 Zend Optimizer的配置 519 34.2 PHP Accelerator 520 34.2.1 PHP Accelerator的安装 520 34.2.2 PHP Accelerator的配置 521 34.3 Turck MMCache 522 34.3.1 Turck MMCache的安装 522 34.3.2 Turck MMCache的配置 522 34.4 eAccelerator 523 34.5 小结 523 第4篇 PHP与实际项目 第35章 用PHP构建CMS 526 35.1 了解CMS的需求 526 35.2 数据库设计 526 35.3 关键技术的实现 529 35.3.1 数据库连接的公用代码 530 35.3.2 网站开关的设计 530 35.3.3 模板更换机制 530 35.3.4 HTML编码转换 531 35.4 页面代码设计 531 35.4.1 首页的实现 532 35.4.2 注册页面的实现 536 35.4.3 分类文章列表页面与文章显示页面 35.4.3 的实现 538 35.4.4 投稿页面与添加新文章页面的实现 541 35.4.5 文章管理页面的实现 544 35.4.6 文章类别管理页面的实现 548 35.4.7 网站信息配置页面的实现 553 35.4.8 网站模板管理页面的实现 557 35.4.9 退出登录页面的实现 560 35.5 小结 561 第36章 用PHP构建搜索引擎 562 36.1 PHP对数据库数据的搜索 562 36.1.1 数据库的创建 562 36.1.2 搜索页面的设计 562 36.1.3 内容显示页面的设计 564 36.1.4 系统集成的调度策略 565 36.2 PHP对文本文件的搜索 566 36.3 PHP对现有搜索引擎的调用 567 36.4 小结 569 第37章 PHP与企业OA系统 570 37.1 了解OA的需求 570 37.2 数据库设计 571 37.3 关键技术的实现 572 37.3.1 根据登录用户的权限进入不同的 37.3.1 页面 572 37.3.2 项目与任务状态的级联更新 573 37.4 页面代码的设计 574 37.4.1 公共数据库连接代码 574 37.4.2 登录页面的设计 574 37.4.3 管理员、经理项目列表页面的设计 576 37.4.4 创建新项目页面的设计 579 37.4.5 项目修改页面的设计 582 37.4.6 普通员工任务列表页面的设计 588 37.4.7 新账号分配页面的设计 591 37.4.8 账号权限设置页面的设计 594 37.4.9 过期项目统计页面的设计 597 37.4.10 经理项目分配情况统计页面的 37.4.10 设计 600 37.4.11 员工任务分配情况统计页面的 37.4.11 设计 601 37.4.12 公司项目运营情况统计页面的 37.4.12 设计 602 37.5 小结 605 第38章 PHP与流程管理系统 606 38.1 流程管理系统的需求 606 38.2 数据库设计 607 38.3 关键技术的实现 609 38.3.1 使用触发器来记录请求更新日志 609 38.3.2 根据角色的不同对请求进行不同的 38.3.2 操作 609 38.4 页面代码的实现 610 38.4.1 设备维修请求列表页面的实现 610 38.4.2 提交新的设备维修请求页面的 38.4.2 实现 612 38.4.3 需要执行操作的请求列表页面的 38.4.3 实现 614 38.4.4 对请求执行操作页面的实现 617 38.4.5 操作日志列表页面的实现 624 38.5 小结 626 第39章 PHP与资源管理系统 627 39.1 资源管理系统的需求 627 39.2 数据库设计 627 39.3 关键技术的实现 630 39.3.1 使用SQL计算奖金额度 630 39.3.2 使用触发器来限制奖金额度 631 39.3.3 使用存储过程从其他数据表获取 39.3.3 数据 632 39.3.4 自动生成PHP代码控制网站开关 632 39.3.5 使用Jpgraph生成统计图 633 39.4 各功能模块的具体实现 634 39.4.1 用户权限认证的实现 634 39.4.2 订单输入模块的实现 636 39.4.3 库存管理模块的实现 640 39.4.4 账目管理模块的实现 645 39.4.5 员工奖金计算模块的实现 650 39.4.6 年度统计模块的实现 654 39.5 小结 656 第40章 多国语言的处理策略 657 40.1 对字符编码与GB2312、GBK和UTF-8 40.1 的理解 657 40.1.1 GB2312与GBK 657 40.1.2 Unicode、UCS与UTF-8 657 40.1.3 网页编码的实现 658 40.2 GLS设计思想简介 659 40.3 客户端语言选项的设置与获取 659 40.3.1 客户端语言选项的设置 659 40.3.2 使用PHP获取客户端语言选项 660 40.4 一个简单的带有多国语言支持的应用 660 40.4.1 数据库设计 660 40.4.2 页面代码的开发 661 40.4.3 语言设置页面的开发 665 40.4.4 语言配置文件选取页面的开发 666 40.4.5 语言配置文件的设计 667 40.5 小结 670 第41章 PHP在门户网站的应用 671 41.1 门户网站的特点 671 41.2 静态缓存和动态缓存 671 41.2.1 静态缓存与动态缓存的简介 672 41.2.2 一个对系统实现静态缓存的例子 672 41.2.3 一个对系统实现动态缓存的例子 674 41.3 门户网站的交互设计 677 41.3.1 什么是交互设计 677 41.3.2 一个不好的交互设计例子 677 41.3.3 改进的交互设计例子 679 41.4 负载均衡技术简介 682 41.4.1 常用的负载均衡技术 682 41.4.2 常用的负载均衡算法 683 41.5 一个使用用户排队机制解决网站大访问 41.5 量的例子 683 41.6 小结 686 第5篇 支持Web的系统 和网络维护 第42章 硬件安全与故障修复 688 42.1 服务器安全策略 688 42.2 操作系统的选择 688 42.2.1 Windows操作系统 688 42.2.2 UNIX与类UNIX操作系统 689 42.3 防火墙的应用 690 42.3.1 防火墙的简介 690 42.3.2 防火墙部署的简介 690 42.3.3 防火墙部署的实例 691 42.4 常见故障的处理 693 42.4.1 主板故障 693 42.4.2 内存故障 694 42.4.3 操作系统故障 695 42.4.4 网络故障 695 42.5 灾难的数据恢复 696 42.5.1 数据恢复技术简介 696 42.5.2 FinalData简介 696 42.6 小结 697 第43章 常见的程序漏洞和防护措施 698 43.1 允许用户任意设置全局变量漏洞 698 43.1.1 对非传入变量进行赋值的攻击方法 698 43.1.2 被包含文件的变量 699 43.1.3 漏洞的防护措施 699 43.2 越过表单限制漏洞 700 43.2.1 一个向服务器提交非法数据的例子 700 43.2.2 漏洞的防护措施 702 43.3 文件上传漏洞 702 43.3.1 一个简单的文件上传页面 702 43.3.2 漏洞防护措施 703 43.4 根据错误信息攻击服务器漏洞 703 43.5 SQL注入漏洞 704 43.5.1 SQL注入攻击的一般方法 704 43.5.2 漏洞防护措施 706 43.6 远程文件包含漏洞 706 43.7 小结 707 第44章 数据的备份策略 708 44.1 mysqldump工具介绍 708 44.1.1 单一数据库的导出 708 44.1.2 多个数据库的导出 710 44.2 MySQL数据库文件的备份与恢复 710 44.2.1 MySQL的数据存储结构 711 44.2.2 数据库文件的备份和恢复操作 711 44.3 MySQL数据表的备份与恢复 712 44.3.1 数据表的备份 712 44.3.2 数据表的恢复 712 44.4 对数据库进行定时备份的设定方法 713 44.4.1 数据库备份脚本的编写 713 44.4.2 添加计划任务 714 44.5 MySQL数据库双机热备份的实现方法 715 44.5.1 双机热备份的工作原理 715 44.5.2 主服务器的配置 715 44.5.3 从服务器的配置 716 44.5.4 服务器的状态检测 717 44.6 小结 718 第45章 服务器安全协议与用户身份 第45章 验证 719 45.1 SSL与HTTPS简介 719 45.2 OpenSSL与mod_ssl模块的安装与配置 719 45.2.1 OpenSSL的安装与配置 719 45.2.2 mod_ssl模块的配置 720 45.3 服务器证书的生成与使用 721 45.3.1 证书的生成 721 45.3.2 在Apache服务器上配置使用服务 45.3.2 器证书 722 45.4 使用证书进行客户端用户的身份验证 723 45.4.1 证书的生成 723 45.4.2 Apache服务器的配置 725 45.4.3 客户端证书的导入 725 45.5 小结 726 第46章 日志记录的分析 727 46.1 Apache服务器的日志 727 46.1.1 访问日志的格式 727 46.1.2 错误日志的格式 728 46.1.3 日志的定制 729 46.2 Web日志分析的作用 730 46.3 Web日志分析工具介绍 731 46.3.1 AWStats工具介绍 731 46.3.2 Webalizer工具介绍 734 46.4 使用PHP来查看访问日志并对日志进行 46.4 简单分析 735 46.5 小结 737 第6篇 PHP的扩展应用 第47章 PHP与网络客户端 740 47.1 PHP访问远程Web页面 740 47.1.1 fsockopen函数 740 47.1.2 一个远程提交数据的实例 740 47.2 PHP访问FTP服务器 742 47.2.1 连接和断开FTP服务器 742 47.2.2 登录FTP服务器 743 47.2.3 获取文件列表 743 47.2.4 文件的上传、下载和删除 744 47.2.5 目录的创建和删除 746 47.3 PHP的命令行模式 746 47.3.1 PHP命令行程序的简介 746 47.3.2 执行参数的获取 747 47.3.3 一个使用命令行方式访问FTP的 47.3.3 实例 748 47.4 小结 751 第48章 PHP与XML-RPC、SOAP 752 48.1 XML-RPC简介 752 48.1.1 客户端请求的XML格式 752 48.1.2 服务器响应的XML格式 755 48.1.3 错误信息的XML格式 755 48.2 PHP与XML-RPC的结合实例 756 48.2.1 PHP的XML-RPC库的介绍 756 48.2.2 PHP服务器端页面的编写 757 48.2.3 PHP客户端页面的编写 758 48.3 SOAP简介 759 48.4 PHP的SOAP应用实例 759 48.4.1 SOAP扩展库的使用方法 759 48.4.2 服务器端的编写 760 48.4.3 客户端的编写 761 48.5 小结 761 第49章 PHP与Web Service 762 49.1 Web Service简介 762 49.2 WSDL、UDDI与Web Service 762 49.2.1 WSDL简介 762 49.2.2 UDDI简介 763 49.3 PHP与Web Service的交互操作 764 49.3.1 NuSOAP类库 764 49.3.2 PHP创建Web Service 765 49.3.3 PHP访问Web Service 767 49.4 小结 768 第50章 PHP与Ajax 769 50.1 Ajax简介 769 50.1.1 Ajax的工作原理 769 50.1.2 Ajax的优势与劣势 769 50.2 XMLHttpRequest的使用 770 50.2.1 Ajax的初始化 770 50.2.2 简单的服务器请求 771 50.2.3 HTML文件的读取 772 50.2.4 XML文件的读取 774 50.3 PHP与Ajax的交互 777 50.3.1 使用GET方式与PHP交互 777 50.3.2 使用POST方式与PHP交互 779 50.4 Ajax的应用实例 780 50.4.1 用户名唯一性验证的实现 781 50.4.2 动态列表框的实现 782 50.5 小结 784 第51章 PHP扩展的开发 785 51.1 PHP扩展开发的简介 785 51.2 使用VC++编写PHP扩展 785 51.2.1 PHP扩展开发的前期准备 786 51.2.2 PHP扩展代码模板的生成 787 51.2.3 模板代码的修改与编译 788 51.2.4 扩展模块的调用 790 51.3 一个扩展应用实例的开发——简单的 51.3 加密解密函数 791 51.3.1 加密函数的编写 791 51.3.2 解密函数的编写 792 51.3.3 测试代码的编写 793 51.4 小结 793
第一章 绪论 1.1. 选题背景 这几年,许多新名词涌入我们的视野:博客、圈子、播客、WAP等。这些都预示着我们进入了一个新的互联网阶段web 2.0,它是相对web 1.0的新的一类互联网应用的总称,是一次从核心内容到外部应用的革命[10]。这个阶段发展迅速,互联网应用趋于多样化,其变化最大的是由web 1.0网站创造内容的时代变为由用户创造内容的web 2.0时代。 在web 2.0应用,博客(Blog)是web 2.0核心应用最典型、最流行的代表之一,也是web 2.0技术应用的最直观的表现,是web 2.0精神和理念的具体体现。 1.2. 问题的提出 Blog记载了日常发生的事情和自己的兴趣爱好,把自己的思想和知识和他人分享、交流,同时又通过“六度空间”结识了更多志趣相投的朋友;而越来越多专业知识的 Blog 的出现,让我们看到了 Blog 更多所蕴涵的巨大的信息价值:不同的 Blog 选择不同的内容,收集和整理成为很多人关注的专业 Blog ——目前越来越多的人获取信息的来源是一些固定的 Blog 。随着博客人数的增加, Blog 作为一种新的生活方式、新的工作方式、新的学习方式已经被越来越多的人所接受,并且在改变传统的网络和社会结构:网络信息不再是虚假不可验证的,交流和沟通更有明确的选择和方向性,单一的思想和群体的智慧结合变的更加有效,个人出版变成人人都可以实现的梦想—— Blog 正在影响和改变着我们的生活。 1.3. 系统的开发目标 管理员通过前台页面进入后台管理模块后,可对注册的博客用户进行维护,包括对注册用户的添加、查找、修改和删除。 管理员进入登录后,可对帐户进行管理,包括添加管理员帐户、修改管理员帐户、删除管理员帐户和对帐户进行权限设置。 博客用户通过前台登录后,可对自己的博客空间进行管理,包括发布自己的网络日志、收藏个人图片、和相关人员进行交流和沟通以及删除访问者发表的评论等。 因此,在具体设计实现该博客网站时,主要考虑了主流博客网站的几个主要功能:(1)博客的注册、登录验证功能(2) 网络用户通过关键字搜索博文功能(3) 最热门博客页面推荐浏览(4) 文章详细内容及相关评论显示(5) 博客页面访问量统计(6) 博客个人文章管理维护功能(7) 博客个人文章分类管理维护功能(8) 博客个人友情链接维护功能(9) 博客个人基本信息管理维护功能(10) 博客图片上传及个人相册管理(11) 网络用户写留言,博主查看留言。 第二章 系统设计 2.1. 系统分析 在整个blog进行开发之前,要确定出整个项目的整体架构,包括系统的选型、运行环境的确定及系统结构设计。下面对这进行详细介绍。 在进行软件系统开发的最初环节,一般都需要进行系统的选型,即根据系统功能的实际需求,选择合适的开发工具及软件架构。 blog对系统的可靠性、稳定性有比较高的要求。本系统设计时,比较主流的B/S设计有基于JSP、ASP、PHP、CGI及J2EE等模式。相比较而言PHP的功能相对简单,不适合做大程序;而CGI效率相对较低,所以也不考虑。由于J2EE的开源的框架提供了MVC模式实现框架Struts、对象关系模型的Hibernate 的框架及拥有事务管理和依赖注入的Spring。利用现存框架可以更快开发系统。所以选择Java技术作为blog 的开发工具。 为了增加系统的吞吐量,提高并发处理客户请求数量,系统采用了IBM服务器作为主机。在数据库处理方面,不需要在数据层借助存储过程及数据库服务器端函数封装过多的业务逻辑,因此数据库系统采用相对精巧的MySQL[6]。 该在线博客系统服务器端如果需要布置到其他主机上,则该主机必备条件如下: 1. 服务器端操作系统:独立于操作系统的跨平台系统,客户端MicroSoft Windows 2000及以上; 2. 数据库:MySQL 5.0.27版本; 3. Web服务器:Tomcat 5.5及以上版本,配合MVC设计模式及 Hibernate开发架构; 4. 客户端运行环境:能运行IE 5以上或Netscape 5以上浏览器的操作系统,配合使用Ajax技术; 5. 客户端运行工具:目前的系统采用浏览器作为客户端,为了支持Ajax开发框架,应该选择使用IE 5以上版本浏览器。 本网站以xp为Web平台,JSP+Ajax+Servlet+JavaBean+Hibernate为网站实现技术,建立基于MySQL数据库系统的核心动态网页,实现博客网站前台及博客个人维护管理等功能模块。 1、 系统处理的准确性和及时性:系统处理的准确性和及时性是系统的必要性能。在系统设计和开发过程,要充分考虑系统当前和将来可能承受的工作量,使系统的处理能力和响应时间能够满足信息处理的需求。 2、 系统的开放性和系统的可扩充性:系统在开发过程,应该充分考虑以后的可扩充性。例如数据表用户选择字段方式的改变,用户查询的需求也会不断的更新和完善。所有这些,都要求系统提供足够的手段进行功能的调整和扩充。而要实现这一点,应通过系统的开放性来完成,既系统应是一个开放系统,只要符合一定的规范,可以简单的加入和减少系统的模块,配置系统的硬件。通过软件的修补、替换完成系统的升级和更新换代。 3、 系统的易用性和易维护性:要实现这一点,就要求系统应该尽量使用用户熟悉的术语和信息的界面;针对用户可能出现的使用问题,要提供足够的在线帮助,缩短用户对系统熟悉的过程。 4、 系统的数据要求:1、数据录入和处理的准确性和实时性。2、数据的一致性与完整性。3、数据的共享与独立性。 2.2. 系统的可行性分析 2.2.1. 技术可行性 技术上的可行性分析要考虑将来要采用的硬件和软件技术能否满足用户(这里是服务器,网速)提出的要求(如计算机的容量、速度等)。此外,还要考虑开发人员的水平,学习了两年的jsp开发,对于这个系统的编写,我想完整的之需要两个月就可以写出程序,再花上几天的调试,计划两个月左右就可以完成投入使用了。 我们掌握了数据库及其应用技术、数据库原理、计算机网络技术等课程,对数据库的设计、应用、维护及局域网的组成有了深刻的认识与一定的动手实践能力,考取了信息处理、程序设计、数据库技术等国家IT认证。从一定程度上具备了开发一个小型系统的能力。再有就! 2.2.2. 经济可行性 主要从对项目的经济上进行分析评价,一方面是支出的费用,包括设备购置费、管理和维护费用、人员工资和培训费等,另一个是取得的收益。这是个小型的系统,从投入的人力,财力与物力来讲是非常小的,发布出去之需要注册域名就可以了,从节省人力方面,可以让管理人员从繁与复杂的工作解脱出来,做更多的工作。 2.2.3. 管理可行性 有IP地址、用户名与密码等,可以下载一个FTP上传工具(cure)上传更新后的内容.可以在http://www.skycn.com/soft/683.html下载到. 下载以后,通过"站点管理"-->"新建站点".输入IP,用户名,密码.然后连接即可. 当然也可用FTP工具.直接在IE浏览器地址栏输入ftp://www.域名/然后输入用户名和密码.同样可以上传.随时更新文件! 第三章 开发环境的说明与安装 3.1. 开发语言的选择 3.1.1. JAVA简介 Java是Sun公司推出的新的一代面向对象程序设计语言,特别适合于Internet应用程序开发。Java的产生与流行是当今Internet发展的客观要求,Java是一门各方面性能都很好的编程语言,它的基本特点是简单、面向对象、分布式、解释的、健壮的、安全的、结构立的、可移植的、性能很优异的、多线程的、动态的,特别适合在Internet环境上开发的应用系统。 3.1.2. Web应用程序开发环境—JSP技术 JSP的全称是Java Server Pages,它是SUN推出的一种动态网页技术标准。它在传统的静态页面文件(*.html,*.htm)加入JAVA程序片段和JSP标记,就构成了JSP页面。JSP具有以下的优点: 1、将业务层与表示层分离:使用JSP技术,网络开发人员可充分使用HTML来设计页面显示部分(如字体颜色等),并使用JSP指令或者JAVA程序片段来生成网页上的动态内容; 2、能够跨平台:JSP支持绝大部分平台,包括现在非常流行的LINUX系统,应用非常广泛的Apache服务器也提供了支持JSP的服务; 3、组件的开发和使用很方便:如ASP的组件是由C++,VB等语言开发的,并需要注册才能使用;而JSP的组件是用Java开发的,可以直接使用; 4、一次编写,处处运行:作为JAVA开发平台的一部分,JSP具有JAVA的所有优点,包括Write once , Run everywhere. 3.2. 数据库的选择 3.2.1. Web应用程序开发环境—SQLserver数据库 SQL Server是由Microsoft开发和推广的关系数据库管理系统(DBMS),它最初是由Microsoft、Sybase和Ashton-Tate三家公司共同开发的。SQL Server 2000是Microsoft公司于2000年推出的最新版本。 SQL Server 特点:   1.真正的客户机/服务器体系结构。   2.图形化用户界面,使系统管理和数据库管理更加直观、简单。   3.丰富的编程接口工具,为用户进行程序设计提供了更大的选择余地。   4.SQL Server与Windows NT完全集成,利用了NT的许多功能,如发送和接受消息,管理登录安全性等。SQL Server也可以很好地与Microsoft BackOffice产品集成。   5.具有很好的伸缩性,可跨越从运行Windows 95/98的膝上型电脑到运行Windows 2000的大型多处理器等多种平台使用。   6.对Web技术的支持,使用户能够很容易地将数据库的数据发布到Web页面上。   7.SQL Server提供数据仓库功能,这个功能只在Oracle和其他更昂贵的DBMS才有。   SQL Server 2000与以前版本相比较,又具有以下新特性 :   1.支持XML(Extensive Markup Language,扩展标记语言)   2.强大的基于Web的分析   3.支持OLE DB和多种查询   4.支持分布式的分区视图   安装、运行SQL Server 2000的硬件需求   (1)计算机   Inter及其兼容计算机,Pentium 166Mz或者更高处理器或DEC Alpha和其兼容系统。   (2)内存(RAM)   企业版最少64MB内存,其他版本最少需要32MB内存,建议使用更多的内存。   (3)硬盘空间   完全安装(Full)需要180MB的空间,典型安装(Typical)需要170MB的空间,最小安装(Minimum)需要65MB的空间。 3.3. 开发工具的选择 MyEclipse,Deamweare,选择SQLserver作为后台的数据库,选择JAVA、JSP、JavaScript、Html作为应用程序开发工具,运用Tomcat服务器技术,整个系统完全基于B/S (Browser/Server)模式进行设计。 1、Tomcat应用服务器 目前支持JSP的应用服务器是较多的,Tomcat是其较为流行的一个Web服务器,被JavaWorld杂志的编辑选为2001年度最具创新的Java产品,可见其在业界的地位。 Tomcat是一个免费的开源的Serlvet容器,在Tomcat,应用程序的部署很简单,你只需将你的WAR放到Tomcat的webapp目录下,Tomcat会自动检测到这个文件,并将其解压。你在浏览器访问这个应用的Jsp时,通常第一次会很慢,因为Tomcat要将Jsp转化为Servlet文件,然后编译。编译以后,访问将会很快。 Tomcat也具有传统的Web服务器的功能:处理Html页面。但是与Apache相比,它的处理静态Html的能力就不如Apache。我们可以将Tomcat和Apache集成到一块,让Apache处理静态Html,而Tomcat处理Jsp和Servlet。Tomcat是一个很好的工具,不仅仅因为其免费,功能强大,更因为其开放性,越来越受到人们的重视。 2、 B/S 开发模式 伴随着Internet的迅速发展,计算机技术正在由基于C/S(client/ Server)模式的应用系统转变为基于B/S模式的应用系统。 过去,网络软件的开发都采用C/S(client)模式,在这种模式下,主要的业务逻辑都集于客户端程序,因此,必然导致以下问题: 系统安装、调试、维护和升级困难。由于客户端的硬件配置可能存在差异,软件环能各不相同,因此,在安装时,必须对每一个客户端分别进行配置,同样,在软件升级时也要对客户端分别处理。 B/S模式带来了巨大的好处: 开发成本及维护成本降低。由于B/S架构管理软件只安装在服务器端(Server)上,即应用程序在部署、升级、维护时,只需要在服务器端进行配置就可以了,网络管理人员只需要管理服务器就行了,用户界面主要事务逻辑在服务器(Server)端完全通过WWW浏览器实现,极少部分事务逻辑在前端(Browser)实现,所有的客户端只有浏览器,网络管理人员只需要做硬件维护。 良好的安全性能,防火墙技术可以保证后台数据库的安全性。所有的配置工作都集在服务器端且所有客户端请求都是通过DBMS来访问数据库,从而大大减少了数据直接暴露的风险。 第四章 系统设计 4.1开发框架技术介绍 对于框架技术,我们采用Struts+ajax的整合! Struts是应用比较广泛的一种表现层框架 1、 Struts是一个为开发基于模型(Model)-视图(View)-控制器(Controller)(MVC)模式的应用架构的开源框架,是利用Servlet,JSP和custom tag library构建Web应用的一项非常有用的技术。由于Struts能充分满足应用开发的需求,简单易用,敏捷迅速。它使用服务层框架可以将JavaBeans从Jsp/Servlet分离出来,而使用表现层框架则可以将Jsp剩余的JavaBeans完全分离,这部分JavaBeans主要负责显示相关信息,一般是通过标签库(Taglib)实现,不同框架有不同自己的标签库,Struts是应用比较广泛的一种表现层框架。 2、 Ajax我们主要应用就是xmlhttprequest,回调函数实现局部刷新达道数据更新! 4.2需求分析 Blog网站主要是实现注册用户登录、管理相关信息、博文及相关评论、查看留言、友情链接、及图片的上传和图像的播放而为上网用户提供按博文主题搜索,查看注册用户的博文及提出相关评论,并为注册用户写留言,游览注册用户的相册、注册等功能的系统。下面就以两种不同的用户来分析博客网站的需求。 4.2.1注册博友 首先必须在博客首页登录填写用户名和密码,这样才能执行一些相关操作,不然就是普通用户只能查看一些信息,而不能发表博文。可以在管理页面上添加博文的分类,可以上传图片和游览自己的相册,在上传过程可以将一张图片定义为自己的签名,在个人管理页面注册用户还可以修改自己的个人信息。博文管理,友情链接管理及博文分类管理,用例图2。 图2 博客管理页面的用例图 在博客主界面发表博文时可以选择博文类型,这样可以更好管理自己的博文。并查看和删除网友对自己的博文的一些评论、查看和删除网友留下的一些留言,提供与其他网友交流的空间。更好交流,在信息时代人们通过个人空间沟通也用来但不能在自己的博客主页面提交评论和留言。。这样在本系统就可以为博友提供更多的个人色彩。在管理页面添加和删除友情连接。这样博友可以在自己空间快速定位自己的关心的网站。这样还可以让网友看到自己的一些信息。友情链接及网页访问量统计显示:在博客的个人页面还提供了推荐给普通网络用户的相关友情链接,此外,对个人页面的访问量也在随时进行统计,并在个人页面进行直观的显示。 博客主页面的用例图如图3所示: 图3 博客主页面的用例图 4.2.2 普通用户 在博客注册页面注册成为博客的注册用户,才可以拥有自己独立的空间,进入某一博客页面查看相关文章信息时,可以随时对自己所感兴趣的文章发表评论,同时也可以查看到其他人针对该博文的评论。普通用户在阅读博文时可以在最后留下自己的一些评论。他也可以留下更多的信息。这样他可以写留言。这样他留下的信息就更快地被博友所看到。普通用户进入博友的用例图如图4所示: 图4上网博友在博客主页面的用例图 普通网友可以搜索自己关心的一些数据。并且在搜索结果提供在结果范围内再次搜索。这样就可以将范围缩小。首页向注册用户提供登陆模块,注册用户在博客网站首页跟上网网友一样可以查看博客和博文推荐。上网网友可以注册成为博客用户,拥有自己独立的空间。这一模块的用例图如图5所示: 图5 博客首页的用例图 4.3 功能模块介绍 4.3.1 博客注册登录管理模块 博客注册登录管理模块用于建立博客网站固定的客户群体,通过记录对应的博客档案,实现对博客信息的后台维护及管理,同时也便于通过博客档案库将网站最新动态及相关企业的信息方便地传达给每一位潜在的客户。 该功能模块实现了以下几个子功能。 (1)新博客在线注册。 (2)博客登录管理。 (3)跳转到博客主页。 只有进行登录并通过身份验证的用户,才可以在个人博客页面发表日志,并借助个人设置实现对个人博客相关信息的管理维护。对于没有经过身份验证的网络用户不允许在博客页面发表日志,更不允许对博客页面信息进行管理维护。 该模块实现新博客的注册及登录验证功能。其,注册新博客时会对用户输入的注册信息进行有效性验证,包括基本数据格式的有效性以及逻辑有效性,例如,用户名被占用时将及时给出提示。注册成功的博客登录时,会随时根据博客输入的登录信息进行提示,如用户名错误或者密码错误。 4.3.2 博客及文章检索查询模块 博客及文章检索查询模块为网络用户提供便捷的搜索,以及日志阅读浏览等功能,同时对日志的评论信息、博客推荐也能够及时反馈给网络用户。 该功能模块实现了以下几个子功能。 (1)热门博客页面推荐。 (2)最新博客日志推荐。 (3)日志信息关键字搜索。 该模块能够在网页随时提供在线的最新日志信息。该信息需要定期更新,网络用户可以随时获得最新日志以及最热门的博客推荐。在客户选择了某个博客或者某个感兴趣的日志后,可以方便地跳转到对应博客页面进行日志的阅读,并和博客进行交流互动。 为了使网络用户尽快定位到所需的博客资料及日志信息,本模块提供了搜索功能,用户可以对所关注的日志信息按照标题进行关键字搜索,以避免用户浏览多个页面来寻找所需的日志信息。 4.3.3博客页面显示模块 当网络用户进入某个人博客主页后,在该页面将提供博客日志列表的显示,同时为了方便用户浏览,在该模块提供根据分类名进行日志列表的显示,也提供日志评论的浏览,此外还允许用户在博客页面发表评论及留言。 该功能模块实现了如下几个子功能。 (1)用户可以分页查看对应的日志内容及评论信息。 (2)用户可以针对日志内容发表评论。 (3)用户可以针对博客进行留言。 (4)用户可以分类查看日志内容。 在该模块还提供了博客页面统计信息,日志、评论及留言信息分页显示等方便用户的显示效果。 4.3.4 博客个人维护管理模块 博客个人维护管理模块用于实现用户对博客个人主页及相关信息的动态管理。 该功能模块实现了如下几个子功能: (1)日志及日志分类管理。 (2)评论及留言管理。 (3)个人基本信息维护管理。 借助该模块,用户可以随时对个人博客主页的内容进行增加或修改,包括日志分类信息的更新、评论及留言管理等功能,也允许用户对博客的个人信息进行维护及其管理。 4.4 系统分析 本系统采用严格的J2 EE 应用结构,主要有如下几个分层。 1. 表现层:由JSP 页面组成。 2. MVC 层:使用Struts框架。 3. 业务逻辑层:主要由Spring loC 容器管理的业务逻辑组件组成。 4. DAO 层:由7 个DAO 组件组成,实现类必须继承Spring提供的HibernateDaoSupport。 5. Hibernate 持久层:由7 个PO 组成,并在Hibernate Session 管理下,完成数据库访问。 6. 数据库服务层:使用MySQL 数据库存储持久化数据。 系统的具体分层如图5 所示。 图6 系统结构图 在图6 黑色大方框内的MVC 控制层、Service 层及DAO 组件层的组件,都由Spring IOC 容器负责生成,并管理组件的实例(实例必须是单身模式的,本系统的bean基本上是单身的)。 4.3.1系统架构说明 本系统不仅严格按MVC 模式设计,还按J2 EE 分层设计,将间层严格分成业务逻辑层、DAO 层及数据持久层等。MVC 层的控制器绝对禁止持久层访问,甚至不参与业务逻辑的实现。表现层采用传统JSP 技术。 本系统采用的是典型的J2EE 三层结构,分为表现层、间层(业务逻辑层)和数据服务层。三层体系将业务规则、数据访问及合法性校验等工作放在间层处理。客户端不直接与数据库交互,而是通过组件与间层建立连接,再由间层与数据库交互。Jsp广泛的应用和稳定的表现,为其作为表现层技术打下了坚实的基础。间层采用的是流行的Spring+Hibernate ,为了将控制层与业务逻辑层分离,又细分为以下几种。 Web 层,就是MVC 模式里面的C,负责逻辑层和表现层的交互。调用业务逻辑层,并将业务数据返回给表现层作组织表现,该系统的MVC采用Struts框架。 Service 层(就是业务逻辑层),负责实现业务逻辑。业务逻辑层以DAO 层为基础,通过对DAO 组件的正面模式包装,完成系统所要求的业务逻辑。 DAO 层,负责与持久化对象交互。该层封装了数据的增、删、查、改的操作。 PO ,持久化对象。通过实体关系映射工具将关系型数据库的数据映射成对象,很方便地实现以面向对象方式操作数据库,该系统采用Hibernate 作为ORM 框架。Spring 的作用贯穿了整个间层,将Web 层、Service 层、DAO 层及PO 无缝整合,其数据服务层用来存放数据。 通过使用Hibernate 持久层,可以避免使用传统的JDBC 操作数据库,对JDBC近一步包装,从而更好地使用面向对象的方式来操作数据库。保证了整个软件开发过程以面向对象的方式进行,即面向对象分析、设计及编程,透过Hibernte 对PO对象持久化操作,不管插入还是查询都是通过PO。 4.3.2实现DAO 层 DAO 还有助于提升系统的可移植性。独立的DAO 层使得系统能在不同的数据库之间轻易切换,底层的数据库实现对于业务逻辑组件是透明的。数据库移植时仅仅影响DAO 层,不同数据库的切换不会影响业务逻辑组件,因此提高了系统的可复用性。 对于不同的持久层技术, Spring 的DAO 提供一个DAO 模板,将通用的操作放在模板里完成,而对于特定的操作,则通过回调接口完成。Spring 为Hibernate 提供的DAO 支持类是: HibernateDaoSupport。 4.3.3 DAO组件的定义 DAO 组件提供了各持久化对象的基本的CRUD 操作。而在DAO 接口里则对DAO组件包含的各种CRUD 方法提供了声明,但有一些IDE 工具也可以生成基本的CRUD方法。使用DAO 接口的原因是:避免业务逻辑组件与特定的DAO组件藕合。由于DAO 组件的方法不是开始就设计出来的,其的很多方法可能会随着业务逻辑的需求而增加,但以下几个方法是通用 的。 • get: 根据主键加载持久化实例。 • saveor update: 保存或更新持久化实例。 • remove: 删除持久化实例。 上面涉及了7个PO,这样我们必须设计7个对应的PODao 7个Dao必须继承BaseDao 这个BaseDao 有对接口的一些基本的CURD操作。7个Dao 如下。LinksDao ,BlogDao、FeedBackDao、ArticleDao、MessageDao、SortDao、PictureDao。这7个Dao 分别封装对自己的持久化对象的一些操作。 4.3.4 部署DAO 层 HibernateDaoSupport类只需要一个SessionFactory 属性,即可完成数据库访问。SessionFactroy创建Session,而数据库的CRUD操作都是有Session 完成,并将查询结果保存在一级缓存,每次用户提交一次会话,可能需要Session完成一些数据库的操作而实际的数据库访问由模板类HibernateTemplate完成,该模板类提供了大量便捷的方法,简化了数据库的访问。 第五章 数据库设计 5.1定义(数据词典) 1、数据库表名的定义使用:重点字_table;重点字可以是多个英文单词的组合,从组合的第二单词起首字母大写,字段命名是能表达字段内容的英文单词的组合,组合方式同表名重点字相同。 2、NN 表示not null 不填表可为空。 3、数据类型不使用固定数据库的类型,标识大众类型,如字符串、字符、数字等。这样在更改数据库时需求的数据是可移植的 4、输写数据表在数据库的物理名称,可用自己熟悉的语言再定义表名称,方便沟通。 5、长度定义又数据类型决定:如字符串可选8000以下,数字可在50位之间,字符只允许一位。 6、输入方式表示数据的来源:生成表由程序或数据库的索引自动生成,而不需人工录入;输入表示通过文本框等输入的数据;选择表单选框、复选框、下拉列表等通过选择输入的数据;自定获取是为外码的输入设定的,它由程序自动获取。 5.2主要表结构如下 1. 表[blogs]日志数据表 字段名 类型 说明 blogid Int(10) 日志的ID title text 日志标题 pubtime Int(11) 日志发表时间 authorid Int(8) 日志作者的UID replies Int(8) 日志的评论数 tbs Int(8) 日志的trackback数 views Int(8) 日志的查看次数 category Int(3) 日志所属的分类的ID content mediumtext 日志正文内容 property Int(1) 日志的属性 0 公开日志 1 锁定日志 2 隐藏日志 3 一般草稿 2.表[user]博友登陆信息表 字段名 类型 说明 userid Int(10) 博友ID nicheng Text 博友在博客里的称呼 username text 登陆时的用户名 password text 登陆密码 3.表[register]用户数据表 字段名 类型 说明 userid Int(8) 登陆时需要用到的用户名 username text 用户昵称 userpwd Int(8) 登陆密码 regtime Int(11) 注册时间 usergroup Int(2) 所属的用户组ID email text 用户email qq text Qq号 msn text 用户msn gender text 用户性别 第六章 主要功能的实现 6.1 登录控制: if(this.session().getAttribute("rand")!=null){//检验随机数是否为空 if(this.checkCode.equals(this.session().getAttribute("rand").toString())){//比较随机数 uservo=userbo.queryUserByINfo(uservo);//检验用户信息并将信息返回 if(uservo!=null){//看用户是否存在 this.setUserpurview(uservo.getPurviewId());//设置用户权限 this.session().setAttribute("user", uservo);//将用户信息放在session return SUCCESS;//返回用户主界面页面 }else{ return ERROR;返回到失败页面} }else{return ERROR; }}else{ return ERROR; } 6.2 Ajax 读取txt格式数据 function ajax_function(var1,var2){ var xmlHttp = null; //创建xmlhttprequest try { // Firefox, Opera 8.0+, Safari 对不同浏览器常见不同对象 xmlHttp=new XMLHttpRequest(); } catch (e) { try { // Internet Explorer xmlHttp=new ActiveXObject('Msxml2.XMLHTTP'); } catch (e) { try { xmlHttp=new ActiveXObject('Microsoft.XMLHTTP'); } catch (e) { alert('Your browser does not support AJAX!'); return false; } } } xmlHttp.onreadystatechange=function() { if(xmlHttp.readyState == 4 && xmlHttp.status == 200) { var someDiv = document.getElementById('someDiv'); someDiv.innerHTML=xmlHttp.responseText; } } xmlHttp.open('GET','www/index.jsp?param1='+var1+'¶m2='+var2,true); xmlHttp.send(null); } 6.3 系统架构与数据库的连接 由于我们开发时是利用MVC的设计模式,所以在此我们的数据库连接是封存在M的,即只要我们和M层连接上,就已经连接上数据库了。 Hibernate使用数据库和配置信息来为应用程序提供持久化服务(以及持久的对象)。我们只需在hibernate.cfg.xml配置以下语句即可: sa jdbc:microsoft:sqlserver://localhost:1035;DatabaseName=webexamine org.hibernate.dialect.SQLServerDialect sqlserver2000 aaaaaaaa com.microsoft.jdbc.sqlserver.SQLServerDriver org.hibernate.dialect.HSQLDialect true 其实我们在这里配置了一个数据连接,以保证系统的正常运行,我们需要使用proxool连接池,我们经测试,分别用proxool、tomcat JNDI、Hibernate自带的连接池进行配置之后分别执行以上的10000条数据插入和读取,结果显示proxool的性能要优于tomcat JNDI,而Hibernate自带的就更不用提了,差很远。依次为:39265毫秒/10000条、26013毫秒/10000条、50029毫秒/10000条。 6.4数据的备份与还原 我们根据Mysql数据库提供的backup(备份)命令及restore(恢复)命令,进行数据库的备份与还原,在连接数据库后,我们在需要备份和还原的地方加入以下语句: backup database to disk='备份文件名' restore database from disk='备份文件名' 然后发送给数据库的管理对象进行数据还原与备份。 在知道了数据库备份与还原的接口后,用JAVA进行具体的连接,这里采用JAVA直连的方 法,部分代码如下: try{ String user="sa";//连接sqlserver2000数据库登陆名 String password="aaaaaaaa";//连接sqlserver2000数据库密码 String sDBDriver="com.microsoft.jdbc.sqlserver.SQLServerDriver";//连接数据库的驱动字符串 String connStr="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=webexamine";//注册连接字符串 Connection con=null; Class.forName( sDBDriver);//注册数据库驱动 con = Driver Manager.getConnection(connStr ,user,password);//获取数据库连接 String sql="backup database xncsims to disk='d:\\xncback.dat'";//备份数据库,还原数据库和着类似,只是将这句变为还原的语句 st=con.createStatement();//创建发送对象 rs=st.executeQuery(sql);//这里就是把你的SQL语句发到数据库执行 }catch(SQLException e){ System.out.println(e.toString());} catch(Exception e){ System.out.println(e.toString());} 6.4部分效果预览图 主页 留言界面

21,887

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧