Welcome to Planet openSUSE

This is a feed aggregator that collects what openSUSE contributors are writing in their respective blogs.

To have your blog added to this aggregator, please read the instructions.


週五
03 九月, 2010


Ray Chen: *.jar 的檔案關聯

10:54 UTCmember

face

如果您的 *.jar 檔是 java 的壓縮檔
應該要用

 java -jar *.jar

來執行,而不是將他解壓縮就好
KDE 的使用者可以用
系統設定->檔案關聯->搜尋 jar 來增加啟動 *.jar 的命令為
java -jar

face

WSUS 出現的錯誤訊息

內容檔案下載失敗,原因: 伺服器不支援必要的 HTTP 通訊協定。背景智慧型傳送服務 (BITS) 要求伺服器支援範圍通訊協定表頭。


搜尋了 一下解決方案
 
http://support.microsoft.com/kb/922330/zh-tw
 
發生的原因
 
如果電腦是有防火牆或 Proxy 伺服器背後,可能會遇到這個問題。如果發生下列情況之一,就會發生這個問題:


Proxy 伺服器環境不支援 HTTP 1.1 範圍要求功能。


是背後 SonicWALL 防火牆裝置,而且 [啟用 HTTP 位元組-範圍要求與閘道 AV 設定不會啟用裝置。


當您藉由使用 BITS 背景模式中複製檔案時中多個小型的部分, 被複製檔案。 若要進行這類的複製作業 BITS 會使用 HTTP 1.1 內容 Range 標頭。 如果您 Proxy 伺服器背後或移除此標頭的防火牆之後,檔案複製作業是失敗。






附註當 BITS 會複製檔案,在前景模式時,BITS 並不會使用這個標頭。
 
 
目前的環境的確也符合這個狀況
先記下來, 然後來看哪一種修正方式較好
 


週一
30 八月, 2010


face

感謝 Armani 提供此秘技 ~

###################################
### Disable the automount in Nautilus ###
###################################
~user $ gconftool-2 --type bool --set /apps/nautilus/preferences/media_automount false


週四
26 八月, 2010


face
20100826  PHP-MySQL-CLASS 12

CSV 檔案匯出及匯入 [ 使用 class 講義 ]

匯出
  • 以 mysql 指令加上 select 語法
  • 匯出檔案位於資料庫所在的目錄內
    • Windows ( Appserv ):  Appserv\MySQL\data\資料庫
    • Linux:   /var/mysql/data


Q: 為何 uploadcsv.php 在 IE 是空白的?
A:
  • 缺少 < meta >  標籤
  • < meta >標籤在 < title > 之後
    • 請調整順序
  • 以上 2 點只在 IE 下發生, 其他瀏覽器不會發生


透過表單匯入 CSV 檔案
  • CSV  檔案為資料表資料, 分隔符號為,
    • phpmyadmin 匯出資料的分隔符號為 ; php 網頁內自訂分隔符號為 ,  且 excel 設定為 , 所以請留意 CSV 的分隔符號
  • 檔案上傳後, 使用 fopen(  ) 開啟檔案, 最後以 fclose(  ) 關閉檔案, 開啟檔案時, 逐列讀取 ( Q: 如何知道 欄位如何分隔 ?)
  • 由練習可知, MySQL 允許一次新增多筆資料 ( 請將 $sql echo 出來查看 )


CSV  下載
  • 因為不需在瀏覽器顯示,  所以不需 html 標籤, 使用  header(  )  函數指定檔案類型
  • show columns from student1 是 MySQL 的指令, 指 "顯示 student1 資料表攔位資訊"


MyISAM 與 Innodb 差別
  • 兩者均是 MySQL 資料庫引擎
  • Innodb 的功能為 "交易”, 資料更改時,其他人不能更改
  • Innodb 較耗資源, MySQL預設關閉
  • 資料庫若為 Innodb, 資料庫存取語法亦要增改, 不是引擎改了就有交易功能.


my.ini [ Linux 內可能是 my.cnf ] 設定
  • 若要使用 innodb,  請取消 skip_innodb
  • read_buffer_size 若太小,  讀取資料可能會中斷 ( 若MySQL 內有二進位資料 ,建議調大 )


*當 php 網頁以圖形, pdf, CSV 等形式呈現, 不能有網頁輸出, 引用檔案亦不能有 echo 或是空格出現

資料庫網頁建議
  1. 新增
  2. 列表
  3. 更新
  4. 刪除
  5. 列表以下兩個二選一
    1. 加分頁
    2. 加查詢
  6. 列表加分頁及查詢


更新及刪除須確認資料是不是唯一的資料
  • 一般都是以主索引欄位作為 Hyperlink 所攜帶的參數內容

face

斯文豪氏游蛇:
中文介紹:http://www.snakesoftaiwan.com/Rhabdophis%20swinhonis/species_rhabdophis_swinhonis_rev_ch.htm
Swinhoe's Grass Snake:
English: http://www.snakesoftaiwan.com/Rhabdophis%20swinhonis/species_rhabdophis_swinhonis.htm
到東埔爬山,由八通關古道登山口上去沒多久,還不到賣愛玉的攤子,
就在階梯上看到一次,嚇我一跳
下山時,又在大約同一處遇到,這次沒給他逃掉,
不過當時不認識他,雖然覺得這個小朋友很溫馴,還是不敢用手去摸
回到家查了網路資料才知道這是台灣特有種的保育蛇類
並不是很常見的(Lucky!)
而且真的個性很溫馴






Ray Chen: 幫忙測試 firefox 4

01:11 UTCmember

face

firefox 4 beta 下載:
英文:http://www.mozilla.com/en-US/firefox/beta/
中文:http://www.mozilla.com/zh-TW/firefox/beta/
您會下載一個 firefox-4.0*.tar.bz2 的檔案
解壓縮後會得到一個 firefox 的目錄
您可以將他放在家目錄之下
例如 $HOME/firefox
首先將已安裝的 plugins 帶進來

$ ln -s /usr/lib/browser-plugins $HOME/firefox/plugins

(在 64位元系統是 lib64)
接著我要新增一個 profile (設定檔)
$ firefox -ProfileManager

例如您新增的 profile 名稱為 Default User
您就可以
$ $HOME/firefox/firefox -P Default\ User

用新的設定檔來啟動您的 firefox 4
firefox 預設會使用上次使用的設定檔
這會讓您原有的 firefox 3 也使用新的設定檔
所以我修改了桌面和工具列上的啟動圖示命令
讓我從桌面啟動 firefox 時是 firefox 4
而用工具列上的圖示則是原本設定檔的 firefox 3
在桌面上的 firefox 圖示按右鍵->屬性
選擇應用程式分頁,將命令改為
$HOME/firefox/firefox %u -P Default\ User

在工具列上的 firefox 圖示按右鍵->圖示設定
一樣在應用程式分頁,將命令改成
firefox %u -P default

經過這樣處理後,您就可以自由選擇要啟動的 firefox
若覺得游標上的圖示跳來跳去很煩(明明就已經啟動了)
可以照樣在圖示上按右鍵
應用程式分頁->進階的選項->取消"啟用執行回饋"
然後您可以將您的書籤匯入,加上您的擴充(我好像都沒有擴充套件ㄟ)
開始 firefox 4

目前 firefox 4 仍是測試版
在右上角有一個意見回饋按鈕
三不五時會有跳出的訊息,告訴您目前試飛的進度
寄件者 firefox 4

您可以隨時回饋您的意見(不管好或壞)
寄件者 firefox 4

或參與問卷或研究
寄件者 firefox 4

寄件者 firefox 4

大家快來參加,讓 firefox 更棒更符合您的期望

週二
24 八月, 2010


face
20100824 PHP-MySQL-CLASS 11

建立一個 Netbean 的PHP 專案 class11
建立新專案
File → New Project
PHP: PHP Application → Next
點選 Browse 按鈕 建立一個 class11 資料夾( source 按鈕調整於 C:\Appserv\www 目錄下 [網站根目錄] )
Finish


mysq 相關函數:
自 php4 支援至今, 現有幾個問題
  • 不能參數化執行 SQL 語法
    • 資安問題
  • 不能一次執行多個 SQL 語法
    • 效能問題
  • 不能檢測 Server 及 資料庫異常原因



mysqli 相關函數:
  • php5 內新增的函數, 解決 mysql 函數的問題
  • 只能在 MySQL 4.1 以上執行


Q: mysql_pconnect( )  與 mysql_connect(  ) ?
A: mysql_pconnect( ) 函數使 MySQL 在網頁中止資料索取後, 仍保持等待服務(如同餐廳服務生在送走客人之後, 不作別的事, 而在等待下一位客人), 恐影響這台主機效能, 建議不要使用.

@mysqli_connect( , , ,  )
  • mysqli_connect 有 4個參數, 第 4個參數為資料庫
  • mysqli_connect( ) 連線資訊要保留, 日後可提供給 mysqli_select_db 及 mysqli_query(  ) 使用



結合多個 SQL 語法:
  1. 每一個 SQL 語法最後要加上 ;
  2. 建議 select 與 其他語法 ( insert into , update, delete) 分開處理
  3. mysqli_multi_query(  mysqli_connect, 多個 SQL 語法 )


mysqli_store_result(  )
  • 執行一個 SQL 語法


mysqli_more_result( )
  • 若仍有下一個 SQL 語法, 傳回 true


mysqli_next_result( )
  • 切換至下一個 SQL 語法




Q: 為何 php 無法畫圖 ?
A: 因為 php 的 GD 模組未安裝或是取消功能.
  • 安裝
    • Linux 請進行系統更新將安裝 php-gd
    • windows 請至官方網站下載 zip 檔案  www.php.net 解壓縮後將 /ext/ 內的 gd2.dll 檔案 copy 至系統目錄內, 再手動於 php 修改設定
  • php.ini 內若有加上 ; 代表該功能取消, 請刪除 ; 後重新啟動 Apache


* 關於 png 圖檔
  1. IE 6 不支援, IE 7 不支援透明背景
  2. 可全彩, 可設定透明背景



繪製圖片
  1. 網頁本身是 jpg 或是 png 格式 ( gif 因原公司取消網路授權, 建議不要使用)
  2. 網頁內不可有 html 的輸出



ImageCreate(  )  建立畫布
ImageColorAllocate( ) 產生顏色
ImageFill (  )   填滿畫布
ImageString(  ) 產生文字


generatorPassword(  ) 內
  • $password_len 控制字數, 而$word 代表可出現於圖片內的文字

face

Cron 執行時通常都會透過 Mail 告訴使用者該排程的執行狀態,若是不想收到這些訊息時,則可以透過下列方式來完成:

1. 以該使用者身份登入後,執行 crontab -e

2. 在所有排程的最上端輸入一行描述

MAILTO=""

這樣便不會再收到相關的郵件訊息了


週四
19 八月, 2010


face
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. 轉換至其他網頁

face

似乎 java 字型設定出了問題
還是使用手動方法將 DroidSansFallback 連結到 fallback 目錄中

# mkdir /usr/lib/jvm/jre/lib/fonts/fallback
# ln -s /usr/share/fonts/truetype/DroidSansFallback.ttf /usr/lib/jvm/jre/lib/fonts/fallback

參考:http://swyear.blogspot.com/2010/04/jnlp.html
在 11.3 中,java 預設會使用平滑字型
所以用 DroidSansFallback 應該會好看些
另 /usr/share/applications/jpackage-java-1_6_0-sun-webstart.desktop 中
Exec=/usr/lib/jvm/java-1.6.0-sun-1.6.0/jre/javaws/javaws -viewer

應為
Exec=/usr/lib/jvm/java-1.6.0-sun-1.6.0/jre/javaws/javaws


11.3 中的 mount.cifs 不認得 credentials 選項
所以要直接加上 username=[smbuser],password=[smbpassword]
來取代 credentials=[your_cred_file]
這應該在近期內會修正:
https://bugzilla.novell.com/show_bug.cgi?id=627243

週二
17 八月, 2010


face
20100817 PHP-MySQL CLASS 9

建立一個 Netbean 的PHP 專案 class9
建立新專案
File → New Project
PHP: PHP Application → Next
點選 Browse 按鈕 建立一個 class9 資料夾( source 按鈕調整於 C:\Appserv\www 目錄下 [網站根目錄] )
Finish
將相關檔案複製到 class8 資料夾

Notes:
  • 接收表單資料後, 變數建議先作分析再丟給一般變數.不建議直接放入 SQL 語法內
    • 資安考量
    • 語法較複雜


select   欄位名稱  from  資料表  where  ( 條件 );
  • 依條件查詢資料表內的欄位內容


1.數值資料
  • >, <, =, >=, <=

2. 文字資料
  • like %關鍵字%’;
    • 相似
  • = 相同

3.通用 ( 文字, 數字皆可 )
  • in(  ,   )
    • 查固定值的欄位內容
  • not  in(  ,   )
    • 查不是固定值的欄位內容
  • is  null  空值
  • not  is null   不是空值




Lab: where 條件查詢

利用 phpMyAdmin 來下指令練習
選取  pcschool 資料庫



執行結果如下 ( 找出 employeeid 大於等於 3 )

相關查詢指令如下

select employeeid,firstname from employees where (employeeid >= 3);
select employeeid,firstname from employees where (employeeid in(2,4,9));
select employeeid,firstname from employees where (employeeid  not in(2,4,9));
select  country,companyname from customers where (country in('Argentina','Mexico'));
select  region,companyname from customers where (region is null);
select  region,companyname from customers where (region is not null);
select  firstname  from  employees  where (firstname like 'a%');
select  firstname  from  employees  where  (firstname  like  '%a%');
select  firstname  from  employees  where  (firstname  like  '%a');

select companyname,contactname,country  from customers  where (country in('France','Germany') and companyname like 'b%');

select companyname,contactname,country  from customers  where (country in('France','Germany')  or  companyname like 'b%');



若有兩個欄位要作判斷, 請加 and 或 or.
  • and 代表 左右兩邊條件均要成立
  • or 代表  左右兩邊一邊成立即成立


$_SERVER[‘HTTP_REFERER’
  • 從那一個網頁引導到該頁 
  • 如果是由 java script  語法連接, 偵測到的可能是空的


Q: 為何  SQL 語法內 $a 及 $b 不用加上 ' ‘ ?

A: 因為這兩個是數字 ( 如果表單輸入的非數字呢?)

“ select  *  from   orders  where customerID=’$a’ ”;
  • 當customerID 等於 $a 變數內容時, 查詢 orders 資料表所有欄位內容 


limit  起始筆數索引值, 總筆數
  • limit 放在 SQL 語法最後
  • 起始筆數索引值由 0 開始, 0 代表第一筆
  • 若只有一個數字, 代表由第一筆開始, 共幾筆資料


檔案上傳
  • form 必須是 post 方式傳送
  • form 必須設定 enctype
  • <input type> 為 file


php uploaded 檔案不是直接放在指定位置,  而是先放在系統暫存區, upload完成後才移動到指定位置

php.ini 及 表單網頁 ( 隱藏欄位, 名為 MAX_FILE_SIZE) 均可對檔案大小設限制
$_FILE[‘表單file欄位’] [‘name’] [‘size’] [‘type’] [‘error’]

週五
13 八月, 2010


face

買了一台印表機 HP Deskjet D2660

這大概是我找得到最便宜的彩色印表機了

有時我需要印些東西出來


安裝:

在 openSUSE 下安裝十分容易

這台印表機要連接在家中的桌上型電腦

目前是使用 openSUSE 11.2

但其他版本的操作方式也類似

連接 USB 埠,插上電源,開啟電源開關

用 YaST -> 硬體 -> 印表機

按下新增

就可以自動偵測到印表機

有兩個驅動程式可供選擇,選定一個,按確定

開始進行設定,半分鐘後就可以用了

注意這裡的設定名稱 hpdeskjetd2600series

請將它記下,分享印表機時會用上(當然您可以改簡單一點的名字)

您可以列印測試頁,看可不可以正確列印

若列印不正常,換一個驅動程式試試看


分享:

參考:http://opensuse.swerdna.org/suseprintipp.html

雖然 usb 印表機算得上是隨插即用了

但家中還有兩台筆記型電腦要列印

openSUSE 和 windows 客戶端都有

經由印表機分享,只要這台桌上型電腦有開機

其他電腦就可以使用印表機

在這裡,我使用 ip 位址來設定印表機分享

您可以用 YaST -> 網路裝置 -> 網路設定 來設定固定位址

或您的 ip 分享器可以將 DHCP 的租約改成永遠

若您的電腦 ip 為 192.168.2.100

其他在區域網路中的電腦則是 192.168.2.* (其他)

我們可以輕鬆完成分享

在 分享印表機 的分頁,點選 允許遠端存取

並將允許範圍定為 192.168.2.*

並選擇公佈印表機

既然要提供服務,就得將對應的窗口打開

從 YaST -> 保全性及使用者 -> 防火牆 -> 允許的服務

選擇 通用 Unix 列印系統(cups) (openSUSE 11.2 才有這個選項)

按 新增,來允許打開相對應的埠

若是 openSUSE 11.3 的系統,則需要手動設定

在 允許的服務 -> 進階 開啟 TCP UDP 631 埠

關於 cups 服務的防火牆開啟

在郵件列表中有一串討論,請參考一下

http://linux.derkeiler.com/Mailing-Lists/SuSE/2010-07/msg01386.html


客戶端: openSUSE 11.3

由 YaST -> 硬體 -> 印表機 選擇 經由網路列印

勾選 Accept Printer Announcements from CUPS Servers (允許接受由 CUPS 伺服器公佈的印表機)

以及 Request Printer Informations from CUPS Servers (由 CUPS 伺服器要求印表機資訊)

並指定您的印表機所在的伺服器 ip 位址(在此就是 192.168.2.100)

按下確定,就會自動偵測

可能會出現一個提示,請您打開 UDP 631 埠,請到防火牆部份開啟





完成之後,您就會多出一台印表機,印看看是否正常

注意:當印表機所在電腦沒有開機時,你就會看不到這印表機

但是印表機所在電腦開機後,印表機就會出現了


客戶端: Windows XP 和 Vista

在這裡我們要直接使用 CUPS 的網路列印功能

而不使用 samba 分享

這樣 openSUSE 主機就可以不用開啟 samba 服務

當然,若您的 openSUSE 主機已經有 samba 伺服器的設定

也可以使用 samba 來分享

在進行下一步之前

連接印表機的 openSUSE 主機必須做以下設定

編輯 /etc/cups/mime.convs 與 /etc/cups/mime.types

將有 application/octet-stream 的那行最前面的 # (註解)取消

/etc/cups/mime.convs

########################################################################

#

# Raw filter...

#

# Uncomment the following filter to allow printing of arbitrary files

# without the -oraw option.

#

application/octet-stream application/vnd.cups-raw 0 -

#

# End of "$Id: mime.convs.in 8676 2009-05-22 19:30:50Z mike $".

#

/etc/cups/mime.types

########################################################################

#

# Raw print file support...

#

# Comment the following type to prevent raw file printing.

#

application/octet-stream

#

# End of "$Id: mime.types 6649 2007-07-11 21:46:42Z mike $".

#

接著到您的 windows 的印表機設定中

增加一台網路印表機

在 URL 中輸入

http://{印表機伺服器的 ip 位址}:631/printers/{印表機名稱}

在我的例子中就是

http://192.168.2.100:631/printers/hpdeskjetd2600series

接著選擇驅動程式(當然您得先將印表機的 windows 驅動程式裝好)

依您的需要看是否要設定成預設印表機

按下完成,就 OK 了

所以只要您連接印表機的電腦開啟到 openSUSE(不用登入沒關係)

家裡的其他電腦就可以用印表機了


週四
12 八月, 2010


face
20100812 PHP-MySQL-CLASS 8

mysqldump 及 mysql 之 匯出入指令, 若是SQL 檔案, 不須登入 MySQL 就可以操作.

將 class8 內的 pcschool.sql 匯入到 pcschool 資料庫

mysql    -uroot   -pphpmysql     pcschool   <    pcschool2.sql
請注意檔案的路徑 需要切換到該檔案pcschool2.sql 存放的目錄

建立一個 Netbean 的PHP 專案 class8
建立新專案
File → New Project
PHP: PHP Application → Next
點選 Browse 按鈕 建立一個 class8 資料夾( source 按鈕調整於 C:\Appserv\www 目錄下 [網站根目錄] )
Finish
將相關檔案複製到 class8 資料夾

Lab: 測試接收資料

phptestint.php 檔案內容如下

<html>
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>測試接收資料</title></head><body><?
$pid=$_GET['id'];
if (strlen($pid)){
if (!ereg("^[0-9]+$",$pid)){
  die("你不知道什麼是數字嗎?");
  }
else
  die("很好.這是數字");
 }
else{
 die("請輸入資料");
}

?></body></html>

針對以上的檔案
  • 可使用 strlen(  ) 函數分析網址列是否傳遞參數, 及參數的長度
  • if(!ereg(“規則”, $pid))
    • !  為相反
    • ereg  $pid 是否符合 ( ) 內的規則


mysql_query(  )  or  die(mysql_error());
  1. mysql_query(  ) 執行 SQL 語法
  2. mysql_query(  ) 異常則會執行 or 之後的語法
  3. mysql_query(  ) 異常指 SQL 語法本身就有問題
  4. mysql_error(  )  顯示錯誤訊息
  5. die(  )  顯示訊息後停止執行網頁, 若不想顯示系統訊息,  可改為 die(“其他文字”)


一般常見的語法問題
  • 字串資料沒加 單引號
    • MySQL的資料本身就是要加單引號, 請不要把 php 對單雙引號的處理方式帶入 SQL 語法
  • 欄位數量不對
  • 少了空格
    • 例如  insert  into


create  table  新資料表  select  A資料表資料
  • 由A資料表資料建立新資料表資料


Lab: 由 phpMyAdmin 的 SQL 功能內輸入 下列指令建立資料表

create table insertemployees select * from employees;
create table insertjob select * from job;
create table updateemployees1 select * from employees;
create table updateemployees2 select * from employees;
create table updateemployees3 select * from employees;
create table updatejob select * from job;
create table updateproducts select * from products;
create table delemployees1 select * from employees;
create table delemployees2 select * from employees;
create table delemployees3 select * from employees;
create table deljob select * from job;

執行結果如下





新增資料
  • 若沒有欄位名稱
    • insert  into  資料表  values( 內容一, 內容二 );
    • 必須列出所有欄位內容, 沒有內容請用 ’  ‘
    • 所有欄位須依資料表內順序排列
  • 若有欄位名稱
    • insert  into  資料表(欄位一, 欄位二)  values( 內容一, 內容二 );
    • 不須依資料表內順序排列



Notes:
  • 當 MySQL 執行 insert into ( 新增 ), 刪除 ( delete ), 更新 ( update ) 等動作, 是不會顯示資料列表
    • 若要顯示資料表列, 必須使用 select 語法

  • mysql_query(  ) 一次只能執行一 個 SQL 語法
    • php5 另外提供 mysqli 函數, 可執行多個 SQL  語法



Q: 為何 php 可以跑, MySQL 可以跑, 但 php 無法連線至 MySQL?

A: 請寫一個網頁
<?
phpinfo();
?>
查看 MySQL 模組是否存在


**MySQL 連接過程整理

1.連接 MySQL Server
mysql_connect(  )

2.挑選資料庫
mysql_select_db(  )

3.編碼設定

以上三個步驟可以參考 server.php 內容

<?
mysql_connect("localhost", "root", "phpmysql") or die("無法連結主機");
mysql_select_db("pcschool") or die("無法連結資料庫");
include("unicode.php");
?>

unicode.php 內容如下(設定編碼)

<?
mysql_query("SET NAMES utf8");
mysql_query("CHARACTER SET utf8");
mysql_query("SET CHARACTER_SET_CLIENT =utf8");
mysql_query("SET COLLATION_CONNECTION=utf8_general_ci");
mysql_query("SET CHARACTER_SET_RESULTS =utf8");
mysql_query("SET CHARACTER_SET_SERVER = utf8");
mysql_query("SET character_set_connection=utf8");
?>

4.執行 SQL 語法
mysql_query(  )
  • 若是 insert into, delete, update, 執行完成 mysql_query(  ) 後資料表就改變
  • 若是 select 查詢, 可以顯示資料


5.將 mysql_query(  ) 執行結果儲存於自訂變數
  • 若不儲存, 無法做後續利用


6-1 mysql_num_row(  ) 計算筆數


Lab: 計算筆數

mysql_num_rows.php 內容如下

<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>計算筆數</title></head><body><?
@mysql_connect("localhost", "pcschool", "phpmysql") or die("無法連結主機");
@mysql_select_db("pcschool") or die("無法連結資料庫");
include("unicode.php");
$abc="select username from list";
echo $abc."<br>";
$sql =  mysql_query($abc) or die(mysql_error( ));;
$rows = mysql_num_rows($sql);
if($rows==""){
    echo "查無資料!";
}else{ echo "有 ".$rows." 筆資料喔!";}
?></body></html>

6-2 mysql_fetch_array(  )   回傳欄位資料
  • 回傳的資料丟給陣列變數儲存
    • 例如 $list1=mysql_fetch_array( mysql_query()儲存值 );
  • 陣列變數內儲存該筆紀錄的各欄位資料
    • 例如 $list1[‘OrderID’]


-- class end --

Ray Chen: 輸入 degree sign °

12:16 UTCmember

face

就是這個符號 ° (U+00B0)
用來代表 360 度制中的角度,例如:垂直就是 90°

非 Linux 作業系統中,可以按著 Alt 輸入 0176 ,但是一定要按數字鍵盤上的數字
若您使用英文字母上方的數字鍵是無效的
可惜不能在 Linux 上使用

若使用 gcin 輸入法,可切換到內碼輸入法,輸入 0000B0

在 KDE 或 GNOME 中都有相對應的字元選擇工具
在 KDE 中叫 "KDE 字元選擇"(kcharselect)
在選單中選擇或在終端機中輸入 kcharselect 即可呼叫
您也可以找到這可愛符號

在 OpenOffice.org Writer (文書處理)中,可以由 插入->特殊字元 來找

在 OpenOffice.org Math (公式)中,當然可以用以上方法複製貼上這個字元
但是我覺得用 circle{} 還蠻好看的
(這個函數是用在字母上打個圓圈,如果您在{}中有文字的話)


face

KDE於前日釋出了 4.5.0 的版本了,相關新聞有興趣的朋友可以自行查閱,而 OpenSUSE 11.3 雖然是內建 KDE 4.4.4 版本,若是各位與我一樣希望快點體驗 4.5.0 的新功能與修正Bug後的狀況時,可以利用下列方式加入 Factory 套件庫來進行升級。

zypper ar http://download.opensuse.org/repositories/KDE:/Distro:/Factory/openSUSE_11.3/ KDE45_Core
zypper ar http://download.opensuse.org/repositories/KDE:/Extra/openSUSE_11.3_KDE_Distro_Factory/ KDE45_Extra
zypper ar http://download.opensuse.org/repositories/KDE:/Unstable:/Playground/openSUSE_11.3_KDE_Distro_Factory/ KDE45_UN

sudo zypper up -t package -r KDE45_Core -y

升級後的 4.5 對小弟而言馬上感受到的體會就是,終於外接螢幕不會再把主畫面給我移到外接螢幕上了 ^^" 其他功能還在持續測試中,有興趣的朋友可以升級看看 ^^


週二
10 八月, 2010


face
20100810 PHP-MySQL-CLSS 7

*了解欄位型態之差異 

請利用 phpMyAdmin  建立資料表

資料表名稱 test1

欄位名稱 型態 長度
a VARCHAR 10
b TEXT 300
c INT 4
d BLOB
f Date

練習
請在 phpMyAdmin 上按 " 新增 ” 
  • a欄位 請輸入 十個  中文字
  • c欄位 請輸入英文字
  • d欄位 請選擇檔案
  • f 欄位 請輸入日期


因為輸入的 Value 與規範的型態不符合, 就會出現錯誤訊息

利用 ”載入”功能 匯入 pcschool 資料庫


Q: 為何 php 設定檔案上傳容量很大, 但 phpMyAdmin 卻沒辦法將資料載入系統?

A: 因為 Apache 在等待檔案上傳時, 有時間限制(預設 300 秒), 若超過預設時間, 則視為斷線(但是如果把 Apache 的 Timeout 設定延長, 將增加Apache 執行的負擔)


Lab: 利用指令匯出 MySQL

*mysqldump: 將資料匯出
  • mysqldump  -u帳號   -p密碼   資料庫   >   SQL  檔案
    • 將資料庫內容及結構匯出
  • 加上 --skip-opt  參數, 可將資料分行
    • mysqldump  -u帳號   -p密碼   --skip-opt  資料庫   >   SQL  檔案
  • 資料庫名稱之後可接資料表名稱,  例如 mysqldump  -u帳號  -p密碼
  • --no-data 參數, 沒有資料表內容
  • --no-create-info 沒有資料表結構
  • 雖然 mysqldump 可以加入 -B 加入 " 建立資料庫 ” 語法 但匯入資料時若資料庫不存在,  將無法匯入資料
    • -B 參數不實用, 建議匯入資料前先建立資料庫


以指令方式 登入 mysql
開啟 命令提示字元
開始 --> 執行 --> cmd

以下在命令提示底下操作
備份 pcschool
mysqldump  -uroot  -pphpmysql   pcschool   >   pcschool.sql

備份 pcschool 資料庫並將資料分行
mysqldump  -uroot  -pphpmysql   --skip-opt   pcschool  >   pcschool2.sql

備份 pcschool 資料庫內的student 資料表
mysqldump -uroot -pphpmysql pcschool student > pcschool3.sql

備份 pcschool 資料庫內的student 資料表 及 job  資料表
mysqldump  -uroot  -pphpmysql  pcschool  student  job >  pcschool5.sql

備份 pcschool 不包含資料
mysqldump  -uroot  -pphpmysql  --no-data  pcschool  >  pcschool6.sql

備份 pcschool 不包含資料表結構
mysqldump  -uroot  -pphpmysql  --no-create-info   pcschool  >  pcschool7.sql

備份 pcschool 不包含資料表結構並換行
mysqldump  -uroot  -pphpmysql  --skip-opt  --no-create-info   pcschool  >  pcschool8.sql


SQL  指令
  •  select    欄位名稱( 沒有則使用 * )  from  資料表
    • 查詢指定欄位(或是所有的欄位)的資料
    • 若欄位前面加上  distinct  代表過濾重複的資料
  • As 將欄位或查詢結果以其他名稱命名
    • MySQL 的 SQL 語法內可作數值計算
    • MySQL 的 Concat 函數可合併多個字串


在 phpMyAdmin 內新增 counter 資料庫( 需要先新增資料庫才能匯入 Orz...... )

首先嘗試使用 圖形介面匯入
得到的結果是 ............   Timeout
所以採取指令的方式 匯入
mysql   -uroot   -pphpmysql   counter  <  record2009.sql




Lab: 新增帳號
  1. 請以 root 身份登入 MySQL
  2. 語法  grant  權限   on   資料庫.資料表   to   帳號@主機   identified   by  ‘密碼 ‘


以指令方式 登入 mysql
開啟 命令提示字元
開始 --> 執行 --> cmd

以下在命令提示底下操作

mysql   -uroot   -pphpmysql

grant   all   privileges   on   *.  to    pcschool@localhost    identified    by    'phpmysql';

grant   all    privileges  on    board.*    to    php1@localhost    identified    by    'mysqlstart1';

grant    select    on    board2.*    to    php3@localhost    identified    by    'mysqlstart3';

登入 phpMyAdmin 測試


php 連接至 MySQL
  • 連接至 MySQL Server
    • mysql_connect( host, username, password )
  • 挑選資料庫
    • mysql_select_db( ‘資料庫' );




建立一個 Netbean 的PHP 專案 class7
建立新專案
File → New Project
PHP: PHP Application → Next
點選 Browse 按鈕 建立一個 class7 資料夾( source 按鈕調整於 C:\Appserv\www 目錄下 [網站根目錄] )
Finish

*當  php 及  MySQL 均是 UTF-8 編碼,  php 與 MySQL 之間的資料傳輸也必須作 編碼設定,  否則會是亂碼 (請參考 unicode.php)


執行 mysqlquery1.php 測試(這樣會出現亂碼)

<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>mysql_query</title></head><body><?
mysql_connect("localhost", "pcschool", "phpmysql") or die("無法連結主機");
mysql_select_db("pcschool") or die("無法連結資料庫");
//include("unicode.php");
//以下新增語法請做練習
//以下兩行為一行
//$sql =  "insert into list (username, email, sex) values('pcschool', ‘quota123@ms14.url.com.tw', '男')";
//$sql =  "insert into list (email, sex) values('quota123@ms14.url.com.tw', '男')";
//$sql =  "insert into list  values('quota123@ms14.url.com.tw','pcschool','男')";
$sql =  "insert into list  values('','pcschool','男')";
mysql_query($sql) or die(mysql_error( ));
?></body></html>



unicode.php 內容如下

<?
mysql_query("SET NAMES utf8");
mysql_query("CHARACTER SET utf8");
mysql_query("SET CHARACTER_SET_CLIENT =utf8");
mysql_query("SET COLLATION_CONNECTION=utf8_general_ci");
mysql_query("SET CHARACTER_SET_RESULTS =utf8");
mysql_query("SET CHARACTER_SET_SERVER = utf8");
mysql_query("SET character_set_connection=utf8"); ?>



測試步驟
  1. mysql_connect(   )   連接Server
  2. mysql_select_db(  )  挑選資料庫
  3. mysql_query(  )  執行 SQL 語法



Q: mysql_query(  ) 內語法錯誤, 網頁畫面會顯示嗎?

A: 不會. 建議 mysql_query( )  之後要接 or  die(mysql_error()) , 若mysql_query(  ) 有問題就會進行 mysql_error( )


-- class end --

週六
07 八月, 2010


face
今天補上 OSSF 舉辦 Hadoop with openSUSE 工作坊相關照片

前一天就事先安裝好的教室環境, 看到都是 openSUSE 加上 Geeko 的滑鼠墊
綠綠一片很開心




再來一張



非常盡責的錄影美女工讀生




我跟威龍在進行最後的調整



這一次的研習, 總共電腦 30 台
但是 因為要一個人兩台電腦, 所以參加人數 16人( 疑?)


OSSF Rock 開場 ^^



認真聽 Rock 開場的美女工讀生


開始介紹 openSUSE, 首先先從 http://software.opensuse.org/search 開始
讓大家了解  OBS 的好處



大家都認真投入(正確無誤)


咦? 連美女工讀生也操作 Hadoop? (大誤)


開始解釋 Hadoop 各個角色的關係


第二階段 威龍上場




解釋 Hadoop 命令語法的 Lisu



下午講 Cluster , 所以大家就更專注



Lisu 側寫



研習完成, 抽獎時間開始 ^^


今天真的很開心, 即使在會後, 大家還是很開心的討論



^^

感謝來參加的朋友
感謝威龍

face
Lab: Nagios 網路監控主機架設

Server
OS: openSUSE 11.3
IP: 192.168.3.128

Linux Client: 192.168.3.130
Windows Client: 192.168.3.129

Part I: Nagios伺服器的建置

Server:
1. 安裝Nagios 套件
server 上面使用 one-click install 安裝 Nagios 套件

Nagios
http://software.opensuse.org/ymp/openSUSE:11.3/standard/nagios.ymp

Nagios Plugins
http://software.opensuse.org/ymp/openSUSE:11.3/standard/nagios-plugins.ymp

Nagios Addons Extras
http://software.opensuse.org/ymp/openSUSE:11.3/standard/nagios-plugins-extras.ymp

2.建立nagiosadmin 密碼
第一次建立密碼的時候 請加上 -c 選項,
新增第二個使用者, 則不需要加上 -c ( 會清空現有的密碼)
請於server 上面
#htpasswd2   -c   /etc/nagios/htpasswd.users   nagiosadmin
輸入密碼
再次輸入

3.建立nagiosuser 密碼
請於server 上面
#htpasswd2   /etc/nagios/htpasswd.users   nagiosuser
輸入密碼
再次輸入

4.檢視並設定開機啟動nagios
#chkconfig  nagios  --list
#chkconfig  nagios  on
#chkconfig  nagios  --list

5.重新啟動.apache2 並設定開機啟動
#rcapache2  restart
#chkconfig   apache2   --list
#chkconfig   apache2   on
#chkconfig   apache2   --list

6.啟動Nagios
#rcnagios   start

7.測試Nagios 主機運作
開啟瀏覽器 於 URL上面輸入 http://127.0.0.1/nagios/
會出現需要授權的視窗
請輸入
使用者名稱 nagiosadmin
密碼 之前設定的密碼



這個時候應該會出現 Nagios 的相關畫面

如下圖所示
可以觀察相關服務狀況
此時會發現 HTTP 呈現警告狀態
原因為 Apache2 有啟動但是沒有預設的網頁
要解除這個情形可以 建立一個預設網頁
#vi   /srv/www/htdocs/index.html
加入
<html> It works ! </html>


受監控的相關主機都會被紀錄在 /etc/nagios/nagios.cfg
Linux 的本機的監控設定也是設定於 /etc/nagios/nagios.cfg 內的
# Definitions for monitoring the local (Linux) host
cfg_file=/etc/nagios/objects/localhost.cfg

故可以得知之後要監控的主機,
相關的設定檔都要放在 /etc/nagios/objects 資料夾內,
且於/etc/nagios/nagios.cfg 要有cfg_file=xxxx.cfg的設定


另外如果要檢視 Nagios 設定有沒有問題
可以使用
#nagios  -v   /etc/nagios/nagios.cfg

來觀察匯入那些設定檔, 以及有沒有問題
更多的文件也可以參考這邊

http://wiki.nagios.org/index.php/Main_Page

**修改通知 e-mail **
# vi /etc/nagios/objects/contacts.cfg
修改預設的  e-mail
define contact{
       contact_name    nagiosadmi    ; Short name of user
       use    generic-contact         ; Inherit default values from generic-contact template (defined above)
       alias       Nagios Admin            ; Full name of user
       email  sakana@study-area.org ; <<***** CHANGE THIS TO YOUR EMAIL ADDRESS ******
       }

檢視 Nagios 設定有沒有問題
#nagios  -v   /etc/nagios/nagios.cfg

重新啟動 Nagios
#rcnagios   restart

**以上 Nagios 伺服器建置完成**


Part II: Nagios 用戶端-- Linux 伺服器用戶端建置

1.安裝 nagios-nrpe套件

請於Client端啟動 YaST 軟體管理

#yast2  sw_single

並搜尋 nrpe 應該就會看到
nagios-nrpe 套件
nagios-plugins-nrpe 套件
→ 安裝 → 套用
( 或是考慮使用 #yast  -i  nagios-nrpe  nagios-plugins-nrpe)
(根據官方的說法是 相較於 check_by_ssh 的方式比較省資源)

2.設定nagios-nrpe 套件
(另外最好去確認 /etc/services 有沒有 nrpe 5666/tcp # nagios nrpe 的設定)
#grep  5666  /etc/services

修改設定檔 允許 Nagios 伺服器連線
# vi  /etc/nagios/nrpe.cfg

allowed_hosts=127.0.0.1,192.168.3.128

這邊要注意 127.0.0.1後面要加上 逗點 , 然後主機 IP 不能有空格
不然會出現沒有辦法建立 SSL HandShake
(這個部份可以解釋, 如果nrpe是使用 SystemV 的形式啟動後面都會出現不能建立SSL Handshake ,但是以Xinetd 就不會)

#rcnrpe   start


4.測試nagios-nrpe
設定完成之後 可以於本機及遠端測試

請於Client
執行 check_nrpe 測試, 成功應該會出現 NRPE的版本
# /usr/lib/nagios/plugins/check_nrpe   -H   localhost
NRPE v2.12

*************************************************************
請於 Server
安裝 nagios-nrpe 套件
#yast  -i  nagios-nrpe
#yast  -i  nagios-plugins-nrpe

針對 nagios client 測試 nagios-nrpe 成功應該會出現 NRPE的版本
#/usr/lib/nagios/plugins/check_nrpe  -H  192.168.3.130
NRPE v2.12

*************************************************************
接下來來測試本機相關資訊
請於 Client
執行相關測試
線上使用者人數
#/usr/lib/nagios/plugins/check_nrpe -H localhost -c check_users

平均負載
#/usr/lib/nagios/plugins/check_nrpe -H localhost -c check_load

目前使用的process
#/usr/lib/nagios/plugins/check_nrpe -H localhost -c check_total_procs

Zombie Process
#/usr/lib/nagios/plugins/check_nrpe -H localhost -c check_zombie_procs

磁碟狀況
#/usr/lib/nagios/plugins/check_nrpe -H localhost -c check_hda1
(這個部份command[check_hda1]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /dev/hda1
因為現在 IDE的硬碟以及使用 Kernel 2.6.20 以前的主機越來越少, 所以應該是對應到 /dev/sda1)
故可以修改 /etc/nagios/nrpe.cfg 內的 command 對應
(複製原來的 hda1 改為要監控的 Partition)

#vi   /etc/nagios/nrpe.cfg
#command[check_hda1]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /dev/hda1
command[check_sda2]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /dev/sda2
command[check_sda3]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /dev/sda3
command[check_ssh]=/usr/lib/nagios/plugins/check_ssh   localhost
command[check_smtp]=/usr/lib/nagios/plugins/check_smtp  localhost

(針對想要加入的指令 可以參考 /usr/lib/nagios/plugins 目錄)

重新啟動 nrpe 服務( 修改完 /etc/nagios/nrpe.cfg 請記得重新啟動服務)
#rcnrpe  restart

週四
05 八月, 2010


face
20100805 PHP-MySQL 上課小記 - CLASS 6

資料庫
  1. 能以快速及正確的進行資料新增, 刪除, 更新與查詢
  2. 分成  server 型及 檔案型
    1. MySQL, MS SQL, Oracle 是 Server 型
    2. Access, Foxpro 是檔案型
  3. Access 限制: 最多允許 20 個連線
  4. MS SQL express 版限制: 資料庫不能大於 4G, 且只能使用 1 個 CPU
  5. MySQL 有一個最大權限帳號: root
    1. root 與 Linux 的 root不同
    2. root 具有帳號管理權限, 密碼勿外流
    3. Appserv 要求 MySQL root 要有密碼, Linux 還能 root 不設定密碼
    4. phpmyadmin 是一套 free  MySQL 管理系統 ( 網頁形式)(建議使用 2.6 版以後, 有連線校對功能, 舊的版本 只支援 MySQL4 )


以網頁的方式管理 MySQL
http://localhost
帳號: root
密碼: phpmysql   ( 當初安裝時設定 )

Q: 如何登入MySQL?
A:
  • mysql  -u帳號  -p密碼
    • 此種方式會顯示密碼, 所以不建議
  • mysql  -u帳號  -p
    • 會提示輸入密碼


以指令方式 登入 mysql
開啟 命令提示字元
開始 --> 執行 --> cmd

以下在命令提示底下操作
mysql  -u root  -p      
輸入密碼
(如果要一次輸入, 可以改為 mysql  -uroot  -pphpmysql 中間不能空格, 但是不建議, 因為會出現密碼)
( 如果使用  mysql  -u root  -p  phpmysql 會被認為是指定  phpmysql 這個資料庫來登入)  
在 MySQL 底下的指令必須以 ; 分號結束, 指令不分大小寫
顯示資料庫
show databases;
使用 mysql 資料庫
use  mysql;
顯示 mysql 資料庫 的 tables
show tables from mysql;
顯示 tables
show tables;
顯示 db 表格的欄位
show columns from db from mysql;
建立 pcschooldb 資料庫
create database pcschooldb;
顯示資料庫
show databases;
刪除 pcschooldb 資料庫
drop database pcschooldb;

MySQL 指令:
  1. 不分大小寫
  2. 每一行結束要加上 ;
  3. 可使用 上下游標控制按鍵瀏覽指令歷史


**補充 在windows 下 MySQL 密碼忘記的處理方式**
1.請將mysql server shutdown。若是windows,請察看工作管理員內「處理程序」是否仍有mysqld-nt程式存在。
2.開啟終端機,輸入mysqld-nt  -u  root   --skip-grant-tables &
3.請另外開啟終端機,輸入 mysql enter(因為忽略權限資料表,所以此時不需輸入帳號密碼)
4.輸入 use  mysql; (使用mysql資料庫,請記得後面的;
5.輸入update  user  set  password=password('phpmysql')  where  user='root'; (變更root密碼為phpmysql
6.輸入flush   privileges;(將立即更新,若無輸入此行,則當您重新啟動mysql才會更新)
7.輸入exit;(離開mysql畫面)
8.請將mysqld-nt關閉,若是windows,請察看工作管理員內「處理程序」是否仍有mysqld-nt程式存在。
9.重新啟動mysql server
10.測試密碼: mysql -uroot -p



Lab: 資料庫設計
( 先建立 pcschool 的資料庫 )
以指令方式 登入 mysql
開啟 命令提示字元
開始 --> 執行 --> cmd

以下在命令提示底下操作
mysql  -u root  -p      
輸入密碼

建立 pcschooldb 資料庫
create database pcschool;

利用 網頁的方式建立 gbook 資料表

http://localhost
使用 root 密碼 phpmysql 登入
選取 pcschool 資料庫, 輸入 gbook -->  輸入欄位數目 6 --> 點選執行
依照以下需求建立資料表
例如我現在想要在「pcschool」內建立一個「gbook」資料表,這個資料表內所需要的欄位如下:

欄位名稱欄位大小與類型預設值屬性
yournamevarchar(20) not null
youremailvarchar(25) not null
Ipchar(15) not null
ctimedatetime not null
boardtitlevarchar(20) not null
contenttext not null



根據需求資料表 輸入指定的欄位名稱 及 型態 以及長度 --> 點選 儲存

*char  vs  varchar
  • char 是固定欄位大小
  • varchar 是可變動欄位大小
  • 兩種型式均是針對小於 255 個字的資料進行欄位設計的型式.


Notes:
  • 建立資料表時需確定欄位數目
  • 當資料刪除後, phpmyadmin 的資料表, 可以檢視 ”結構” 標籤下方的 ”已使用空間” 會多出了一個多餘
    • 請經常執行 ” 最佳化資料表 ” 降低資料庫變慢或損壞風險


索引 (index):
  • 如同書本內加入書籤, 可加快搜尋速度, 但不是每一個欄位均要加上索引.


主鍵(Primary):
  1. 資料不可以重覆
  2. 內容不可以空白
  3. 一個資料表只能有一個
  4. 作為資料辨識身分之用
  5. 規劃資料表時就做規劃, 勿等已有資料才設計主鍵


Unique:
  • 若多個欄位的內容不可在另外一筆紀錄出現, 可作此索引規劃


索引視窗內 ”組別”, 代表目前有幾組紀錄符合這個索引設計

Lab: 匯入資料表

利用 phpmyadmin 將 student_create_table.sql 匯入
點選瀏覽, 選取要匯入的資料庫 --> 執行

MySQL 資料匯出與匯入
  1. 以 php 與 mysql 管理者來說,  sql 檔案操作較方便
  2. phpadmin 內可匯出為 CSV 檔案, 但 excel 2007 (含) 之前版本無法開啟 utf-8 碼 CSV 檔案
  3. 若要將 SQL 檔案匯入至 UTF-8 編碼的資料表, SQL 檔案本身必須為 UTF-8 編碼, 不然會有亂碼的問題
  4. CSV 檔案可以先使用 Notepad++ 轉換至 ANSI 編碼, 讓 excel 可以開啟( 但是 UTF-8 轉 ANSI 可能會漏字)
 

週三
04 八月, 2010


face

安裝完 VMWare 於 openSUSE 11.3
安裝過程一切正常
但是卻在重新開機之後, 發生找不到 vmmon 模組的錯誤訊息

手動掛載之後, 又出現找不到 vmci 的錯誤訊息
所以當下就去找相關資訊 ( 因為網卡也不能啟動 )
所以當下就想試試看 移除後重新安裝

但是在 #yast2  sw_single 沒有看到 VMWare 套件
所以只能手動移除

方式為
#vmware-installer   -u   vmware-產品類別


可以使用 #vmware-installer  -l  列出安裝的產品

# vmware-installer -l
Product Name           Product Version     
====================== ====================

重新安裝之後, 目前正常(尚未重新開機)

所以先把相關 module 記錄下來
以方便之後手動掛載模組


# lsmod | grep vm
vmnet                  53220  21 
vmblock                14435  1 
vmci                   66790  2 vsock
vmmon                  88159  8 

^^

---------------------------------------------------------------

重新開機之後還是沒有掛載模組
所以採取手動掛載的方式
#modprobe  vmnet
#modprobe  vmblock
#modprobe  vmci
#modprobe  vmmon

重新啟動  vmware 使其生效

#/etc/init.d/vmware    restart

OK !!

face

自從 Notebook 換了 SSD 之後, 使用的空間大小就是必須注意的事項
之前就有注意到 VMWare 內的作業系統硬碟使用量, 與實體主機的硬碟使用量
差距有到 2 到3倍之多, 以 Windows XP 為例
在VMWare 內使用空間 9.x GB
外面的實體主機來看, 佔用空間 29.6 GB

使用內建的 Impact 功能也沒有效用
找了一下網路上的資料

http://allen080.blogspot.com/2006/12/vmwarevirtual-pc.html

有提到方式, 試了一下果然有效 (縮減為 10.1 GB)
所以先記起來 ^__^

方式為

  1. 於 Guest OS 安裝 VMWare Tools
  2. 關閉 Guest OS, 使用 Defragment
  3. 開啟  Guest OS, 於VMWare Tool  中的Shirk 標籤進行 Shirk

enjoy it ~~

週二
03 八月, 2010


face
20100803 PHP-MySQL 上課小記-Class 5

Session 與 Cookie 的比較

session
  • 儲存位置
    • 在瀏覽器視窗
    • server
  • 保存期限
    • 預設瀏覽器關閉則清除( 但 server 檔案預設會暫時保存)
  • 限制
    • Server 端若空間不足 或是 資源不足, 將無法產生 session



cookie
  • 儲存位置
    • 使用者端以檔案方式儲存
  • 保存期限
    • 依照cookie設定
    • 依照瀏覽器設定
  • 限制
    • 使用者提高瀏覽器安全性
    • 該瀏覽器可儲存的 cookie 數目已滿, 無法再儲存



建立一個 Netbean 的PHP 專案 class5
建立新專案
File → New Project
PHP: PHP Application → Next
點選 Browse 按鈕 建立一個 class5 資料夾( source 按鈕調整於 C:\Appserv\www 目錄下 [網站根目錄] )
Finish

將\\PC1 上面預先準備好的資料 複製到 C:\Appserv\www\class5 下面

Lab: 觀察 cookie

執行 cookie1.php 以及 cookie2.php 觀察

cookie1.php 內容如下

<?ob_start();?>
<html><head><meta http-equiv="content-type" content="text/html;charset=utf-8"> <title>儲存Cookie</title></head> <body><?  
setcookie("a", "php", time()+1800);//1800代表1800秒
 echo '<a href="cookie2.php">查詢Cookies</a><br>';  echo '<a href="cookie3.php">刪除1</a><br>';  echo '<a href="cookie4.php">刪除2</a><br>';

 ?></body></html>




cookie2.php 內容如下

<html><head><meta http-equiv="content-type" content="text/html;charset=utf-8">
<title>顯示Cookie</title></head> <body><?
if (isset($_COOKIE["a"]))
  echo "cookie內容為".$_COOKIE["a"];    else       echo "沒有資料";  echo '<br><a href="cookie1.php">建立Cookies</a><br>';  echo '<a href="cookie3.php">刪除1</a><br>';  echo '<a href="cookie4.php">刪除2</a><br>';

 ?></body></html>


cookie
  • setcookie(  ) 內有 6 個參數, 一般設定為前面 3 個即可.
  • setcookie(a,b,c)
    • a: 變數名稱
    • b: 變數內容
    • c: 保存期限
  • cookie 變數如何消失?
    • 逾時
    • 變數沒有內容


刪除 cookie (時間到期)
執行 cookie3.php

cookie3.php 內容如下

<?ob_start();?>
<html><head><meta http-equiv="content-type" content="text/html;charset=utf-8">
<title>刪除Cookie</title></head>
<body><?
setcookie("a","php",time()-1800);
 echo '<a href="cookie1.php">建立Cookies</a><br>';
 echo '<a href="cookie2.php">查詢Cookies</a><br>';
 echo '<a href="cookie4.php">刪除2</a><br>';
 ?></body></html>

刪除 cookie (變數沒有內容)

執行 cookie4.php 來觀察cookie4.php 來觀察

cookcookie4.php 內容如下

<?ob_start();?>
<html><head><meta http-equiv="content-type" content="text/html;charset=utf-8">
<title>刪除Cookie2</title></head>
<body><?
       setcookie("a","",time()+1800);
 echo '<a href="cookie1.php">建立Cookies</a><br>';
 echo '<a href="cookie3.php">刪除1</a><br>';
 echo '<a href="cookie2.php">查詢Cookies</a><br>';
 ?></body></html>

Notes:
  • time()
    • server 目前的時間(以秒為單位)
  • 因瀏覽器會優先讀取暫存資料, 所以請重新整理頁面, 才能看到正確資訊(有些user可能出現此問題, 須提醒他們重新整理頁面)
  • mktime(時,分,秒,月,日,年)
    • 設定時間值為 1970年1月1日至今的秒數(該日為 Unix 誕生日子)
  • date(  )
    • 抓取現在 server 的年月日時分秒, 時區等資料
    • 日期時間格式化
    • 抓取現在 server 日期, 時間


Lab: cookie 綜合練習

練習 cookie 與時間

顯示目前的時間, 以及將時間存入陣列
showcokie1.php 內容如下

<?ob_start();?>
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title> cookies設定綜合練習</title></head><body>
<?$tomorrow  = mktime (0,0,0,date("m"),date("d")+1,date("Y"));  //mktime
 $nextmonth = mktime (0,0,0,date("m")+1,date("d"),date("Y"));
 $nextyear  = mktime (0,0,0,date("m"),date("d"),date("Y")+1);  
 $yourname="第6個cookie,Cookie變數的內容由變數取得資料";
 $testtime=mktime(0,0,0,7,13,2010);   
 setcookie ("a[0]","設定保存1800秒", time()+1800);
 setcookie ("a[1]","設定保存至2010年7月13日",$testtime);
 setcookie ("a[2]","設定保存至明天",$tomorrow);
 setcookie ("a[3]","設定保存至下一個月",$nextmonth);
 setcookie ("a[4]","設定保存至明年",$nextyear);
 setcookie("a[5]","$yourname",time()+1800);
 $tomorrow=mktime();
 echo "現在時間: ".date("Y-m-d",$tomorrow);
 echo "<br>";
 echo '<a href="showcokie2.php">查詢Cookies</a>';
?></body></html>

使用 for 迴圈觀察 cookie

showcokie2.php 內容如下

<?ob_start();?>
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title> cookies設定綜合練習查詢</title></head><body><?
 $value1=$_COOKIE["a"];
 $tomorrow=mktime();
 echo "現在時間: ".date("Y-m-d",$tomorrow)."<br>";
 echo "第1的內容為設定保存1800秒<br>";
 echo "第2的內容為設定保存至2010年7月13日<br>";
 echo "第3的內容為設定保存至明天<br>";
 echo "第4的內容為設定保存至下一個月<br>";
 echo "第5的內容為設定保存至明年<br><br>";
 for($for1=0;$for1<5;$for1++)
   {
    $a=$for1+1;
    echo "第".$a."的內容為".$value1[$for1]."<br>";
   }
 //補充
 echo '<a href="showcokie1.php">重新建立Cookies</a><br>';
 echo '<a href="showcokie3.php">刪除幾個Cookies</a><br>';  
?></body></html>


顯示 cookie的內容
showcokie3.php 內容如下

<?ob_start();?>
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title> cookies設定綜合練習刪除</title></head><body><?
  echo "設定保存1800秒,現在減1800秒"."<br>";
  echo

face

有時候安裝完 openSUSE Linux
套件庫預設是去抓 software.opensuse.org 的套件庫

有時候連線的速度很慢, 所以就寫了一個懶人的 script 來更換台灣這邊的套件庫

目前 openSUSE 11.3  高品質學術網路還沒有 sync, 所以先用原來的套件庫

shell script 內容如下


#!/bin/bash
echo "Print the rep  in use"
zypper  lr -u


#Define openSUSE Version
VERSION=`cat /etc/SuSE-release | grep VERSION | cut -d ' ' -f 3`
echo "This openSUSE version is $VERSION"


echo "Remove Ori Rep"
zypper rr 1
zypper rr 1
zypper rr 1
zypper rr 1
zypper rr 1
zypper rr 1


echo "Add Taiwan's rep "


## for OSS
zypper ar -f http://ftp.twaren.net/Linux/OpenSuSE/distribution/$VERSION/repo/oss/  Twaren-Oss
#zypper ar -f http://download.opensuse.org/distribution/$VERSION/repo/non-oss/ suse_non-oss
#zypper ar -f http://ftp.ncnu.edu.tw/Linux/opensuse/distribution/$VERSION/repo/non-oss/ ncnu_non-oss


## for Non-OSS
#zypper ar -f http://ftp.cse.yzu.edu.tw/pub/Linux/openSUSE/distribution/$VERSION/repo/non-oss/  cse_non-oss
zypper ar -f http://ftp.twaren.net/Linux/OpenSuSE/distribution/$VERSION/repo/non-oss/ Twaren-Non-oss


## for update
#zypper ar http://ftp.twaren.net/Linux/OpenSuSE/update/$VERSION/repodata/  twaren_update
zypper ar -f http://ftp.twaren.net/Linux/OpenSuSE/update/$VERSION/  Twaren-Update
#zypper ar -f http://download.opensuse.org/update/$VERSION/  suse_update


## for Pacman Rep
zypper ar -f http://ftp.nchc.org.tw/Linux/Packman/suse/$VERSION/ NCHC-Pacman
#zypper ar -f http://ftp.twaren.net/Linux/Packman/suse/$VERSION/ twaren_packman



先記下來  ︿︿
以後在新的電腦, 複製貼上來執行即可

enjoy it ~

face

從openSUSE 11.3 開始, 開始決定使用 64 位元版本
很早以前( 五年多前吧 ^^|| )有安裝過 32 位元的 Linux 作業系統,
但是因為套件對 64 位元的支援度不佳, 後來就放棄

現在由於 Notebook 的記憶體都有 4GB 了
64 位元的套件也比較普及了
所以這次就開始使用 64 位元的套件

把一些額外安裝的套件記下來

OS: openSUSE 11.3 with Gnome


額外安裝的套件

  • Google chrome 瀏覽器
  • xen 虛擬化套件
  • pidgin 聊天軟體
  • freemind 0.9.0 RC8 心智圖編輯工具
  • skype 2.1 由於 skype 沒有 64 位元版本, 所以要安裝 32 位元的套件
    • xorg-x11-libXv-32bit
    • libqt4-32bit 
    • libqt4-x11-32bit 
  • yast2-qt 因為還是習慣 QT 的 YaST 介面, 所以安裝 yast2-qt
  • poedit 修改 .po 翻譯檔案的工具
  • VMWare
    • kernel-desktop-devel 為了要編譯 VMWare Module

目前一切順利 ^^ 除了 skype 是  32 位元的以外

先記下來 ^^

週一
02 八月, 2010


face

openSUSE Edu Li-f-e 11.3 available now!

openSUSE 有Edu 團隊, 一直是我覺得非常貼心的地方

現在 openSUSE Edu Life 11.3 已經可以下載

相關網頁可以參考

http://news.opensuse.org/2010/07/17/opensuse-edu-li-f-e-11-3-available-now/


轉貼部份介紹


openSUSE Education team is very thrilled to announce the availability of openSUSE Edu: Linux for Education(Li-f-e). Li-f-e is built on openSUSE 11.3. The aim of this DVD is to provide complete education and development resources for parents, students, teachers as well as IT admins running labs at educational institutes

It comes bundled with a wealth of softwares carefully selected to meet every need. Educational softwares covering wide range of subjects such as IT, mathematics, chemistry, astronomy, electronics etc catering to students right from preschool to research.

Softwares for graphic designers include GIMP, Inkscape, Blender and more. Office applications to work on pdfs and any office formats including those of the latest MicroSoft Office is included.

If you are a developer or a student wanting to learn programming on Linux platform, there is everything you can hope for in one place: Java, C, C++, Perl, Python, LAMP stack, databases, IDEs, the list goes on…


週日
01 八月, 2010


Ray Chen: openSUSE 11.3 的 LXDE

14:11 UTCmember

face

openSUSE 11.3 已內建了完整的 LXDE 桌面環境
openSUSE LXDE mailing-list: opensuse-lxde@opensuse.org 訂閱
官方 lxde mailing-list: lxde-list@lists.sourceforge.net 訂閱
利用假日又偷偷地將內人的筆電升級到 11.3
可是這台倫飛
(Twinhead 10d,CPU:Intel Pentium M Processor 1.10 GHz,RAM:512 MB,顯示卡: Intel 855GM)
要運行 KDE 4 已經很吃力了
所以改裝了 LXDE (使用 DVD,因為 Live CD 安裝建議要 1GB ram)
因為裝完後發現跑得還蠻順的,所以又裝了 docky

寄件者 openSUSE 11.3

後來我又改裝了老牌的 awn
寄件者 openSUSE 11.3

安裝方法這些 dock 可以用 1-Click
安裝 docky (11.3) from Mono:Community:Do :
安裝 avant-window-navigator(11.3) from packman :
檢查 composite:
您的內容可能跟我不一樣,只要確定 Composite 已啟動即可
# grep Composite /var/log/Xorg.0.log
[ 24.362] (II) NVIDIA(0): Support for GLX with the Damage and Composite X extensions is enabled.

啟動 xcompmgr:
kwin (KDE4), metacity (GNOME) 或 compiz 都有簡單的圖形介面來開啟視窗的 composite 功能
(或自動啟動)
LXDE 使用 openbox 作為視窗管理員,似乎沒有圖形介面方法
您可以使用
$ xcompmgr-autostar on/off

來切換是否在登入時使用視窗的 composite 功能
在這台很弱的電腦上,使用預設的啟動方式會有視窗陰影的殘像
您可以修改 ~/.config/autostart/xcompmgr.desktop 的執行啟動參數
以獲得最佳的表現
用下面的指令來看所能使用的參數
$  xcompmgr --help


如果有些圖示無法顯示,要更新圖示的快取
# gtk-update-icon-cache -f /usr/share/icons/hicolor/


桌面與選單
選單翻譯暫時方案
寄件者 openSUSE 11.3

Firefox
寄件者 openSUSE 11.3

LXDE 的檔案管理員 pcmanfm
pcmanfm 真的很快
寄件者 openSUSE 11.3

可以輕鬆的切換到超級使用者模式,方便使用圖形介面來進行檔案管理
寄件者 openSUSE 11.3

位址列會有底色及警告符號提醒您現在是使用超級使用者模式
寄件者 openSUSE 11.3

使用 totem 播放多媒體
寄件者 openSUSE 11.3

LXDE 控制中心(lxcc)
中文化檔案
LXDM 設定中文翻譯檔
將下載的兩個檔案放在 /usr/share/locale/zh_TW/LC_MESSAGES/ 中即可
(注意副檔名就是 moo,而非 mo)
寄件者 openSUSE 11.3

YaST 控制中心使用 qt 模式
寄件者 openSUSE 11.3

預設不安裝 openSUSE.org,你可以自行安裝
(預設文書工具為 abiword,但在中文處理上比較不聰明,所以還是加裝了 OOo)
寄件者 openSUSE 11.3

網路管理使用 gnome 的 nm-applet
電源管理則使用 xfce4-power-manager
nm-applet 連接需要加密的無線網路時會有無法儲存密碼的問題
暫時的解決方案就是在編輯連線中設定"所有使用者皆可用"
寄件者 openSUSE 11.3

使用 mtpaint 作為螢幕擷取(直接按 PrtSc 即可)和簡易繪圖工具
功能看起來比小畫家還強很多
不過,假期結束,老婆電腦又拿去辦公室了
所以就聊到這裡了

LXDE 真的是不錯的一個桌面環境
openSUSE LXDE 團隊非常用心在整合上
在 Release Note 中還特別說明
LXDE—一個新的桌面環境
LXDE 提供了一個輕量化桌面環境給較舊的或硬體資源有限的過時電腦。
pcmanfm 和 libfm (LXDE 檔案管理員和他的主要函式庫)是以 RC1 版本發行,但將可以在官方更新(穩定版本)時儘速獲得更新。

在這台電腦上所有程式都很順暢
(嗯...玩開心水族箱捲動頁面會延遲,但這是 flash 的問題...)
如果您的電腦配備比我的還好,
您一定會覺得電腦飛起來了

週四
29 七月, 2010


face

前幾天收到周六考過的 Novell CLE 11證書時,有點傻掉,以為是收錯證書了。新版本的配色比前個版本都是白白一片感覺活潑許多 ....


Ray Chen: 最近...

14:14 UTCmember

face

新版的 11.3 Release Note 已經上線,請進行線上更新,然後到 YaST->支援->版本說明中察看

,或直接閱讀 /usr/share/doc/release-notes/openSUSE/RELEASE-NOTES.zh_TW.html (或 rtf 檔)

裏面關於 intel 顯示卡使用 intellegacy 驅動程式的說明:

在 Intel 顯示卡不用 KMS 的話,X伺服器會回歸到 fbdev 驅動程式(intel 驅動程式只支援 KMS);

另一個選擇是 "intellegacy" 驅動程式 (xorg-x11-driver-video-intel-legacy 套件),

這個套件仍支援 UMS (User Mode Setting)。要使用這個驅動程式,編輯 /etc/X11/xorg.conf.d/50-device.conf

並變更 driver 內容為 intellegacy。

在 Sakana (Max) 聯絡努力下, Planet openSUSE (http://planet.opensuse.org/) 加上了

台灣的 openSUSE 部落格文章收集,

有興趣的 openSUSE 愛用者,若您想要加入,請看參加辦法: http://en.opensuse.org/openSUSE:Planet

和 Lizards (http://lizards.opensuse.org/)不同,雖然都是 openSUSE 貢獻者的文章,但在 Lizards 要用英文發表,

且目前僅限 Members 發表

而 Planet openSUSE 可以用個人的母語發表,內容也較廣泛些

Sakana 要分別在台北(8/7)和台中(8/21)辦研習會

題目是: Nagios with openSUSE

台北場: http://phorum.study-area.org/index.php/topic,61951.0.html

歡迎參加

正在嘗試使用 Blogilo 來寫文章,這篇算是測試吧


face
20100729 PHP-MySQL 上課小記

請將 session 目錄 copy 到專案資料夾內

Q: session_test.php為何是亂碼?
A:
  • 請先用 NotePad++ 確認編碼
  • 請以記事本開啟( 有時因記事本編輯過, 造成編碼異常, 因windows 預設的UTF-8碼, 包含BOM, 會造成php 執行可能異常)
  • 若記事本開啟可以看到正確的中文, 請複製到 Notepad++



session_test.php 內容如下

<?  session_start(); ?><!--
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>
       <?
       echo "a:".$_SESSION['a']."<br>";
       echo session_id()."<br>";
       $_SESSION['a']=5;
       echo "a:".$_SESSION['a']."<br>";
       echo session_id()."<br>";
       session_unset();
       echo "a:".$_SESSION['a']."<br>";
       echo session_id()."<br>";
       session_destroy();
       echo "a:".$_SESSION['a']."<br>";
       echo session_id()."<br>";
       ?>
       <a href="session_test2.php">session是否可以看見?</a>
   </body>
</html>

Windows 的session 預設在 C:\Documents and Settings\使用者帳號\Local Settings\Temp
  1. session_start( )  於server 上產生一個session檔案
  2. session_id(  )  顯示session 檔案名稱
  3. 當產生session 變數, session檔案內容會新增,當session變數內容變更, session檔內容會更改
  4. session_unset(  )  清除所有 session 變數
  5. session_destroy(  ) 刪除 session id 檔案


Q: 可否只執行  session_unset(  ) or session_destroy(  )?
A: 如同郵差送資料到你家. session_unset( ) 取消資料,  但是郵差仍在. session_destroy(  ) 取消郵差, 但是資料仍在, 不能傳送.

*瀏覽器關閉, session 自然會消失, 但為避免 user 不關瀏覽器, 而只關分頁, 建議加上 ”登出” 功能消除 session.

Lab: 限制 session
建立一個 session_counter.php 內容如下(必須注意 <?ob_start();?> 必須放在第一行 )

<?ob_start();?>
<!--
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>session 只能使用一次</title>
   </head>
   <body>
       <?php
       session_start();
       //判斷 $_SESSION 變數, 若不存在
       if(!isset ($_SESSION['counter']))
          //建立 session變數, 值為1
       {
           $_SESSION['counter']=1;
           echo "歡迎光臨";

       }
       else  //代表 session 變數存在
           echo "已登錄過請勿重複登入";
       // put your code here
       ?>
   </body>
</html>

Q: 可否只清除一個session 變數?
A: 所有變數(包含一般, POST, GET, SESSION, COOKIE) 若為空字串, 內容就清空.  但若要使變數不見, 可用 unset(變數) 刪除

Lab: 了解 session_unset 與 session_destroy 的差異
session_test3.php 內容如下( 藉由取消註解來了解)

<?session_start(); ?><!--
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>
       <?
      if (isset($_SESSION['b']))
          {
          echo "b存在"."<br>";
          echo  $_SESSION['b']."<br>";
          }
      else
          {
           echo "b不存在";
           $_SESSION['b']=50;
           echo  $_SESSION['b']."<br>";
          }
       echo "a:".$_SESSION['a']."<br>";
       echo session_id()."<br>";        
       $_SESSION['a']=5;

       echo "a:".$_SESSION['a']."<br>";
       echo session_id()."<br>";    
     /*  session_unset();
       echo "a:".$_SESSION['a']."<br>";
       echo session_id()."<br>";

       session_destroy();
       echo "a:".$_SESSION['a']."<br>";
       echo session_id()."<br>";     */
       ?>
       <a href="session_test4.php">session是否可以看見?</a>
   </body>
</html>

Lab: 表單與 session
利用 3 個 php 檔案來進行表單與 session 的練習

1.php 負責 form 與 login

<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>表單登入</title></head><body>
<form name="form1" method="post" action="2.php">請輸入姓名:
<input type="text" name="username" maxlength="6" size="8"><br>
請輸入密碼:
<input type="password" name="passwd" maxlength=”6” size="8"><br>
<input type="submit"><input type="reset"></form> </body></html>


2.php
  • 產生 session 接收 form 內容(檢驗 form 是否輸入資料)
  • 若表單有輸入資料, 則可產生 session


<? session_start( ); ?><html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>驗證表單資料</title></head><body> <?  
 if(!isset($_POST['username']))
 {  ?>
       <script>
           window.alert('請輸入帳號');
           history.back();
       </script>
    <?
 }
 if(!isset($_POST['passwd']))
 {  ?>
       <script>
          windows.alert('請輸入密碼');
          history.back();
       </script>
    <?
 }  
 $_SESSION['username']=$_POST['username'];
 $_SESSION['passwd']=$_POST['passwd'];  
 echo '<br/><a href="3.php">第三頁</a>';
 ?></body></html>


3.php 
  • 檢驗是否有 session 變數, 若無代表沒有經過 2.php, 代表沒有經過 1.php
  • 因為要產生 session, 必須先有表單資料, 所以必須經過 1.php


<? session_start( );  ?><html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>查閱資料</title></head><body> <?  
 if(!isset($_SESSION['username']))
 {
  ?>
       <script>
           window.alert('請輸入帳號');
           location.href='1.php';
       </script>
  <?
 }
 if(!isset($_POST['passwd']))
 {
   ?>
       <script>
           window.alert('請輸入密碼');
           location.href='1.php';
       </script>
   <?
 }  
 echo '歡迎光臨';
 ?></body></html>


php 語法內加入 java script
  • 請留意 php 語法結束與開始的符號
  • java script 於 user 端執行,  所以php 可送資料給 script, 但 java script 預設是不能送資料給 php

週二
27 七月, 2010


face
20100727 上課小記

建立一個 Netbean 的PHP 專案 class3
建立新專案
File → New Project
PHP: PHP Application → Next
點選 Browse 按鈕 建立一個 class3 資料夾( source 按鈕調整於 C:\Appserv\www 目錄下 [網站根目錄] )
Finish

將\\PC1 上面預先準備好的資料 複製到 C:\Appserv\www\class3 下面

執行 year.html 若輸入的年齡 大於 18, 結果為?
year.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>
<form action="year.php" method="post" name="form1">
請輸入年齡:<input type="text" name="years">
<input type="submit" value="ok" /><br></form>
</body>
</html>


year.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>
<?
if (!isset($_POST["years"]))
{
  die("沒有資料") ;
}
$year1=$_POST["years"];
if ($year1>=12)
{  echo "可看輔導級,不可看限制級"; }
elseif($year1>=18)
{echo "可看限制級";}
elseif ($year1>=6)
{  echo "可看保護級"; }
else
{  echo "可看普遍級"; }
?>
</body>
</html>


if (條件1)
    else if (條件2)
else  以上條件均不成立時

Notes:
  • 若有多個條件要依序來作分析, 建議條件由大而小, 或由小而大依序執行
  • if, else 是前一個條件成立,  就不在執行 elseif 及 else


因為 18 歲以上只會顯示一種, 所以做一下修改
將year.html 另存為 year2.html,  action 改為 year2.php
將yearphp 改為 year2.php

year2.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>
   <form action="year2.php" method="post" name="form1">
請輸入年齡:<input type="text" name="years">
<input type="submit" value="ok" /><br></form>
</body>
</html>

year2.php 內容如下 (將所有的 elseif 改為 if 並將 else 註解)
<!--
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>
<?
if (!isset($_POST["years"]))
{
  die("沒有資料") ;
}
$year1=$_POST["years"];
if ($year1>=12)
{  echo "可看輔導級,不可看限制級"; }
if($year1>=18)
   {echo "可看限制級";}
if ($year1>=6)
{  echo "可看保護級"; }
//else
{  echo "可看普遍級"; }
?>

   </body>
</html>


isset( )
  • 判斷( ) 內的變數是否存在, 存在傳回true


if( ) 內若使用 !  代表相反,  例如 if( !isset())  代表當檔案或變數不存在時
die("訊息”顯示訊息後停止網頁運作
  • 不執行之後的html 及 php 語法


只要表單有送出資料, 接收資料的 php 檔就會建立 $_POST 或 $_GET 變數

Lab: 偵測內容是否有被輸入

使用 from1.html 來輸入資料, 內容如下
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<html>
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>text與passwd</title>
</head>

<body>
<form action="form1.php" method="post">
請輸入姓名:<input type="text"  size="10" name="username" maxlength="6"><br>
請輸入密碼:<input type="password"  size="10" name="passwd" maxlength="6"><br>
<input type="submit"><input type="reset">
</form>
</body>
</html>


接收的 form1.php 內容如下
<html><head><title>接收text與passwd</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> </head> <body> <? if (!isset($_POST["username"])) {   die("沒有姓名") ; } if (!isset($_POST["passwd"])) {   die("沒有密碼") ; }

//用來 Debug 用
echo $_POST['username'];
echo $_POST['passwd'];

if($_POST['username'] == '')
      die("姓名是空的");   if($_POST['passwd'] == '')      die("密碼是空的");

  ?><br> 接收的姓名為<? echo $_POST['username'];?><br> 接收的密碼為<? echo $_POST['passwd'];?><br> </body> </html>





for 迴圈
  • 最嚴謹及複雜的迴圈形式
  • for ( 1 ; 2 ; 3 )
    • 1: 變數的初始值
    • 2: 可執行範圍
    • 3: 每跑完一次迴圈固定變化
  • for 迴圈有初始值,有離開的條件,有固定的變化, 可知道固定的範圍


Q: 如何在 form , html 上作資料檢查?
A:
  • 可自寫 java script 或 jQuery
  • 但瀏覽器可關閉 script 功能, 所以 php 能須作檢查


jQuery:
  • java script 套件.
  • 可用較少的語法, 使用套件內提供的功能


while(  )
{
//先判斷再執行
//可能一次都不執行
}

範例 while.php
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>迴圈介紹:while </title></head><body>
 <?
$i = 1;
while ($i<=10){   //while是先做判斷再執行迴圈
echo "i=".$i."<br>";
   $i++;
}
  ?>
</body>
</html>



do
{
//先執行再判斷
//至少執行一次
}while (  ); //請注意 ;

範例 
dowhile1.php
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>dowhile

Older blog entries ->