顯示具有 php 標籤的文章。 顯示所有文章
顯示具有 php 標籤的文章。 顯示所有文章

2013年3月3日 星期日

HTML表單傳送中文字到 PHP + MySQL 問題

最近在學習PHP + MySQL 資料庫碰到以下問題:

用表單傳送中文字到 PHP 網頁中,再將中文字存入MySQL中。

使用phpMyAdmin去看MySQL資料表單,發現文字都無法正確的傳入

中文字的內容都是空的。若改用英文字都沒有這些問題。

初學這些東西,HTML的表單不熟,PHP也不熟,MySQL也不熟,所以這問題還真麻煩。

只好一步一步Debug.

英文字可以傳送,表示整個傳送的機制是對的,但就中文字不行,表示傳中文字時的編碼

可能有問題。這個時候就會想問幾個問題。

   1. 表單是怎麼傳送文字? 機制是如何?編碼方式?
   2. Php在Server端怎麼收到這些文字? 是否有正確收到
   3. Php怎麼把文字寫入資料庫? database 的編碼方式?

把問題列出來後,就開始Google 找答案了:

1. 表單是怎麼傳送文字?

    表單傳送有分 Post 和 Get, 可以用Get method來實驗,因為
Get 方式會將傳送資料顯示網址上,如此我們可知道表單傳了時麼東西出去。
由實驗得知,若表單文字是英文就直接送出,若是中文字會經過編碼再送出。

寫個簡單的表單如下:
<form action="test.php" method="get" >
      請輸入: 
      <input type="text" name="foodName" >
      <input type="text" name="cost" >
      <input type="submit" value ="送出" >
      
</form>

分別送出 "English" 和 "中文" ,送出後得到網址分別如下:

http://127.0.0.1/test2.php?foodName=English&cost=222

http://127.0.0.1/test2.php?foodName=%A4%A4%A4%E5&cost=222

發現上面 "中文" 被編碼成 %A4%A4%A4%E5

修改送出編碼方式如下: (改成utf-8)
<form action="test.php" method="get" accept-charset="utf-8">
      請輸入: 
      <input type="text" name="foodName" >
      <input type="text" name="cost" >
      <input type="submit" value ="送出" > 
</form>

http://127.0.0.1/test.php?foodName=%E4%B8%AD%E6%96%87&cost=222
發現上面 "中文" 被編碼成 %E4%B8%AD%E6%96%87
有明確指定編碼方式,永遠都是比較好的做法。


2. PHP 收到甚麼?

PHP 的資料型態是不需要很嚴謹的定義的,不像C語言有很嚴謹的資料型別定義。
當然這樣各種作法有好有壞拉(本人比較喜歡定義)。上面表單傳過來的東西 PHP
到底會收到甚麼?

$food = $_REQUEST['foodName'];
$cost = $_REQUEST['cost'];     
echo gettype($food) . "<br>";   // $food 讀取其資料型態
echo gettype($cost) . "<br>";   // $cost 讀取其資料型態

使用 gettype() 讀取$food 和 $cost資料型態,可知不管你傳文字還是數字,資料型態都會自動變成string.
由此可知,假設我只單純的把自echo出來,那echo出來的這個網頁所使用的編碼方式
就很重要了,那依舊是必須要能夠匹配的編碼方式才行囉!

<head>
<meta content="text/html; charset=utf-8" http-equiv="content-type">
<title></title>
</head>

所以如果送過來的是採用 UTF-8的編碼方式,這邊網頁就必須採用UTF-8的方式(如上例)
依此類推,big5...都一樣

3. Php怎麼把文字寫入資料庫? database 的編碼方式?

$food = $_REQUEST['foodName'];
$cost = $_REQUEST['cost'];  

$sqlCmd = "insert into menu 
 ( `index`, `foodName`, `cost` ) 
values 
 ( NULL, '{$food} ', {$cost} )";

上面這個PHP code 是把資料寫入資料庫中的語法,基本上沒有甚麼編碼方式的問題
只要網頁的編碼方式正確(第二點)就沒問題了。

但是資料庫的編碼方式就必須注意了。下圖採用phpMyAdmin連線進去我的編碼方式
也是採用utf8


以上這樣應該就都OK了。

我一開始會出現問題是因為
1. 我的表單傳送時並沒有指定編碼方式 (變成default)
2. 我的接收php網頁的編碼方式適用big5

所以中文字就一直有問題。但經過以上的方西調整後,目前都沒問題了。



2013年2月17日 星期日

在windows上架設php網站(php+Apache+MySQL)

本篇文章告訴你如何從無到有架設一個Windows based 的PHP網站
內容大概分兩部分

   1. 安裝PHP 網站相關軟體
   2. 寫一個簡單的PHP互動網頁

*****************************************************************************
Part 1. Install software

當然你可以分別下載php, Apache, MySQL 然後分別安裝
不過最快的做法是使用快速架站包==>AppServ (已經幫你整理好)

   官網: http://www.appservnetwork.com/
   
    AppServ 2.5.10 download: 
    http://prdownloads.sourceforge.net/appserv/appserv-win32-2.5.10.exe?download


下載後直接執行安裝檔,按照其安裝步驟安裝即可(採用其default安裝即可)。

如果你依照步驟安裝,Apache server 應該已經啟動了,
你可以打開瀏覽器測試一下: 測試下面三個網頁。

1. 網址輸入: http://127.0.0.1/
看到如下網頁: 表示 Appache 啟動成功


預設的網頁


輸入 http://127.0.0.1/phpMyAdmin

   帳號: root
   密碼: ****** (剛剛安裝時你key的密碼)

看到如下網頁:

phpMyAdmin 資料庫default page


輸入:
http://127.0.0.1/phpinfo.php
看到如下網頁:


PHP 版本資訊


看到以上三個網頁,表示基本的安裝都已經完成~


*****************************************************************************
part 2 Create your own interactive web page.


安裝後,首頁被放在 AppSeve\www\index.php
你可以隨便寫一個HTML,名子替換成 index.html (首頁)
首頁就被換成新的了




將下列語法另存到 "index.php",置換到www資料夾中


<html>
<head>
<title>Hello world</title>
</head>
<body>
<br>
<?php
echo "hello world <br>";
$a = $_REQUEST['aa'];
$b = $_REQUEST['bb'];
$a = $a + $b;
echo "The result is:{$a}<br>";
?>
<br>
<br>
</body>
</html>

上面PHP程式宣告了兩個變數 "aa" 和 "bb"
 計算 aa + bb 並將結果顯示在網頁上



用你的瀏覽器輸入下列網址:
http://127.0.0.1/index.php?aa=2&bb=3
參數放在網址後面
aa = 2
bb = 3



網頁顯示計算結果 aa + bb = 5


以上就是一個最簡單的PHP程式範例

*******************************************************
幾個好用工具:

1. Free PHP editor: PSPad
http://www.pspad.com/

2. HTML editor: kompozer
http://kompozer.net/download.php


什麼是PHP?

PHP 是:
  A. 一種 script language
  B. 放在網頁上的程式語言
  C. 嵌入在HTML中
  D. 程式放在Server端,非Client端
  E. Personal Home Page Tools (由Rasmus Lerdorf 先生提出)
  F. Open source.
  G. 通常搭配 Apache (server) + MySQL(database)
  H. 跟ASP是同一類的東西,ASP應該算是PHP的競爭對手。
       (甚麼!!不知道ASP...請自去股溝吧~)

PHP 官方網址: http://php.net/

PHP 可以做甚麼:
  A. 網路留言板,
  B. 網路聊天室
  C. 訂票系統
  D. 訂位系統
  E. 其他...(電子商務)

PHP 的工作原理:
  簡單的說,PHP是run在server端的一支程式(php解譯器),
  當Client端(上網瀏覽網頁的你)來訪問時,網站伺服器(Apache)
  會將php網頁丟給php解譯執行,php解譯器會根據進來的命令
  做出回應,通常是output一個HTML網頁出去,回丟給server(Apache)
 ,server再回應給client端,因此可產生互動網頁。
  php解譯器可以在server上做很多事,比如說到SOL資料庫中撈資料等..
  就看你程式怎麼寫。因此要做到電子商務系統都是沒問題的。