挑戰php5第九章最後的習題 |
|
piggy
更新時間:2009/7/10 上午 07:31:23 |
|
1. 當我將習題載入測試時每進入一個子資料夾 或按上一層就會出現"\\"會越來越多 應該顯示C:\dwphp\Connections會變成C:\\dwphp\\Connections 到最後會變成C:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\dwphp\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ 是什麼原因造成的呢??
2. 第39行 echo '<form action="?action=upload" method="post" enctype="multipart/form-data" name="form1" id="form1">'; 裡面form action="?action=upload"是什麼意思 method="post"為何不是"get"
3. 為何要加入這一行呢?功能是?不加入會如何? 第44行 echo '<input name="dir" type="hidden" id="dir" value="'.$fileDir.'" /></form>';
4. <a href="?dir='.$fileUplevel.'"> <a href="?dir='.$fileDir.'\\'.$fileName.'"> ?dir欄位是相當為一個文字欄位嗎?為什麼這輸入後就可以輸出$fileUplevel 它是輸入給下方的程式嗎? if(isset($_GET["dir"])&&$_GET["dir"]!=""){ $fileDir = $_GET["dir"]; }
5. <a href="?file='.$fileDir.'\\'.$fileName.'&action=delete"> <form action="?action=upload" method="post" enctype="multipart/form-data" name="form1" id="form1">' 為何一個是&action=delete 而另一個是?action=upload 它們分別是下面判斷式裡面的=="delete"=="upload"嗎?
if(isset($_GET["action"])&&$_GET["action"]=="delete"){ unlink($_GET["file"]); $fileDir =pathinfo($_GET["file"],PATHINFO_DIRNAME); header("Location: ?dir=".$fileDir); }
if(isset($_GET["action"])&&$_GET["action"]=="upload"){ if($_FILES["upload"]["error"]==0){ move_uploaded_file($_FILES["upload"]["tmp_name"], $_POST["dir"]."\\".$_FILES["upload"]["name"]); } header("Location: ?dir=".$_POST["dir"]); }
感謝解答 |
|
|
|
piggy
更新時間:2009/7/10 上午 07:32:13 |
|
<?php //取得目前路徑 $fileDir = getcwd();
if(isset($_GET["action"])&&$_GET["action"]=="delete"){ unlink($_GET["file"]); $fileDir =pathinfo($_GET["file"],PATHINFO_DIRNAME); header("Location: ?dir=".$fileDir); }
if(isset($_GET["action"])&&$_GET["action"]=="upload"){ if($_FILES["upload"]["error"]==0){ move_uploaded_file($_FILES["upload"]["tmp_name"], $_POST["dir"]."\\".$_FILES["upload"]["name"]); } header("Location: ?dir=".$_POST["dir"]); } ?> <head> <meta http-equiv="Content-Type" content="text/html; charset=big5" /> <title>檔案管理</title> </head> <body> <?php //若有URL參數dir,其值即為目前路徑 if(isset($_GET["dir"])&&$_GET["dir"]!=""){ $fileDir = $_GET["dir"]; } //目前路徑上一層路徑 $fileUplevel = dirname($fileDir); //取得目前路徑中的內容 $fileResource = scandir($fileDir); echo '<table width="500" border="0" align="center" cellpadding="2" cellspacing="1" bgcolor="#000000">'; //顯示目前路徑 echo '<tr><td bgcolor="#FAFAFA"colspan="3">目前路徑:'.$fileDir.'</td></tr>'; echo '<tr><td bgcolor="#FAFAFA"colspan="3" align="center">'; //設定URL參數action為upload echo '<form action="?action=upload" method="post" enctype="multipart/form-data" name="form1" id="form1">'; //將上一層路徑帶進連結的URL參數dir中 echo '<a href="?dir='.$fileUplevel.'">上一層</a> | '; echo '上傳檔案 <input type="file" name="upload" style="height:20px" />'; echo '<input type="submit" name="button" style="height:20px" value="送出" />'; echo '<input name="dir" type="hidden" id="dir" value="'.$fileDir.'" /></form>'; echo '<tr><td bgcolor="#FAFAFA">名稱</td><td bgcolor="#FAFAFA" width="120" align="center">檔案大小</td><td bgcolor="#FAFAFA" width="80" align="center">功能</td></tr>'; //顯示資料夾內容 foreach($fileResource as $fileName){ if(is_dir($fileDir.'\\'.$fileName)){ //不顯示相對路徑「.」及「..」 if($fileName != "." && $fileName !=".."){ //顯示資料夾,並設定該資料夾的路徑帶進連結的URL參數dir中 echo '<tr><td bgcolor="#FAFAFA" width="300"><a href="?dir='.$fileDir.'\\'.$fileName.'"><'.$fileName.'></a></td>'; echo '<td bgcolor="#FAFAFA" width="120"> </td><td bgcolor="#FAFAFA" width="80"> </td></tr>'; } } } //顯示檔案的內容 foreach($fileResource as $fileName){ if(is_file($fileDir.'\\'.$fileName)){ //計算檔案大小 $fsize = filesize($fileDir.'\\'.$fileName); //顯示檔案名稱 echo '<tr><td bgcolor="#FAFAFA" width="300">'.$fileName.'</td>'; //顯示檔案大小,並以千位符號格式化顯示 echo '<td bgcolor="#FAFAFA" width="120" align="right">'.number_format($fsize).' bytes</td>'; //在刪除文字上加上連結,並設定該資料夾的路徑帶進連結的URL參數dir、參數action為delete echo '<td bgcolor="#FAFAFA" width="80" align="center"><a href="?file='.$fileDir.'\\'.$fileName.'&action=delete">刪除</a></td></tr>'; } } echo '</table>'; ?> </body> </html> |
|
|
|
文淵閣工作室
更新時間:2009/7/13 上午 09:49:36 |
|
1.我們測試並沒有這個狀況。 2.上傳表單的設定限制,請參考本書9.4.3的說明。 ?action=upload 是上傳時技巧性的為接收頁加上一個URL變數讓程式頁知道目前要執行上傳的動作。 3.取得目前路徑就是儲存在這個隱藏欄位,否則無法切換路徑。 4.Dir是一個變數,可以籍由這個值來切換路徑。 5.是,我們利用action變數的內容來判斷要執行什麼工作,若是delete則是執行刪除的動作,若是upload則是執行上傳的動作。 |
|
|
|
jam
更新時間:2012/4/27 下午 09:43:21 |
|
請問 &action=delete ?action=upload &和?的用法分別是什麼呀 為什麼action前面接的是不同的東西? 謝謝 |
|
|
|
文淵閣工作室
更新時間:2012/5/1 上午 09:22:32 |
|
& 與 ? 是接 url 的參數 如果只有一個時,網址後方是用 ? 來接參數 如果有二個以上,網址後方仍是用 ? 來接參數,但是參數與參數間要用 & 來連接。 |
|
|
|
毛毛
更新時間:2013/1/10 下午 04:03:42 |
|
dear 文淵閣sirs:
您好!謝謝您們的書 "挑戰PHP5 MySQL" 就是這本書啟蒙我的php之路
目前還在研讀中 而我也在這個習題碰到了很大的問題 1. 如發言者所說的第2項,form定義了method為POST,可是line_2到line_18裡面的if都是GET,是否可以就這部分做更詳細說明?
2. 如發言者所說的第3項,為什麼要將目前路徑用hidden送出?目前路徑不是就是$fileDir = getcwd()了嗎?
3. 如貴社在2009時回答的第4項,Dir是個變數。 可我在程式碼中找不到$Dir的定義在哪裡? 還是被隱藏在某些過程,比如這樣<a href="?dir='.$fileUplevel.'"> 這個部分也需要請貴社指導我這枚菜鳥!
BTW,真的很謝謝你們讓我有這個機會與動力學習PHP,祝福貴社工作順利,績效一級棒!
PS:會出perl的書嗎? |
|
|
|
毛毛
更新時間:2013/1/10 下午 04:52:55 |
|
補充一點: 我也遇到 \\越來越多的情形 不管是IE或者chrome都會 請文淵閣的大大協助解答! |
|
|
|
文淵閣工作室
更新時間:2013/1/15 上午 11:32:06 |
|
1.關於同一程式中POST與GET的分別。 在 2~18 行之中的的GET,處理的是刪除的動作,而這個刪除的動作,是由本頁每個檔案後方的連結,除了帶這個檔案名稱外,還有一個參數action=delete,因為它是用網址帶,所以必須要使用GET的方式來接收這個參數,有這個參數程式才知道要執行的是刪除的動作,然後才依接收到的檔案名稱進行刪除。 由form中所送的資料,也就是要上傳的動作,在這裡並不會處理,因為它必須是由表單送出的資料才能處理。 總結來說,在這頁程式一開始就有上傳檔案、刪除檔案的程式片段,但是我們都用判斷式依情況來看要執行哪個段程式。而判斷的技巧,不只有參數,還有接收的方式。 |
|
|
|
文淵閣工作室
更新時間:2013/1/15 上午 11:45:46 |
|
2. 因為上傳的動作是程式由重新載入後就開始進行, 所以如果一開始就提供好路徑,程式在接收後就即刻可以執行上傳的動作,也能正確上傳到適當的位置上。 3. 是,這個變數是由URL參數接收下來的。直接加在網址後方的參數方式,與放在表單欄位中用GET送出的方式是一樣的,您可以多注意送出表單的網址。
毛毛,您太客氣了,還希望您多多支持。 |
|
|
|
caris
更新時間:2015/7/19 下午 10:11:04 |
|
你們好,請問『挑戰PHP/MySQL程式設計與超強專題特訓班』的p9-40 lesson9.php中
1.why我在#3$fileDir = getcwd();下方打入 // echo 'fileDir: ' . $fileDir.'<br>';或 // print("fileDir: $fileDir<br>"); 會影響上傳的動作呢,會導致上傳後無法停留在目前目錄中
2.#17header("Location: ?dir=".$_POST["dir"]);上方打入// echo 'upload_fileDir: '.$fileDir;也是有相同的問題產生
請問為什麼會這樣呢?
|
|
|
|
文淵閣工作室
更新時間:2015/7/22 上午 11:29:58 |
|
echo或print是利用PHP語法將訊息以HTML內容顯示在頁面上,也就是產生HTML。 你下程式的地方,剛好是PHP在執行程式的地方,是不建議下這些語法會中斷程式的程式。 另外,在<html>之前也最好不要下echo及print指令,因為產生的內容會破壞HTML結構。 |
|
|
|
caris
更新時間:2015/7/23 下午 11:18:47 |
|
喔喔,原來如此,感謝~~^^ |
|
|
|
caris
更新時間:2015/7/25 下午 08:26:59 |
|
你好,不好意思,想請問 p10-5設定cookie的暫存路徑,範例上的路徑是設定"/tmp/",但執行後沒有反應。
且設定其它路徑也都沒有反應 請問問題在哪裡呢? PS:我是用MAC |
|
|
|
caris
更新時間:2015/9/19 下午 05:11:43 |
|
你們好~ 想要請問ch05的php_formtomail.php這檔案我都無法將mail成功寄出吔,我已將參數改好,但還是無法寄出,請問這是什麼問題呢? 我筆電用MAC
[mail function] ; For Win32 only. SMTP = msa.hinet.net smtp_port = 25
PS:ch16的忘記密碼也是無法寄出mail |
|
|
|
文淵閣工作室
更新時間:2015/9/21 下午 10:01:45 |
|
線上郵寄在網頁程式中很重要,但是它有許多的設定重點,都不在程式上,而是在郵件服務。 所以無法寄信並不是程式或是 XAMPP 的問題, 因為由程式將信件傳送到SMTP進行交換,也就等於將信件是否能夠派發的動作交給了SMTP。 您必須先修改好您的 php.ini 在 SMTP 的服務主機,也要確定該主機可以供您使用。 如果您沒有架 SMTP 的主機,最方便的方式就是使用 ISP 的郵件主機。 例如我們公司使用的是中華電信的 ADSL,所以在上面連線的主機可以使用中華電信的 SMTP : msa.hinet.net。 因為我不知道您的主機,也就是您模擬開發的機器是否用的是中華電信的線路, 因為寄信時,主機會檢查所來源主機的IP是否是合法的寄信IP, 如果是,中華電信的SMTP應是不會阻擋您的信件,而進行交換。 其實您的程式可能都沒有錯,只是SMTP沒有幫您轉信,所以才造成您收不到信的問題。 為什麼郵件主機會控管如此嚴格?因為線上發信的動作與一般的廣告信無異,如果沒有控管,可能會造成許多問題。
最好的方式,如果您本身並沒有主機的建置經驗, 建議您可以承租便宜並有提供線上寄信的虛擬主機,如此一來就會有較好而穩定的服務。
另外,也可以參考利用 phpmailer 的方式,透過要認證的主機進行發信,這裡提供幾個教材
http://dreamweaver.com.tw/?fid=7&viewtopic=29672 http://www.dreamweaver.com.tw/index.php?fid=7&viewtopic=29692
但是還是要注意,主機發信要慎重,否則很容易讓主機成為垃圾郵件的黑名單。 |
|
|
|