PHP编程基础与实例教程第二版练习题参考答案资料 下载本文

readerreader_no:表示借阅证号码max_book:表示该借阅证最多借几本书I:表示整型reader_idNOreader_noA11max_bookIreader_idRelationship_1borrowborrow_idborrow_timereturn_timedeadlineNODTDTDTborrow_time:表示借阅时间return_time:表示归还时间deadline:表示期限(截止时间)DT:表示datetime日期时间类型borrow_idRelationship_2bookbook_idNOisbnA50nameA100isbn:表示书的isbn号name:表示书的名字book_idRelationship_3categorycategory_idNOnameA100category_idname:表示书的种类名称 第9章答案:

选择题:

1.B,D(说明:用户输入未经过滤就直接送往了数据库,这非常危险。如果URL包含ID=0+OR+1这样的参数时,实际的查询为DELETE FROM MYTABLE WHERE ID = 0 OR 1,数据库将删除表中所有的记录。) 2.A 3.C

4.A(说明:mysql_fetch_field函数从结果集中取得列信息并作为对象返回) 5.C

填空题:

过滤特殊字符。 addslashes 问答题:

1.答案参见9.1.6 2.

创建printInfo.php文件,写入如下代码:

function printInfo($database,$tableName){ $host = 'localhost'; $userName = 'root'; $password = ''; mysql_connect($host,$userName,$password); mysql_select_db($database); mysql_query(\ //制作表格(边框宽度为1)

echo \ //制作表头(也就是表中拥有的字段) $sql = \ $result = mysql_query($sql); $fieldsNum = mysql_num_fields($result); echo \ for($i=0;$i<$fieldsNum;$i++){ echo \ } echo \ //导出10行记录 while($row = mysql_fetch_array($result)){ echo \ for($i=0;$i<$fieldsNum;$i++){ echo \ } echo \ } echo \}

printInfo('register','users'); ?>

第10章答案:

任务1答案:

create table message (

id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, title varchar(100), content varchar(225), category_id int, hits int )

任务2答案:

select a.id, a.title, a.hits, if(ifnull(b.id,false),count(*),0) as replay from message a left join comment b on a.id=b.id group by a.id

order by replay desc 任务3答案:

function categoryList() {

$result=mysql_query(\ or die(\

print(\ while($rowArray=mysql_fetch_array($result)) {

print(\

value='\ }

print(\}

第11章答案:

选择题: C B

B(说明:浏览器不允许来自某个域名的HTTP事务更改另一个域名下的cookie,否则这将造成严重的的安全问题。) D B

B,D(说明:B和D是最有可能出问题并应该深入调查的地方。由于浏览器访问其他网站都正常,所以不可能是浏览器程序出了问题。杀毒软件通常不会选择性的只阻止安全的cookie(不过有可能会阻止所有的cookie)。你首先应当检查浏览器是否被设置为阻止所有cookie,这是最有可能导致该问题的原因。同时,错误的时区设置也可能是根源——给cookie设置有效期时用得是GMT时间。可能会出现cookie在写入时就立刻过期,从而无法被脚本接收的情况。)

B(说明:session.gc_maxlifetime设置的是用户最后一次请求到session被回收之间的时间间隔。尽管数据文件并没有被真正删除,不过一旦session被回收,你将无法对此session进行访问。巧合的是,session.gc_maxlifetime的默认设置正好是1440秒,但这个数字是可以被系统管理员调整的。所以答案应该是B。) 问答题:

1.header函数和setcookie函数

2. 状态401代表未被授权,如果返回“找不到文件”的提示,则可用header(\3.答案参见教材内容. 4.Cookie的内容如下:

Set-Cookie:PHPSESSID= btek48cklarn1m73eg2qkcsu12; path = PATH;

domain= DOMAIN_NAME;

禁用Cookie后,Session还可以使用,请参考教材中的示例程序。 5.

设置Session的生存时间包括设置服务器端Session的生存时间和浏览器端的生存时间。 方法1:php.ini配置文件中有一组如下Session的配置选项,实现Session的设置。其中session.gc_maxlifetime = 1440:设置Session文件在服务器端的储存时间,如果超过这个时间,那么Session文件会自动删除。默认为1 440s(24min),表示1 440s无操作就会自动销毁该Session文件。session.cookie_lifetime = 0:表示浏览器一旦关闭Session ID立即失效(推荐使用)。

方法2:使用下面的程序设置 $savePath = \ $lifeTime = 小时 * 秒;

session_save_path($savePath);

session_set_cookie_params($lifeTime); session_start();

方法3:使用函数setcookie()或session_set_cookie_params($lifeTime)设置

6.解决HTTP无状态本质,可以从以下几个方面入手。

(1)利用form表单的隐藏域hidden,在表单数据提交时传递参数,这种方法需要和form表单一起使用。

(2)利用超链接通过URL查询字符串传递参数。

(3)使用header()函数重定向功能或JavaScript重定向功能,通过URL查询字符串传递参数。

(4)使用Cookie将浏览器用户的个人资料存放在浏览器端主机中,其他PHP程序通过读取浏览器端主机中的Cookie信息实现页面间的参数传递。

(5)使用Session将浏览器用户的个人资料存放于WEB服务器中,其他PHP程序通过读取服务器端主机中的Session信息实现页面间的参数传递。 7.

通过了解 SESSION 的工作原理,可以发现,在默认情况下,各个服务器会各自分别对同一个客户端产生SESSION ID,如对于同一个用户浏览器,A 服务器产生的 SESSION ID 是 30de1e9de3192ba6ce2992d27a1b6a0a,而B服务器生成的则是c72665af28a8b14c0fe11afe3b59b51b。另外,PHP 的 SESSION 数据都是分别保存在本服务器的文件系统中。确定了问题所在之后,就可以着手进行解决了。想要共享 SESSION 数据,那就必须实现两个目标:

一个是各个服务器对同一个客户端产生的 SESSION ID 必须相同,并且可通过同一个 COOKIE 进行传递,也就是说各个服务器必须可以读取同一个名为 PHPSESSID 的 COOKIE;

另一个是 SESSION 数据的存储方式/位置必须保证各个服务器都能够访问到。 简单地说就是多服务器共享客户端的 SESSION ID,同时还必须共享服务器端的 SESSION数据。 第一个目标的实现其实很简单,只需要对 COOKIE 的域(domain)进行特殊地设置(将域名设置为父子关系)即可,默认情况下,COOKIE 的域是当前服务器的域名/IP 地址,而域不同的话,各个服务器所设置的 COOKIE 是不能相互访问的。cookie可以跨越子域名。比如我们在xiaofeicn.com下面注册个个cookie,那么可以在bbs.xiaofeicn.com上读取到该cookie。 第二个目标的实现方法是所有的WEB服务器的SESSION存放在一个文件服务器(或者数据库服务器)上。例如:采用一台Mysql服务器做共享服务器,把所有的session的数据保存到Mysql服务器上,所有Web服务器都来这台Mysql服务器来获取Session数据。

三、编程题

1.使用Cookie技术编写程序显示上次登录时间。

if(isset($_COOKIE['last_visit'])){

echo \你上次登陆时间是:\

setCookie(\}else{