New Ribbon
翻倍效率工作術–詢問度破表的Office職人技500+ iOS 11+iPhone 8 / 8Plus / X / iPad 完全活用術:225個超進化技巧攻略 翻倍效率工作術:不會就太可惜的Excel+Power BI 大數據視覺圖表設計與分析 會做簡報就會製作跨平台 App:Smart Apps Creator 3 超神開發術 快快樂樂學威力導演15 - 影片/MV剪輯活用情報特蒐 Excel 2016高效實用範例必修16課-善用資料圖表 x 函數巨集的精算達人 中老年人愛用APP全收錄(第二版)<適用iOS+Android雙系統手機及平板 中老年人快樂學拍照、攝影 生活科技應用網路概論(第二版) 中老年人快樂學電腦(Windows 10+Office 2016) 中老年人快樂學Facebook+LINE 翻倍效率工作術:不會就太可惜的Google超極限應用(第二版) 翻倍效率工作術:不會就太可惜的Excel必學圖表 翻倍效率工作術:不會就太可惜的Excel必學函數

 

  挑戰php5第九章最後的習題

piggy

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

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

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

caris
更新時間:2015/7/19 下午 10:11:05

 

你們好,請問『挑戰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:59

 

echo或print是利用PHP語法將訊息以HTML內容顯示在頁面上,也就是產生HTML。
你下程式的地方,剛好是PHP在執行程式的地方,是不建議下這些語法會中斷程式的程式。
另外,在<html>之前也最好不要下echo及print指令,因為產生的內容會破壞HTML結構。

caris

caris
更新時間:2015/7/23 下午 11:18:47

 

喔喔,原來如此,感謝~~^^

caris

caris
更新時間:2015/7/25 下午 08:26:59

 

你好,不好意思,想請問
p10-5設定cookie的暫存路徑,範例上的路徑是設定"/tmp/",但執行後沒有反應。

且設定其它路徑也都沒有反應
請問問題在哪裡呢?
PS:我是用MAC

caris

caris
更新時間:2015/9/19 下午 05:11:44

 

你們好~
想要請問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

但是還是要注意,主機發信要慎重,否則很容易讓主機成為垃圾郵件的黑名單。




 

 

Re:挑戰php5第九章最後的習題

請輸入姓名。

已超出字元數目的最大值。


請輸入電子郵件。

格式無效。


請輸入內容。