星期四, 8月 19, 2010

20100819 PHP-MySQL-CLASS 10

20100819 PHP-MySQL-CLASS 10

檔案上傳後接收資料的陣列變數名為 $_FILES
move_uploaded_file(  上傳檔案的暫時檔名, 上傳檔案路徑及儲存檔名  )

mb_convert_encoding(  )
  • 將資料作編碼轉換, 例如 Big5 轉 UTF-8
    • 中文檔名資料須作編碼轉換


$_SERVER[‘PHP_AUTH_USER’]
  • 開啟視窗前認證訊息內的帳號


$_SERVER[‘PHP_AUTH_PW’]
  • 開啟視窗前認證訊息內的密碼

若視窗開啟, 認證訊息就無法產生


Lab: ftp1.php

複製一個檔案, 複製到 class 9 的目錄下, 執行 ftp1.php
可以觀察到 可以指定 檔案名稱以及讓用戶端下載的名稱( 名稱不需要相同 )

ftp1.php 檔案如下

<?php
//include("auth1.php"); //可不加上此行
header("Content-type: text/html; charset=utf-8");
$file="./9707.zip"; // 實際檔案的路徑+檔名
$filename="0714.zip"; // 下載的檔名
header("Content-type: ".filetype("$file"));//指定類型
header("Content-Disposition: attachment; filename=".$filename."");
readfile($file);
?>

header(  ) 函數
  • 除了可作網頁切換, 不存暫存檔案等設計外, 也可呼叫網頁的認證訊息, 模擬其他檔案, 更改下載檔案檔名.


ftp1.php 延伸的主題
  • 若希望 user 只能下載 1  次, 該如何設計?
    • 加入資料庫偵測, 若下載一次則 update 資料, 下次就不能下載.



將 record2009.sql 檔案匯入 pcschool 資料庫


分頁網頁設計
  1. 請先確認, 儲存以下資料的變數名稱及變數內容
    1. 目前頁數
    2. 每一頁筆數
    3. 總筆數
    4. 總頁數


設計頁碼連結時請留意單雙引號, 不要少了或多了


Lab: 人數統計分析, 頁碼判斷

display1.php 內容如下

<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>人數統計分析</title></head>
<body><?   
include("server.php");  
if( isset($_GET['page']) )
 $page = intval( $_GET['page'] ); // intval( ) 作用回整數
else{$page = 1;}
$page_size = 10;
$sql = "select count(*) as total from record";
$result = mysql_query($sql);
$row = mysql_fetch_array($result);
$total = $row['total'];
if(isset($total)) //假設有資料
 {
  if( $total < $page_size ) //若總筆數 小於每頁筆數, 總頁數 = 1
      $page_count=1;
  if( $total % $page_size) //假設有餘數, 總頁數 + 1
      $page_count=(int)($total / $page_size) + 1;
  else
      $page_count = $total / $page_size;
 }
else
 $page_count = 0;
$page_number = '';
if( $page == 1 ) //$page_number要填寫什麼呢?
 $page_number .= '[第一頁][上一頁]';
else
 {
  $page_number.='[<a href='.$_SERVER['PHP_SELF'].'?page=1>第一頁</a>]';
  $page_number.='[<a href='.$_SERVER['PHP_SELF'].'?page='.($page-1).'>'."上一頁</a>]";
 }
if(($page == $page_count) || ($page_count == 0))
 $page_number .= '[下一頁][尾頁]';
else
 {
  $page_number.='[<a href='.$_SERVER['PHP_SELF'].'?page='.($page+1).'>'."下一頁</a>]";
  $page_number.='[<a href='.$_SERVER['PHP_SELF'].'?page='.$page_count.'>'."尾頁</a>]";
 }
if(isset($total)) //假設有資料,依據變數進行檢索
 {
   $sql = "select * from record limit ".($page-1)*$page_size.",$page_size";
   echo $sql;
   $result = mysql_query($sql) or die(mysql_error());
   echo "<table border=1>";
   echo "<tr><td>時間</td><td>ip</td></tr>";
   while($list1=mysql_fetch_array($result))
       {
       echo "<tr><td>".$list1['visitday']."</td>";
       echo   "<td>".$list1['ip']."</td></tr>";  }
       echo "</table>";
       echo $page_number;
 
 }
?></body></html>


Q: 頁碼連結語法很複雜
A: 可以設計 html 語法的頁碼連結. 再將可用 php 語法取代的 html 語法刪除,加上作為字串與變數的連結


Q: 若 SQL 語法有問題?
A:
  • 請在 mysql_query( ) 之後加上 die( mysql_error( ) )
  • 若仍看不懂訊息, 請把 SQL 語法 echo 出來.
  • limit 語法之後要有空格



php 的 header( ) 函數可指定網頁類型為 jpg, 但 IE 啟該網頁可能有問題
  • 建議以 <img src=”x.php”> 方式開啟 php 檔案


Q: 如何不要下載 pdf ?

A: 可使用 header (  ) 函數指定網頁為 pdf , 再以 echo 方式回應 file_get_contents(“pdf檔案”) 內容, 可於 php 內 加入 ip 偵測等語法.

header(  )  函數可作
  1. 開啟網頁前認證
  2. 下載檔案時,檔名改變
  3. 開啟 jpg, pdf 等檔案
  4. 轉換至其他網頁

沒有留言: