搜尋此網誌

2009年7月29日 星期三

PHP-投票計數篇

userprofile table中資料欄位 我是規劃成這樣

Id Context Profile

//從userprofile table中找到Context 欄位為meetingatschool 都把它挑出來
//接下來將其id遞減
$sql="SELECT * from userprofile where Context='meetingatschool' order by id DESC";
$result=mysql_query($sql);

//因為是遞減的關係最上面的那筆 就會是最新的那筆資料
//抓一列資料 存放到row[]中
$row=mysql_fetch_row($result);

$type="";

//因為row[2]是我存放Profile的地方
//接下來用switch case來分別對應 ex:如果row[2]存在的是General就將$type設為General
switch ($row[2]) {
case "general":
$type="General";
break;
case "meeting":
$type="Meeting";
break;
case "vibration":
$type="Vibration";
break;
case "outdoor":
$type="Outdoor";
break;
}
//ex:上面對應的$type=General 就是 General=General+1
//其中" . "是連接字串用 相當於java與C++中的" + "
$sql="update meetingatschool set ". $type . "=" . $type . "+1";
mysql_query($sql);

這邊的資料庫存完之後 我就可以到我的java server那邊 透過JDBC去連接資料庫 抓到資料 完成我要做的事情

PHP-連接資料庫篇

//連接資料庫 mysql_connect("localhost","帳號","密碼");
$con = mysql_connect("localhost","xxx","xxx");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
//選擇my_db資料庫
mysql_select_db("my_db", $con);
//將剛剛在主頁所選的選項的值 插入到userprofile table中
//另外要先到資料庫中 先建立好userprofile的table,並且要將Context和Profile兩個欄位也都建立
$sql="INSERT INTO userprofile (Context, Profile)
VALUES ('$_POST[context]','$_POST[profile]')";
mysql_query($sql);

Html-form with radiobox

這次是我第一次真的用Notepad++ 來寫html 還記得在我國中的時候 我有寫過網頁 但當時是用frontpage來寫 所以對html完全不熟 這次剛好論文需要 想說來試試看寫一下
本來寫程式 我是不喜歡問別人的 但這次比較急 只好趕快問人了= = 不過也因此...我覺得我沒特別學到什麼 囧...看來還是需要找個機會 好好去磨練一下




//當user按下送出之後 會導到insert.php這個頁面
//method有分post和get兩種 而get的方式,會看到url裡面有代參數
//但post就不會有 另外target="_blank" 是永遠開啟新視窗
<form action="insert.php" method="post" target="_blank">
//radiobox name設為相同 就表示同個群組 只能單選
< name="profile" value="general" type="radio">General
< name="profile" value="meeting" type="radio">Meeting
< name="profile" value="vibration" type="radio">Silent
< name="profile" value="outdoor" type="radio">Outdoor
< name="context" value="meetingatschool" type="hidden">
//斷行
<br>
//按鈕 value為Submit 顯示也會是Submit
< value="Submit" type="submit">
< /form>

Web server+Database設置篇

安裝的時候可以用懶人包 Appserv
Webserver:Apache
Database:MySQL
管理資料庫部份:phpmyadmin

如果不會安裝Appserv可以參考 教學

PHP Tutorial

HTML Tutorial

J2SE-JDBC 資料庫select篇

Statement stmt = null;
stmt = conn.createStatement();
//從meetingatschool table 去select
//executeQuery()方法則是用於SELECT等查詢資料庫的SQL
//會傳回ResultSet物件,代表變更或查詢的結果,查詢的結果會是一筆一筆的資料
ResultSet result = stmt.executeQuery( "SELECT * FROM meetingatschool");
//使用查詢到的結果之欄位順序來顯示
//
next()來移動至下一筆資料,它會傳回 true 或 false表示是否有下一筆資料
//由於我meetingatschool table存的型別是int 因此 我用getInt來取得資料
while(result.next()) {
System.out.print(" "+result.getInt(1) + "\t");
//這個地方 我是要拿來比較大小用
general=new Integer(result.getInt(1));
System.out.print(" "+result.getInt(2) + "\t");
meeting=new Integer(result.getInt(2));
System.out.print(" "+result.getInt(3) + "\t" );
vibration=new Integer(result.getInt(3));
System.out.println(" "+result.getInt(4) + "\t");
outdoor=new Integer(result.getInt(4));
}

J2SE-JDBC 資料庫連接篇

若是用MySQL來當作資料的話 請先下MySQL JDBC driver
之後將*.jar加入至CLASSPATH,Eclipse 在Library 加入external JAR

String driver = "com.mysql.jdbc.Driver";
//
jdbc:mysql://主機名稱:連接埠/資料庫名稱
String url = "jdbc:mysql://localhost/my_db";
//登入資料庫的帳號
String user = "xxx";
//登入資料庫的密碼
String password = "xxx";
Connection conn = null;
Class.forName(driver);
//連接資料庫
conn = DriverManager.getConnection(url, user, password);



J2SE-分析字串篇

byte[] buf ;
int read = 0;
//從inStream中讀取資料流 寫入到buf中
while((read = inStream.read(buf))!=-1){
String str = new String(buf, 0, read);
//字串以"."來作為分隔
String[] token =str.split("\\.");
//假設我在手機端傳的字串為meetingAtschool.Level1.Ring.Vibration
//以下寫法就是將token分別取出
if(token[0].equals("meetingAtschool"))
{


if(token[1].equals("Level1")){


System.out.println("Current Exposed level: Level1");
}

System.out.println("The match functionalities:");
if(token[2].equals("Ring"))
{


System.out.println("Ringer");
server.broadcast(Ring);

}
if(token[2].equals("Vibration"))
{

System.out.println("Vibration");
//讓執行緒暫停執行進入Not Runnable狀態 其中50000毫秒=50秒
//為了要傳給手機訊息 但是同一時間outputstream只能傳一個字串 所以我讓他暫停等候 再傳出去(這時上面的ring也已經傳出)
Thread.sleep(50000);
server.broadcast(vibration);
}
}

J2SE-Broadcast

//記得 import java.util.ArrayList;
// 建立對應 client 的 輸出物件

socketWriter = new PrintWriter(clientSocket.getOutputStream(), true);
//將client相關資訊存起來
server.setClientOutputStreams( clientSocket.getInetAddress().getHostAddress(), socketWriter );
//先將每個client的outputStream和ip存起來放到ArrayList中 ArrayList詳細用法請看Library
private static ArrayList clientOutputStreams;
clientOutputStreams = new ArrayList();
public ArrayList getClientOutputStreams(){
return clientOutputStreams;
}

public void setClientOutputStreams( String ip, PrintWriter w ){
clientOutputStreams.add( new createOutputStreamData(ip,w));
}

public class createOutputStreamData{
String clientIP;
PrintWriter writer;

public createOutputStreamData( String ip, PrintWriter w ){
clientIP = ip;
writer = w;
}
}
//從ArrayList取出之後 分別寫入到個別的outputstream
public void broadcast(char g2) throws IOException {
for( int i=0; i
getClientOutputStreams().get(i).writer.println(g2);
getClientOutputStreams().get(i).writer.flush();
}
}

J2SE-multithread socket

public void startServer() {

try {
//建立server用的socket (port不能小於1024)
echoServer = new ServerSocket(port);
}
catch (IOException e) {
System.out.println(e);
}

//每當一個device連線產生時,就產生一個新的thread去處理這個連線 並且等待下一個device連進來
while ( true ) {
try {
clientSocket = echoServer.accept();
numConnections ++;
Server2Connection oneconnection = new Server2Connection(clientSocket, numConnections, this);
new Thread(oneconnection).start();
}
catch (IOException e) {
System.out.println(e);
}
}
}
}

J2SE-初探 IDE安裝篇

最近一直懶惰沒上來更新 把之前寫的程式 整理一下@@

我的IDE:eclipse 可在這裡 下載
我都是用 Eclipse Classic 3.5.0 (162 MB) 這個版本
還有記得下載 : java runtime
Eclipse解壓縮之後 以及java runtime安裝完成
就可以開始開發囉
推薦網站:
Javaworld(國內)
良葛格學習筆記(國內)
Java Sun (國外) 可以查Library
基本上JAVA的資料還蠻多的 google一下很多資料可以查詢

2009年7月9日 星期四

symbian 彈出訊息視窗

Link against: avkon.lib eikctl.lib eikcdlg.lib

#include <aknnotewrappers.h>

//R_CHAT_ON 這個要在*.rss 裡面去定義
HBufC* textResource = StringLoader::LoadLC(R_CHAT_ON);
CAknInformationNote* note = new ( ELeave ) CAknInformationNote;
//彈出訊息視窗 變且顯示
note->ExecuteLD( *textResource );

詳情請見Library

symbian 儲存與讀取檔案內容

寫入檔案 程式碼如下:
//指定檔名與位置
_LIT(KFILE,"c:\\kk.txt");
//要寫入的字串
_LIT(KT,"meetingAtschool.Level1.Ring");
// RFileWriteStream 寫入一個stream到一個文件
詳情請看Library
RFileWriteStream write;
write.Replace(CCoeEnv::Static()->FsSession(),KFILE,EFileWrite);
//把KT字串放入buf
TBuf<400> buf(KT);
//寫入
write.WriteL(buf);
write.CommitL();
write.Close();

讀取檔案內容 程式碼如下:
//檔案的位置
_LIT(KFILE,"c:\\kk.txt");
RFileReadStream read;
read.Open(CCoeEnv::Static()->FsSession(),KFILE,EFileRead);
TBuf<40> buf2;
//讀出檔案 寫入到buf2 這邊特別要注意ReadL的第二個參數(這邊指27) 需要跟檔案內容的字串//一樣長 若比較小 會顯示不完全 若比較大 則會有錯誤訊息
//一般可以寫成buf.Length() 也就是說read.ReadL(buf2,buf.Length()); 這樣就可以知道 當初所//存的buf有多長
read.ReadL(buf2,27);
read.Close();