版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、由于時(shí)間倉(cāng)促,答案中難免存在錯(cuò)誤,不妥之處懇請(qǐng)讀者批評(píng)指正!第1章答案:1.答案見(jiàn)教材1.2.3,1.2.4,1.2.5,1.2.62.答案見(jiàn)教材1.2.4,1.2.53.PHP,JSP,.NET,ASP等4.答案如下:打印明天的時(shí)間使用下面的程序:<?phpdate_default_timezone_set('PRC'); /設(shè)置中國(guó)時(shí)區(qū) echo date("Y/m/d H:i:s", time()+24*3600); /打印明天的時(shí)間 ?>date ()函數(shù)中:d: 幾日,兩位數(shù)字,若不足則補(bǔ)零;從"01"至"
2、31" D: 星期幾,3個(gè)英文字母,如:"Fri" F: 月份,英文全名,如:"January" h: 12小時(shí)制的小時(shí),從"01"至"12" H: 24小時(shí)制的小時(shí),從"00"至"23" m: 月份,兩位數(shù)字,從"01"至"12" M: 月份,3個(gè)英文字母;如:"Jan" s: 秒;從"00"至"59" w: 數(shù)字型的星期幾,從"0(星期天)"至
3、"6(星期六)" Y: 年,四位數(shù)字 y: 年,兩位數(shù)字 z: 一年中的第幾天;從"1"至"366"time() 函數(shù)返回當(dāng)前時(shí)間的 Unix 時(shí)間戳,即:自從 Unix 紀(jì)元(格林威治時(shí)間 1970 年 1 月 1 日 00:00:00)到當(dāng)前時(shí)間的秒數(shù)。5. Apache服務(wù)器的配置文件名是httpd.conf文件,默認(rèn)放在C:wampbinapacheApacheconf目錄下。MySQL服務(wù)器的配置文件名是my.ini,默認(rèn)放在C:wampbinmysqlmysql目錄下,PHP預(yù)處理器配置文件名是php.ini,默認(rèn)放在C:
4、wampbinapacheApachebin目錄下。6. 答案見(jiàn)教材1.3.5第2章答案:1. 答案見(jiàn)教材2.1.12. 答案見(jiàn)教材2.1.23. 答案見(jiàn)教材2.2.2布爾型主要用于邏輯判斷,整型和浮點(diǎn)型主要用于算術(shù)運(yùn)算,字符串主要用于文字性描述,數(shù)組實(shí)際上是用于容納若干變量的容器。當(dāng)使用面向?qū)ο缶幊趟枷霑r(shí),需要使用對(duì)象描述事物(屬性及方法)。4. echo與print共同點(diǎn):它們都不是真正的函數(shù),是一種語(yǔ)法結(jié)構(gòu),因?yàn)檎Z(yǔ)句沒(méi)有返回值,函數(shù)可以有返回值(即便沒(méi)有用)(也有說(shuō)print是函數(shù),echo不是)。echo和print 后面都可不用加(), 如: echo 'ok' pr
5、int 'ok'運(yùn)行速度echo稍快一些,因?yàn)閑cho并不返回值,print返回一個(gè)值int(1)。echo與print區(qū)別:一般用echo,除非三元運(yùn)算時(shí)。$a=5; ($a=5) ? print '5': print 0;echo 后不要跟()。print只能有一個(gè)參數(shù),所以不能不能用",",而echo可以。echo - 輸出一個(gè)或者多個(gè)字符串print_r是遞歸打印,主要用于打印復(fù)雜類(lèi)型變量的值(如 數(shù)組,對(duì)象) 5. 答案見(jiàn)教材2.36. 答案見(jiàn)教材圖2.37.<?phpclass Test function get_test(
6、$num) $num=md5(md5($num); return $num; $test = new Test();$password = $test->get_test("123");echo $password;/輸出字符串“123”兩次md5加密結(jié)果:d9b1d7db4cd6e70935368a1efb10e377?>第3章答案:選擇題:1:C2:B3:A4:D(說(shuō)明:PHP變量以一個(gè)美元符號(hào)為開(kāi)頭,后面跟上任意數(shù)量的數(shù)字、字母和下劃線。 $“MyVar”是一個(gè)合法的變量名,它使用的是較松散的命名約定。&$something是對(duì)$something
7、的引用。然而,變量名不能以數(shù)字為開(kāi)頭,$10_somethings是非法的,因此答案是D。)5:D(說(shuō)明:這又是一個(gè)考驗(yàn)debug能力的題。注意到了嗎,在腳本的末尾,echo語(yǔ)句中的?$output變量拼錯(cuò)了!腳本不會(huì)輸出任何東西,答案是D),6:D(說(shuō)明:%運(yùn)算符表示取模,它返回兩個(gè)操作數(shù)相除的余數(shù)。<< 是左移運(yùn)算符,相當(dāng)于乘以2的N次方。最后的答案乘以了一個(gè)浮點(diǎn)數(shù),改變了它的數(shù)據(jù)類(lèi)型。但是,由于小數(shù)點(diǎn)后是零,因此輸出的結(jié)果不包含小數(shù)部分。答案是 256)7:B(說(shuō)明:全等運(yùn)算符比較兩個(gè)操作數(shù)的數(shù)據(jù)類(lèi)型和值,兩者中有一個(gè)不同,都會(huì)返回False。因此答案是B)8:AC(說(shuō)明:A
8、選項(xiàng)中,pow函數(shù)計(jì)算2的平方,答案是4。C選項(xiàng)中,左移運(yùn)算符將$a的值左移兩位,相當(dāng)于乘以4)9:D10:B填空題:邏輯異或(xor)運(yùn)算符02程序閱讀題相等相等不相等truetruetruetruetruefalsetruefalseaaaaaa41hotdogokis zero4問(wèn)答題:1.isset($str)用于測(cè)試變量是否設(shè)置(或者存在),empty($str)用于測(cè)試變量是否為空。檢測(cè)變量是否為空使用is_null()和empty()函數(shù)。is_null()和empty()函數(shù)的區(qū)別請(qǐng)參考下面的程序:<?php $a = 0;var_dump(empty($a); /輸出:
9、bool(true) echo "<br/>"var_dump(is_null($a); /輸出:bool(false)?>2. PHP垃圾回收機(jī)制是基于引用計(jì)數(shù)機(jī)制的垃圾回收,當(dāng)一個(gè)變量的引用計(jì)數(shù)變?yōu)?時(shí), PHP將在內(nèi)存中銷(xiāo)毀這個(gè)變量,此時(shí)啟動(dòng)垃圾回收機(jī)制。當(dāng)一個(gè)變量被初始化或者賦值給另一個(gè)變量時(shí)引用計(jì)數(shù)會(huì)加1,當(dāng)變量或者被賦值的變量被銷(xiāo)毀或者被偵測(cè)到無(wú)用時(shí)引用計(jì)數(shù)會(huì)減一,當(dāng)垃圾收集的進(jìn)程運(yùn)行時(shí)會(huì)釋放掉引用計(jì)數(shù)為0的那些變量會(huì)被從內(nèi)存中釋放(垃圾回收期間程序會(huì)被中斷)。當(dāng)腳本執(zhí)行完成時(shí)所有資源都會(huì)被釋放。3.按值傳遞:函數(shù)范圍內(nèi)對(duì)值的任何改變?cè)诤瘮?shù)外部
10、都會(huì)被忽略按引用傳遞:函數(shù)范圍內(nèi)對(duì)值的任何改變?cè)诤瘮?shù)外部也能反映出這些修改區(qū)別:按值傳遞時(shí),php必須復(fù)制值。特別是對(duì)于大型的字符串和對(duì)象來(lái)說(shuō),這將會(huì)是一個(gè)代價(jià)很大的操作。按引用傳遞則不需要復(fù)制值,對(duì)于性能提高很有好處。傳值只是把某一個(gè)變量的值傳給了另一個(gè)變量,而引用則說(shuō)明兩者指向了同一個(gè)地方。4. <?php if("0"=0)echo "="/輸出“=”if("0"=0)echo "="/沒(méi)有任何輸出?>5.<?php $var1 = 1;$var2 = 7;$var3 = 8;$max=$v
11、ar1>$var2?$var1:$var2;$max=$max>$var3?$max:$var3;echo $max;?>第4章答案:選擇題:1. D(說(shuō)明:根據(jù)條件式的邏輯,要想得到Hello, World!字符串,必須要在第一個(gè)if結(jié)構(gòu)中滿足else的條件。因此$a必須為False,然后$b也必須為False。最內(nèi)層的條件語(yǔ)句的實(shí)現(xiàn)要求先前的兩個(gè)變量($a和$b)是False,而$c必須是True)2.C3.A4.E編程題:<?phpswitch($a) case 'a':somefunction();break;case 'b':a
12、notherfunction();break;case 'c':dosomething();break;default:donothing();?>第5章答案:選擇題:1.D2.B3.B4.A(說(shuō)明:注意,$myarray的鍵值并沒(méi)有打上引號(hào)。所以,正在訪問(wèn)的鍵不是myvalue字符串,而是常量myvalue的值。最終訪問(wèn)的是$myarray10,值是Dog,答案是A。)5.A(說(shuō)明:5.通常情況下,foreach 語(yǔ)句是遍歷數(shù)組的首選。但是,由于foreach語(yǔ)句是在數(shù)組的副本上進(jìn)行操作,而我們需要給數(shù)組中每個(gè)元素重新賦值,所以在這里foreach就不適用了。盡管也可以
13、用while循環(huán)和dowhile循環(huán),但由于數(shù)組是順序索引的,最合適的語(yǔ)句還是for語(yǔ)句。因此答案是A。)6.C7.E8.B(說(shuō)明:foreach操作的是$array的副本,因此對(duì)原來(lái)的值沒(méi)有影響)9.B(說(shuō)明:只有asort函數(shù)能在保留原有索引關(guān)系的前提下進(jìn)行排序。答案是B)10.A11.B,D(說(shuō)明:array_flip()只能把數(shù)組中每個(gè)元素的鍵和值進(jìn)行交換。rsort()和array_reverse()則能把題目中的數(shù)組逆向排序?yàn)樾枰男问剑╠,c,b,a)。答案是B和D。)12.B13.D14.A15.A16.A問(wèn)答題:1. sort(), asort()以及ksort()三個(gè)函數(shù)之
14、間有什么區(qū)別?在什么情況下會(huì)使用他們?答案參見(jiàn)教材5.4.72.<?php $arr = array('james', 'tom', 'symfony');echo join(',',$arr);/方法1echo "<br/>"echo implode(',',$arr);/方法2?>編程題:第一題:說(shuō)明:當(dāng)$ip是合法IP地址時(shí),程序運(yùn)行結(jié)果是1。當(dāng)$ip不是合法IP地址時(shí),程序運(yùn)行結(jié)果是空字符串。<?php$ip = "11&
15、quot;$flag = false;/將標(biāo)記flag初始化為false$ips = explode(".",$ip);/使用“.”分割字符串,將分割后的字符串放到數(shù)組中$count = count($ips);/獲取數(shù)組的長(zhǎng)度if($count!=4)/如果數(shù)組的長(zhǎng)度不是4,說(shuō)明是非法IP地址,退出程序exit($flag);for($i =0 ; $i < $count ; $i+ )/IP地址的每一位必須是數(shù)字、并且在0-255區(qū)間取值if(is_numeric($ips$i) && $ips$i>=0 && $ips$i&
16、lt;=255)$flag = true;else/如果某一位不是數(shù)字,或者沒(méi)有在在0-255區(qū)間取值,說(shuō)明是非法IP地址,退出for循環(huán)$flag =false;break;exit($flag);?>第二題:可用冒泡法進(jìn)行排序。冒泡排序的基本概念是:依次比較相鄰的兩個(gè)數(shù),將小數(shù)放在前面,大數(shù)放在后面。即首先比較第1個(gè)和第2個(gè)數(shù),將小數(shù)放前,大數(shù)放后。然后比較第2個(gè)數(shù)和第3個(gè)數(shù),將小數(shù)放前,大數(shù)放后, 如此繼續(xù),直至比較最后兩個(gè)數(shù),將小數(shù)放前,大數(shù)放后,此時(shí)第一趟結(jié)束,在最后的數(shù)必是所有數(shù)中的最大數(shù)。重復(fù)以上過(guò)程,仍從第一對(duì)數(shù)開(kāi)始比較(因?yàn)榭赡?由于第2個(gè)數(shù)和第3個(gè)數(shù)的交換,使得第1個(gè)
17、數(shù)不再小于第2個(gè)數(shù)),將小數(shù)放前,大數(shù)放后,一直比較到最大數(shù)前的一對(duì)相鄰數(shù),將小數(shù)放前,大數(shù)放后,第二趟 結(jié)束,在倒數(shù)第二個(gè)數(shù)中得到一個(gè)新的最大數(shù)。如此下去,直至最終完成排序。<?php $str = array(3,6,1,5,9,0,4,6,11); for ($i=0;$i<count($str);$i+) for ($j=count($str)-2;$j>=$i;$j-) if($str$j+1<$str$j) $tmp = $str$j+1; $str$j+1=$str$j; $str$j=$tmp; print_r($str); ?>第三題:說(shuō)明:這里
18、使用了字符串處理函數(shù)ucwords()。<?php $string = "make_by_id"$str = ""$array = explode('_', $string);for($k=0;$k<count($array);$k+)$str = $str.ucwords($array$k);echo $str;?>第6章答案:選擇題:AB,DC問(wèn)答題:1. 答:get 是發(fā)送請(qǐng)求HTTP協(xié)議通過(guò)url參數(shù)傳遞進(jìn)行接收,而post是實(shí)體數(shù)據(jù),可以通過(guò)表單提交大量信息。區(qū)別如下:a、 Get 方法通過(guò) URL 請(qǐng)求來(lái)傳遞
19、用戶(hù)的數(shù)據(jù),將表單內(nèi)各字段名稱(chēng)與其內(nèi)容,以成對(duì)的字符串連接,置于 action 屬性所指程序的 url 后,如 在 url 上,就像用戶(hù)點(diǎn)擊一個(gè)鏈接一樣;Post 方法通過(guò) HTTP post 機(jī)制,將表單內(nèi)各字段名稱(chēng)與其內(nèi)容放置在 HTML 表頭 (header)內(nèi)一起傳送給服務(wù)器端交由 action 屬性能所指的程序處理,該程序會(huì)通過(guò)標(biāo)準(zhǔn)輸入(stdin)方式,將表單的數(shù)據(jù)讀出并加以處理b、 Get 方 式需要使用 $_GET 來(lái)取得變量的值;而 Post 方式通過(guò) $_POST 來(lái)訪問(wèn)提交的內(nèi)容c、 Get 方式傳輸?shù)臄?shù)據(jù)量非常小,一般限制在 2 KB 左右,但是執(zhí)行效率卻比 Post
20、方法好;而 Post 方式傳遞的數(shù)據(jù)量相對(duì)較大,它是等待 服務(wù)器來(lái)讀取數(shù)據(jù),不過(guò)也有字節(jié)限制,這是為了避免對(duì)服務(wù)器用大量數(shù)據(jù)進(jìn)行惡意攻擊??稍趐hp.in中 對(duì) post_max_size 進(jìn)行設(shè)置。建議:除 非你肯定你提交的數(shù)據(jù)可以一次性提交,否則請(qǐng)盡量用 Post 方法d、 Get 方式提交數(shù)據(jù),會(huì)帶來(lái)安全問(wèn)題,比如一個(gè)登陸頁(yè)面,通過(guò) Get 方式提交數(shù)據(jù)時(shí),用戶(hù)名和密碼將出現(xiàn)在 URL 上,如果頁(yè)面可以被緩存或者其 他人可以訪問(wèn)客戶(hù)這臺(tái)機(jī)器,就可以從歷史記錄獲得該用戶(hù)的帳號(hào)和密碼,所以表單提交建議使用 Post 方法;Post 方法提交的表單頁(yè)面常見(jiàn)的問(wèn)題 是,該頁(yè)面如果刷新的時(shí)候,會(huì)彈
21、出一個(gè)對(duì)話框。2.答案參見(jiàn)教材6.5.23.答案參見(jiàn)教材6.5.44.以上傳文件只允許為”jpg”圖片為例,只需要得到文件名的擴(kuò)展名必須是”jpg”或者”JPG”,才可進(jìn)行上傳。獲得文件名擴(kuò)展名的方法如下:$extend = strtolower(end(explode("." , $myPictureName); 說(shuō)明:這里用到了字符串操作函數(shù)explode,數(shù)組指針函數(shù)end,和字符串操作函數(shù)strtolower然后再使用if判斷語(yǔ)句if($extend = “jpg”),條件成立時(shí),再進(jìn)行上傳。5.POST傳輸數(shù)據(jù)容量由php.in中post_max_size的值設(shè)置
22、。GET傳輸數(shù)據(jù)容量由瀏覽器決定。6.<?php $clientIP = $_SERVER'REMOTE_ADDR' $serverIP = $_SERVER'SERVER_ADDR' echo $clientIP; echo "<br/>" echo $serverIP; ?> 三、編程題1編寫(xiě)支持換皮膚的PHP程序。程序說(shuō)明,此題關(guān)鍵在于:Ø 如何設(shè)置頁(yè)面背景圖片Ø 如何使用相對(duì)路徑訪問(wèn)圖片資源Ø 如何使用條件運(yùn)算符初始化下拉選擇框的選中狀態(tài)1.準(zhǔn)備JPG皮膚圖片,分別將其命名為1.j
23、pg、2.jpg、3.jpg、4.jpg。2.創(chuàng)建目錄images,將所有皮膚圖片文件置于該目錄下。3.創(chuàng)建skin.php文件,寫(xiě)入如下代碼:<?phpif(isset($_GET"source")$source = $_GET"source"else$source = "images/1.jpg"?><body background="<?php echo $source ?>"><form><select name="source"&g
24、t;<option value="images/1.jpg" <?php echo $source="images/1.jpg" ? "selected" : ""?>>皮膚1</option><option value="images/2.jpg" <?php echo $source="images/2.jpg" ? "selected" : ""?>>皮膚2</op
25、tion><option value="images/3.jpg" <?php echo $source="images/3.jpg" ? "selected" : ""?>>皮膚3</option><option value="images/4.jpg" <?php echo $source="images/4.jpg" ? "selected" : ""?>>皮膚4&
26、lt;/option></select><input type="submit" value="修改皮膚"></form>2編寫(xiě)支持多文件上傳的FORM表單程序以及PHP程序。程序說(shuō)明:此題關(guān)鍵在于文件上傳框不確定,可以使用DOM+JavaScript,產(chǎn)生不確定個(gè)數(shù)的于文件上傳框。步驟如下:1.創(chuàng)建目錄:uploads,所有上傳文件置于該目錄下。2.創(chuàng)建upload.html文件,寫(xiě)入如下代碼:<form action="upload.php" method="post&qu
27、ot; name="form" enctype="multipart/form-data"><!-每個(gè)文件上傳框限制上傳文件的大小為10K字節(jié)-><input type="hidden" name="MAX_FILE_SIZE" value="10240"><div id="upload"></div><input type="button" value="添加附件" oncl
28、ick="createUploader()"><br><input type="submit" value="上傳"></form><script>function createUploader()var div= document.getElementById("upload");var uploader = document.createElement("input");uploader.type = "file"up
29、 = "myFile"div.appendChild(uploader);var br = document.createElement("br");div.appendChild(br);</script>3.創(chuàng)建upload.php文件,寫(xiě)入如下代碼:<?phpif(empty($_POST)exit("您提交的表單數(shù)據(jù)超過(guò)post_max_size的配置!<br/>");$count = count($_FILES'myFile''name');
30、for($i=0;$i<$count;$i+)$myFile = $_FILES'myFile'$error = $myFile"error"$i;switch ($error)case 0:$fileName = $myFile'name'$i;echo "您上傳的文件有:".$fileName. "<br/>"$fileTemp = $myFile'tmp_name'$i;$destination = "uploads/".$fileName;m
31、ove_uploaded_file($fileTemp,$destination);break;case 1:echo "上傳的某些文件超過(guò)了php.ini 中upload_max_filesize選項(xiàng)限制的值!<br/>"break;case 2:echo "上傳的某些文件超過(guò)了FORM表單MAX_FILE_SIZE選項(xiàng)指定的值!<br/>"break;case 3:echo "某些文件只有部分被上傳!<br/>"break;case 4:echo "沒(méi)有選擇上傳文件!<br/&g
32、t;"break;?>第7章答案:選擇題:1.A2.E3.C4.A5.B6.E(說(shuō)明:在較新版本的PHP中,require(或requier_once())和include()(或include_once()只有一個(gè)區(qū)別如果包含的文件不存在,前者將產(chǎn)生一個(gè)致命錯(cuò)誤,同時(shí)終止腳本的執(zhí)行;而后者只會(huì)產(chǎn)生一個(gè)警告。因此答案E正確)7.C(說(shuō)明:當(dāng)參數(shù)被聲明為通過(guò)引用傳遞時(shí),你不能給它賦默認(rèn)值,此時(shí)解釋器期望獲得一個(gè)能在函數(shù)內(nèi)部進(jìn)行修改的變量。)8.A(說(shuō)明:一段腳本并不會(huì)在執(zhí)行到文件末尾時(shí)終止,所以當(dāng)前文件才能被其他腳本包含。至于PHP和Apache崩潰,這兩個(gè)說(shuō)法就太惡搞了)9.程
33、序閱讀題:1. 5012. 5523. 12問(wèn)答題:1.按值傳遞:函數(shù)范圍內(nèi)對(duì)值的任何改變?cè)诤瘮?shù)外部都會(huì)被忽略 按引用傳遞:函數(shù)范圍內(nèi)對(duì)值的任何改變?cè)诤瘮?shù)外部也能反映出這些修改 優(yōu)缺點(diǎn):按值傳遞時(shí),php必須復(fù)制值。特別是對(duì)于大型的字符串和對(duì)象來(lái)說(shuō),這將會(huì)是一個(gè)代價(jià)很大的操作。按引用傳遞則不需要復(fù)制值,對(duì)于性能提高很有好處。2.通過(guò)修改php.ini配置文件的選項(xiàng)allow_call_time_pass_reference(默認(rèn)值為Off)決定是否開(kāi)啟函數(shù)調(diào)用時(shí)強(qiáng)制參數(shù)按照引用傳遞。編程題:1.<?php function($var1,$var2,$var3)$max=$var1>
34、$var2?$var1:$var2;$max=$max>$var3?$max:$var3;return $max;?>2.答案請(qǐng)參考第6章編程題的答案。3.答案請(qǐng)參考第5章編程題的答案。<?php function BubbleSort($str) for ($i=0;$i<count($str);$i+) for ($j=count($str)-2;$j>=$i;$j-) if($str$j+1<$str$j) $tmp = $str$j+1; $str$j+1=$str$j; $str$j=$tmp; return $str; $str = array(
35、3,6,1,5,9,0,4,6,11); print_r(BubbleSort($str); ?>4.答案請(qǐng)參考第5章編程題的答案。<?php function convString($string)$array = explode('_', $string);$str = ""for($k=0;$k<count($array);$k+)$str = $str.ucwords($array$k);return $str;echo convString("make_by_id");?>5答案請(qǐng)參考第4章編程題的答案。
36、第8章答案:1.E2.B3.C4.C5.E6.C7B,C(說(shuō)明:在標(biāo)準(zhǔn)SQL中,如果出現(xiàn)GROUP BY,結(jié)果集中所有的字段都必須是聚集值,或者是GROUP BY結(jié)構(gòu)本身的一部分。某些DBMS比如MySQL允許你打破這種規(guī)則,但它不按標(biāo)準(zhǔn)的方式執(zhí)行,并且在其他數(shù)據(jù)庫(kù)系統(tǒng)上無(wú)效。)8C(說(shuō)明:本題描述了一種在使用join時(shí)常犯的概念性錯(cuò)誤。很多人可能覺(jué)得這個(gè)查詢(xún)將返回兩個(gè)表中非共有記錄。但實(shí)際上數(shù)據(jù)庫(kù)卻認(rèn)為是“讀出所有ID 非共有的記錄”。DBMS將讀取讀取左邊表中所有的記錄加上右邊表中ID非共有的記錄。因此,該查詢(xún)將讀取TABLE1中的每條記錄乘以TABLE2中的每條記錄再減去兩表中相同的記錄
37、條數(shù)。)填空題:1.事務(wù)2.where3.insert4.auto_increment5. 左連接表A和表B意味著取表A的全部記錄按指定的連接條件與表B中滿足連接條件的記錄進(jìn)行連接,若表B中沒(méi)有滿足連接條件的記錄,則表A中相應(yīng)字段填入NULL。問(wèn)答題:1.答案參見(jiàn)圖8-21(說(shuō)明,父子關(guān)系是相對(duì)的)2.答案參見(jiàn)8.1.23.滿足唯一性約束的字段可以為NULL。4.MEMORY,MyISAM,InnoDB5. 答案參見(jiàn)8.3.36. Varchar是變長(zhǎng),節(jié)省存儲(chǔ)空間,char是固定長(zhǎng)度。查找效率要char型快,因?yàn)関archar是非定長(zhǎng),必須先查找長(zhǎng)度,然后進(jìn)行數(shù)據(jù)的提取, 比char定長(zhǎng)類(lèi)型
38、多了一個(gè)步驟,所以效率低一些。7.忽略8.說(shuō)明:這里使用了MySQL的now()函數(shù)和DATE_FORMAT()函數(shù)。INSERT INTO User('Name','Tel','Content','Date') VALUES('小王','#39;,'高中','2007-05-06')UPDATE User SET Date=DATE_FORMAT(NOW(),'%Y-%m-%d') WHERE Name='張三'DEL
39、ETE FROM User WHERE Name='李四'9.SELECT username,count(*) as num FROM members group by username order by count(*) desc limit 10數(shù)據(jù)庫(kù)設(shè)計(jì)題:該題只需設(shè)計(jì)ER圖,ER圖如下:第9章答案:選擇題:1.B,D(說(shuō)明:用戶(hù)輸入未經(jīng)過(guò)濾就直接送往了數(shù)據(jù)庫(kù),這非常危險(xiǎn)。如果URL包含ID=0+OR+1這樣的參數(shù)時(shí),實(shí)際的查詢(xún)?yōu)镈ELETE FROM MYTABLE WHERE ID = 0 OR 1,數(shù)據(jù)庫(kù)將刪除表中所有的記錄。)2.A3.C4.A(說(shuō)明:mysql_
40、fetch_field函數(shù)從結(jié)果集中取得列信息并作為對(duì)象返回)5.C填空題:過(guò)濾特殊字符。addslashes問(wèn)答題:1.答案參見(jiàn)9.1.62. 創(chuàng)建printInfo.php文件,寫(xiě)入如下代碼:<?phpfunction printInfo($database,$tableName)$host = 'localhost'$userName = 'root'$password = ''mysql_connect($host,$userName,$password);mysql_select_db($database);mysql_query
41、("set names 'gbk'");/制作表格(邊框?qū)挾葹?)echo "<table border=1><tr>"/制作表頭(也就是表中擁有的字段)$sql = "select * from $tableName limit 10"$result = mysql_query($sql);$fieldsNum = mysql_num_fields($result);echo "<tr>"for($i=0;$i<$fieldsNum;$i+)echo &q
42、uot;<td>".mysql_field_name($result,$i)."</td>"echo "</tr>"/導(dǎo)出10行記錄while($row = mysql_fetch_array($result)echo "<tr>"for($i=0;$i<$fieldsNum;$i+)echo "<td>".$row$i."</td>"echo "</tr>" echo &qu
43、ot;</table>"printInfo('register','users');?>第10章答案:任務(wù)1答案:create table message( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, title varchar(100), content varchar(225), category_id int, hits int )任務(wù)2答案:select a.id, a.title, a.hits, if(ifnull(b.id,false),count(*),0) as repla
44、y from message a left join comment b on a.id=b.idgroup by a.idorder by replay desc任務(wù)3答案:function categoryList() $result=mysql_query("select category_id,categroy_name from category") or die("Invalid query: " . mysql_error(); print("<select name='category' value=
45、9;'>"n"); while($rowArray=mysql_fetch_array($result) print("<option value='".$rowArray'category_id'."'>".$rowArray'categroy_name'."</option>"n"); print("</select>");第11章答案:選擇題:CBB(說(shuō)明:瀏覽器不允許來(lái)自某個(gè)域名的
46、HTTP事務(wù)更改另一個(gè)域名下的cookie,否則這將造成嚴(yán)重的的安全問(wèn)題。)DBB,D(說(shuō)明:B和D是最有可能出問(wèn)題并應(yīng)該深入調(diào)查的地方。由于瀏覽器訪問(wèn)其他網(wǎng)站都正常,所以不可能是瀏覽器程序出了問(wèn)題。殺毒軟件通常不會(huì)選擇性的只阻止安全的cookie(不過(guò)有可能會(huì)阻止所有的cookie)。你首先應(yīng)當(dāng)檢查瀏覽器是否被設(shè)置為阻止所有cookie,這是最有可能導(dǎo)致該問(wèn)題的原因。同時(shí),錯(cuò)誤的時(shí)區(qū)設(shè)置也可能是根源給cookie設(shè)置有效期時(shí)用得是GMT時(shí)間??赡軙?huì)出現(xiàn)cookie在寫(xiě)入時(shí)就立刻過(guò)期,從而無(wú)法被腳本接收的情況。)B(說(shuō)明:session.gc_maxlifetime設(shè)置的是用戶(hù)最后一次請(qǐng)求到s
47、ession被回收之間的時(shí)間間隔。盡管數(shù)據(jù)文件并沒(méi)有被真正刪除,不過(guò)一旦session被回收,你將無(wú)法對(duì)此session進(jìn)行訪問(wèn)。巧合的是,session.gc_maxlifetime的默認(rèn)設(shè)置正好是1440秒,但這個(gè)數(shù)字是可以被系統(tǒng)管理員調(diào)整的。所以答案應(yīng)該是B。)問(wèn)答題:1.header函數(shù)和setcookie函數(shù)2. 狀態(tài)401代表未被授權(quán),如果返回“找不到文件”的提示,則可用header("Location:www.xxx.php");3.答案參見(jiàn)教材內(nèi)容.4.Cookie的內(nèi)容如下:Set-Cookie:PHPSESSID= btek48cklarn1m73eg2
48、qkcsu12;path = PATH;domain= DOMAIN_NAME;禁用Cookie后,Session還可以使用,請(qǐng)參考教材中的示例程序。5. 設(shè)置Session的生存時(shí)間包括設(shè)置服務(wù)器端Session的生存時(shí)間和瀏覽器端的生存時(shí)間。方法1:php.ini配置文件中有一組如下Session的配置選項(xiàng),實(shí)現(xiàn)Session的設(shè)置。其中session.gc_maxlifetime = 1440:設(shè)置Session文件在服務(wù)器端的儲(chǔ)存時(shí)間,如果超過(guò)這個(gè)時(shí)間,那么Session文件會(huì)自動(dòng)刪除。默認(rèn)為1 440s(24min),表示1 440s無(wú)操作就會(huì)自動(dòng)銷(xiāo)毀該Sessi
49、on文件。session.cookie_lifetime = 0:表示瀏覽器一旦關(guān)閉Session ID立即失效(推薦使用)。方法2:使用下面的程序設(shè)置$savePath = "./session_save_dir/" $lifeTime = 小時(shí) * 秒; session_save_path($savePath); session_set_cookie_params($lifeTime); session_start();方法3:使用函數(shù)setcookie()或session_set_cookie_params($lifeTime)設(shè)置6.解決HTTP無(wú)狀態(tài)本質(zhì),可以從以
50、下幾個(gè)方面入手。(1)利用form表單的隱藏域hidden,在表單數(shù)據(jù)提交時(shí)傳遞參數(shù),這種方法需要和form表單一起使用。(2)利用超鏈接通過(guò)URL查詢(xún)字符串傳遞參數(shù)。(3)使用header()函數(shù)重定向功能或JavaScript重定向功能,通過(guò)URL查詢(xún)字符串傳遞參數(shù)。(4)使用Cookie將瀏覽器用戶(hù)的個(gè)人資料存放在瀏覽器端主機(jī)中,其他PHP程序通過(guò)讀取瀏覽器端主機(jī)中的Cookie信息實(shí)現(xiàn)頁(yè)面間的參數(shù)傳遞。(5)使用Session將瀏覽器用戶(hù)的個(gè)人資料存放于WEB服務(wù)器中,其他PHP程序通過(guò)讀取服務(wù)器端主機(jī)中的Session信息實(shí)現(xiàn)頁(yè)面間的參數(shù)傳遞。7.通過(guò)了解 SESSION 的工作原理
51、,可以發(fā)現(xiàn),在默認(rèn)情況下,各個(gè)服務(wù)器會(huì)各自分別對(duì)同一個(gè)客戶(hù)端產(chǎn)生SESSION ID,如對(duì)于同一個(gè)用戶(hù)瀏覽器,A 服務(wù)器產(chǎn)生的 SESSION ID 是 30de1e9de3192ba6ce2992d27a1b6a0a,而B(niǎo)服務(wù)器生成的則是c72665af28a8b14c0fe11afe3b59b51b。另外,PHP 的 SESSION 數(shù)據(jù)都是分別保存在本服務(wù)器的文件系統(tǒng)中。確定了問(wèn)題所在之后,就可以著手進(jìn)行解決了。想要共享 SESSION 數(shù)據(jù),那就必須實(shí)現(xiàn)兩個(gè)目標(biāo):一個(gè)是各個(gè)服務(wù)器對(duì)同一個(gè)客戶(hù)端產(chǎn)生的 SESSION ID 必須相同,并且可通過(guò)同一個(gè) COOKIE 進(jìn)行傳遞,也就是說(shuō)各個(gè)
52、服務(wù)器必須可以讀取同一個(gè)名為 PHPSESSID 的 COOKIE;另一個(gè)是 SESSION 數(shù)據(jù)的存儲(chǔ)方式/位置必須保證各個(gè)服務(wù)器都能夠訪問(wèn)到。 簡(jiǎn)單地說(shuō)就是多服務(wù)器共享客戶(hù)端的 SESSION ID,同時(shí)還必須共享服務(wù)器端的 SESSION數(shù)據(jù)。第一個(gè)目標(biāo)的實(shí)現(xiàn)其實(shí)很簡(jiǎn)單,只需要對(duì) COOKIE 的域(domain)進(jìn)行特殊地設(shè)置(將域名設(shè)置為父子關(guān)系)即可,默認(rèn)情況下,COOKIE 的域是當(dāng)前服務(wù)器的域名/IP 地址,而域不同的話,各個(gè)服務(wù)器所設(shè)置的 COOKIE 是不能相互訪問(wèn)的。cookie可以跨越子域名。比如我們?cè)谙旅孀?cè)個(gè)個(gè)cookie,那么可以在上讀取到該cookie。第二個(gè)目
53、標(biāo)的實(shí)現(xiàn)方法是所有的WEB服務(wù)器的SESSION存放在一個(gè)文件服務(wù)器(或者數(shù)據(jù)庫(kù)服務(wù)器)上。例如:采用一臺(tái)Mysql服務(wù)器做共享服務(wù)器,把所有的session的數(shù)據(jù)保存到Mysql服務(wù)器上,所有Web服務(wù)器都來(lái)這臺(tái)Mysql服務(wù)器來(lái)獲取Session數(shù)據(jù)。三、編程題1.使用Cookie技術(shù)編寫(xiě)程序顯示上次登錄時(shí)間。<?phpif(isset($_COOKIE'last_visit')echo "你上次登陸時(shí)間是:".$_COOKIE'last_visit'setCookie("last_visit",date(&qu
54、ot;Y-m-d H:i:s"),time()+3600);elseecho "你是第一次登陸!"setCookie("last_visit",date("Y-m-d H:i:s"),time()+3600);?>2編寫(xiě)支持換皮膚的PHP程序,并將皮膚保存在Cookie中。程序說(shuō)明,此題關(guān)鍵在于:Ø 如果GET請(qǐng)求以及Cookie里面都沒(méi)有設(shè)置皮膚,則使用默認(rèn)皮膚Ø 如果Cookie里面有皮膚,則使用Cookie里的皮膚Ø 如果GET請(qǐng)求里面有皮膚,則使用GET請(qǐng)求的有皮膚,并將GET請(qǐng)求
55、的皮膚設(shè)置到Cookie中1分鐘1.準(zhǔn)備JPG皮膚圖片,分別將其命名為1.jpg、2.jpg、3.jpg、4.jpg。2.創(chuàng)建目錄images,將所有皮膚圖片文件置于該目錄下。3.創(chuàng)建skin.php文件,寫(xiě)入如下代碼:<?php/如果GET請(qǐng)求以及Cookie里面都沒(méi)有設(shè)置皮膚,則使用默認(rèn)皮膚if(!isset($_GET"source") && !isset($_COOKIE"source")$source = "images/1.jpg"/如果Cookie里面有皮膚,則使用Cookie里的皮膚if(isse
56、t($_COOKIE"source")$source = $_COOKIE"source"/如果GET請(qǐng)求里面有皮膚,則使用GET請(qǐng)求的有皮膚,并將GET請(qǐng)求的皮膚設(shè)置到Cookie中1分鐘if(isset($_GET"source")$source = $_GET"source"setcookie("source",$source,time()+60);?><body background="<?php echo $source ?>"><
57、;form><select name="source"><option value="images/1.jpg" <?php echo $source="images/1.jpg" ? "selected" : ""?>>皮膚1</option><option value="images/2.jpg" <?php echo $source="images/2.jpg" ? "sel
58、ected" : ""?>>皮膚2</option><option value="images/3.jpg" <?php echo $source="images/3.jpg" ? "selected" : ""?>>皮膚3</option><option value="images/4.jpg" <?php echo $source="images/4.jpg" ? &qu
59、ot;selected" : ""?>>皮膚4</option></select><input type="submit" value="修改皮膚"></form>3編寫(xiě)PHP程序判斷瀏覽器是否開(kāi)啟Cookie。程序說(shuō)明,此題關(guān)鍵在于:Ø 頁(yè)面重定向時(shí),如果重定向到頁(yè)面自己本身,如何防止重定向死循環(huán)。<?phpif(!isset($_GET'set')setcookie('test','test');$
60、url = 'http:/'$url.= $_SERVER'HTTP_HOST'$url.= $_SERVER'PHP_SELF'$url.= '?set=yes'header('Location:'.$url);elseif(empty($_COOKIE'test')echo "瀏覽器關(guān)閉了Cookie!請(qǐng)開(kāi)啟瀏覽器Cookie后再訪問(wèn)本網(wǎng)站!"elseecho "瀏覽器開(kāi)啟了Cookie!"?>4創(chuàng)建createExcel.php文件,寫(xiě)入如下代碼:<?phpfunction createExcel($database,$tableName)$host = 'localhost'$userName = 'root'$password = ''mysql_connect($host,$userName,$password);mysql_select_db($database);mysql_query("set names 'gbk'");/制作表格(邊框?qū)挾葹?)echo "<table border=1>
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 沙漠通信鐵塔基礎(chǔ)施工方案
- “十三五”重點(diǎn)項(xiàng)目-空壓機(jī)柴油機(jī)機(jī)組項(xiàng)目節(jié)能評(píng)估報(bào)告(節(jié)能專(zhuān))
- 中國(guó)云南省物流市場(chǎng)發(fā)展前景預(yù)測(cè)及投資戰(zhàn)略咨詢(xún)報(bào)告
- 苦咸水淡化裝置行業(yè)相關(guān)項(xiàng)目可行性研究報(bào)告
- 環(huán)保著色系統(tǒng)行業(yè)發(fā)展監(jiān)測(cè)及投資前景預(yù)測(cè)報(bào)告
- 家政接送服務(wù)居間協(xié)議
- 醫(yī)療器械居間服務(wù)模板
- 商業(yè)廣場(chǎng)建設(shè)石子運(yùn)輸范本
- 酒店水電維修服務(wù)協(xié)議
- 2025年房地產(chǎn)項(xiàng)目委托工程監(jiān)理服務(wù)合同3篇
- 九防突發(fā)事件應(yīng)急預(yù)案
- 脫水篩 說(shuō)明書(shū)
- 小學(xué)生體育鍛煉習(xí)慣的培養(yǎng)
- 建筑公司年度工作總結(jié)及計(jì)劃(6篇)
- 2023年昆明貴金屬研究所招聘筆試模擬試題及答案解析
- 硫酸裝置試生產(chǎn)方案
- 國(guó)家重點(diǎn)專(zhuān)科臨床護(hù)理專(zhuān)業(yè)評(píng)選標(biāo)準(zhǔn)
- DB11T 1944-2021 市政基礎(chǔ)設(shè)施工程暗挖施工安全技術(shù)規(guī)程
- 中國(guó)農(nóng)業(yè)核心期刊要目概覽
- 好聽(tīng)簡(jiǎn)單的鋼琴譜
- 技術(shù)咨詢(xún)合同書(shū)(浙江省科學(xué)技術(shù)廳監(jiān)制)
評(píng)論
0/150
提交評(píng)論