星期四, 7月 22, 2010

20100722 PHP-MySQL 上課小記

20100722
表單與資料接收的練習

建立一個表單  form1.html
內容如下
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
TODO write content
<form name="form1" method="post" action="1.php">
username:<input type="text" name="username" size="6"> <br>
password:<input type="password" name="passwd" maxlength="6" size="10"> <br>
<input type="submit" value="ok"> <input type="reset" value="cancel">
<input type="button" value="what?">
</form>
</body>
</html>

建立接收的 1.php
內容如下
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title></title>
</head>
<body>
<?php
echo "1:".$_POST['username']."<br>";
echo "2:".$_POST['passwd']."<br>";
echo "3:".$username."<br>";
echo "4:".$passwd."<br>";
echo "5:".$_GET['username']."<br>";
echo "6:".$_GET['passwd']."<br>";
?>
</body>
</html>



get
  • 資料會出現在網址列
  • 一般用於具分頁功能的網頁
  • 檢查資料是否正確傳送及接收


post
  • 資料不會出現在網址列
  • 檔案上傳一定要用post


Notes:
  • 若表單網頁為html 請不要由本機 Click 開啟, 將無法執行 php 檔
  • 但如果form 修改 action=http://xxxxxx  ,  且php 網頁未作檢查, 個人PC內儲存的html檔案是可以送資料到 server
  • 表單內各項 input 的name, 在 php  內成為變數名稱, 用 post 方式傳送以 $_POST[‘名稱’] 接收, 用 get 方式則以 $_GET[‘名稱’] 接收
  • Linux 預設使用一般變數來接收是關閉的, 設定選項為 register_globals = Off 設定檔在 /etc/php5/apache2/php.ini , 但是 Windows Appserv 預設是打開的
  • php.ini 內 register_globals 設定為 on, 代表一般變數可接收資料, off 是不行.
  • php6 預設是不行, 且無此設定, 建議開始改變習慣, 以 $_POST[‘  ‘]  或是 $_GET[‘  ‘] 接收


Lab: 選擇鈕

建立一個 form3.html
內容如下
<!--
To change this template, choose Tools | Templates
and open the template in the editor.
-->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
TODO write content
<form name="form3" method="get" action="3.php">
sex:
<input type="radio" name="sex" value="boy">公的
<input type="radio" name="sex" value="girl">母的
<br>
Blood:
<input type="radio" name="blood" value="O">O
<input type="radio" name="blood" value="A">A
<input type="radio" name="blood" value="B">B
<input type="radio" name="blood" value="AB" checked>AB
<br>
<input type="submit" value="ok"> <input type="reset" value="cancel">
</form>
</body>
</html>

建立一個 3.php
內容如下
<!--
To change this template, choose Tools | Templates
and open the template in the editor.
-->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title></title>
</head>
<body>
sex is <? echo $_GET['sex'];?><br>
blood is <? echo $_GET['blood'];?><br>
</body>
</html>



選擇鈕
  • name --> 名稱 [同名稱的radio只能選一個]
  • value --> 傳送的內容
  • checked --> 預設選項


單行文字框
  • maxlength --> 最大字數
  • value  -->  預設值
  • name --> 名稱


建立一個 form4.html
內容如下





核選框
  • 可複選
  • value, checked, disabled 同 radio
  • 名稱name若相同, 只會取最後一個
    • name 名稱若是變數, 則每一個checkbox 必須不同name
    • name 名稱若是陣列, 名稱後加上  [  ], 例如  name=”win[ ]” ,就可以將checkbox 分組


( 待補 form4 and form 3因為  3.php 沒有收到結果)

增加驗證
  • session
  • cookie
  • 圖形驗證
  • ip 及  資料庫過濾


session
  • 儲存於網頁視窗及主機(Server)
  • 當視窗關閉, 視窗的 session 就會消失
  • Windows 主機建議將 session  資料存在非系統磁區
  • session_start( )
    • 必須放在所有輸出之前, 若不能放在最前面, 請加上ob_start( ) 開啟輸出緩衝區暫存資料
    • session_start會在 server 上產生檔案及視窗內產生一個session id, 若要使資料傳送, 每一頁均要有 session_start( )
  • user 端不能由網址列更改 session 內容
  • php.ini 內session.save_path 設定 session 儲存
  • 每一個分頁均視為同一個視窗, 若要測試session, 請關閉視窗再測試
  • 為何session  在 server  上的資料未清除?
    • Server 不清楚 user 端是關閉瀏覽器或在看資料, 所以不建議修改 php.ini 內的 session.gc 之相關設定
    • 觀察 session 於 php.ini 相關設定如下
    • # grep session /etc/php5/apache2/php.ini  | grep -v \;
    • session.save_handler = files
    • session.save_path = "/var/lib/php5"
    • session.use_cookies = 1
    • session.use_only_cookies = 1
    • session.name = PHPSESSID
    • session.auto_start = 0
    • session.cookie_lifetime = 0
    • session.cookie_path = /
    • session.cookie_domain =
    • session.cookie_httponly =
    • session.serialize_handler = php
    • session.gc_probability = 1
    • session.gc_divisor = 1000
    • session.gc_maxlifetime = 1440
    • session.bug_compat_42 = Off
    • session.bug_compat_warn = Off
    • session.referer_check =
    • session.entropy_length = 0
    • session.entropy_file = /dev/urandom
    • session.entropy_length = 16
    • session.cache_limiter = nocache
    • session.cache_expire = 180
    • session.use_trans_sid = 0
    • session.hash_function = 3
    • session.hash_bits_per_character = 5
    • 預設1440 秒刪除 1 %沒有回應的 session


時區
  • php4 依作業系統
  • php5 為格林威治時間
  • php6 必須自己設定
  • 調整方式: php.ini 內 ;date.timezone = 取消註解, 並加上時區


-- class end --

沒有留言: