代碼編輯器使用

編輯器裡點選 javascript 、 CSS 、 html 可切換代碼,Result 展示效果
顯示具有 PHP 標籤的文章。 顯示所有文章
顯示具有 PHP 標籤的文章。 顯示所有文章

2014年3月27日 星期四

PHP 中華電信 QR 扣產生圖片

這陣子因為公司的案子是關於中華電信 QR 扣的介接,所以紀錄部分方法

關於 C++ 的部分就不多加闡述(拿到的時候連編譯都沒有...),因為本文的重點只在 PHP 的部分

首先要使用 PHP 產生圖片需要先做兩個步驟
1.需要先安裝 GD 套件
2.在檔案中開頭中加入下列代碼

header("Content-type: image/png");
再來因為那個 API 輸出的是16進位的字串,所以必須做些處理才能產生 QR 碼

function hex2str($hex) {
  for($i=0;$i<strlen($hex);$i+=2)
    $str .= chr(hexdec(substr($hex,$i,2)));
  return $str;
}  

最後用 echo 印出來就會直接變成 QR 碼了。

2014年3月24日 星期一

PHP MySQL基本語法(Update)

這篇重點比較少
因為就和上篇 Insert 的第2種方法很像。

mysql_query("update `table` set `field1`='value1' , `field2`='value2 , ... where `field` = 'value'");
唯一的不同之處就是一定要記得在後面上條件,不然會發生資料表全部資料都更新的狀況
條件的寫法和 Select 一樣,也同樣可以使用複數條件。

2014年3月13日 星期四

PHP MySQL基本語法(Insert)

基本上 MySQL 有兩種插入語法
1.傳統的寫法
mysql_query("insert into `table` (`field1` ,`field2` ,...) values ('value1', 'value2',...)");
2.第二種寫法
mysql_query("insert `table` set `field1`='value1' , `field2`='value2 , ...");
這兩者有甚麼差別呢?
第一種語法支持多項資料插入,只要在後方繼續把值往後塞
mysql_query("insert into `table` (`field1` ,`field2` ,...) values ('value1', 'value2',...) , ('value1', 'value2',...) , ...");
而第二種雖然只能輸入一筆資料,但是寫法比較直覺
這樣子比較起來第一種似乎比較方便?
事實上第一種寫法只要其中一個值的填錯基本上就是全錯,所以在寫法上必須更小心注意。
第二種就像是UPDATE的寫法,一個欄位就是準確對應到一個值,所以出錯機會比較少。
另外就是經過測試當資料量很大的時候第一種寫法無法完成任務

數據量/行 第一種方式的時間/s 第二種方式的時間/s
10 0.000992774963379 0.0041561126709
1W 0.613435983658 4.72470808029
2W 0.777942180634 6.5687379837
3W 1.21902298927 11.7160160542
5W MySQL server has gone away 13.5717499256
10W MySQL server has gone away 28.6645958424

2014年3月4日 星期二

PHP MySQL基本語法(連接、查詢SELECT)

1.連接資料庫,確認資料庫是否存在
//MySQL位置
$db_host = "localhost";

//資料庫名稱
$db_database = "database";

//MySQL帳號
$db_username = "account";

//MySQL密碼
$db_password = "password";

//是否可連到MySQL
if (!@mysql_connect($db_host, $db_username, $db_password)) die("Error");

//是否可連上資料庫
if (!@mysql_select_db($db_database)) die("Error");

//連接MySQL Server
$conn=mysql_connect($db_host, $db_username, $db_password);

//連接資料庫
mysql_select_db($db_database,$conn);

//指定編碼
mysql_query("set names 'utf8'");

2.查詢(SELECT)
a.一般查詢
//db_table為資料表名稱,*為指定所有欄位
$sql = mysql_fetch_array(mysql_query("select * from `db_table`"));

b.查詢條件資料
//field為欄位名稱,value為資料值,field1為指定顯示的欄位
$sql = mysql_fetch_array(mysql_query("select `field1` from `db_table` where `field` = 'value'"));

//and 兩個條件都必須成立
$sql = mysql_fetch_array(mysql_query("select `field1` from `db_table` where `field` = 'value' and `field1` = 'value1'"));

//or 其中一個成立
$sql = mysql_fetch_array(mysql_query("select `field1` from `db_table` where `field` = 'value' or `field1` = 'value1'"));

c.查詢後排序
//欄位field由大而小排序
$sql = mysql_fetch_array(mysql_query("select * from `db_table` order by `field` desc"));

//欄位field由小而大排序
$sql = mysql_fetch_array(mysql_query("select * from `db_table` order by `field` asc"));


d.印出所有資料
$sql = mysql_query("select * from `db_table`");
while($sql_rows = mysql_fetch_array($sql)){
    echo $sql_rows["field1"];
    echo $sql_rows["field2"];
    echo $sql_rows["field3"];
    .
    .
    .
}

2014年2月26日 星期三

PHP 下載檔案

一般來說,如果是文字類型的檔案,直接用html的超連結語法無法直接下載而會直接開啟在瀏覽器上
就像下圖一樣


這時將html代碼改成下列的方式
<a href="downloadfile.php?file=test.txt">download</a>

再來開一個downloadfile.php裡寫入下列代碼
if(isset($_GET['file'])){
    header("Content-type:application");
    header("Content-Length: " .(string)(filesize($_GET['file'])));
    header("Content-Disposition: attachment; filename='".$_GET['file']."'");
    readfile($_GET['file']);
}

這時再來看看結果,已經成功將檔案下載下來!!

2014年2月24日 星期一

PHP 字串擷取

//分割字串
$string="Hello!World";
$stuednt_array=explode("!",$string);
foreach($string_array as $index => $value)
    echo "string $index is: $value\n";

//取得部分字串
substr( $string , $start , $length ) //一般語法
//只有length的寫法
echo substr("Hello!World", -1); //印出d,從字尾算起第一位。 
echo substr("Hello!World", -2); //印出ld,從字尾算起二位。

//加入start的情況
echo substr("Hello!World", -4, 1); //印出o,從字尾算起第四位再取一位。
echo substr("Hello!World", 0, -2); //印出Hello!Wor,從0起開始算然後再扣掉二位。
echo substr("Hello!World", 2, -1); //印出llo!Worl,從第二位算起再扣掉一位。
echo substr("Hello!World", -5, -2); //印出Wor,從字尾算起第五位然後再扣掉二位。

PHP 2種POST方法

//第一種 利用javascript將資料POST
 echo '<form id="form1" name="form1" method="POST" action="yourURL">
<input type="hidden" name="data1" value="value1">
<input type="hidden" name="data2" value="value2">
</form>';
echo '<script type="text/javascript">
document.form1.submit();
       </script>

//第二種 利用curl將資料POST
$toURL = "yourURL";
$post = array(
 "data1"=>'value1',
   "data2"=>'value2',
);
$ch = curl_init();
$options = array(
CURLOPT_URL=>$toURL,
CURLOPT_HEADER => false,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_POST=>true,
CURLOPT_POSTFIELDS=>$post,
);
curl_setopt_array($ch, $options);
$value = curl_exec($ch);
curl_close($ch);


兩者雖有同樣結果相同但過程不同
第一種使用時就如同html的form表單一樣
而第二種則是會在背景執行,將目標結果頁面的html代碼變成字串放入$value中
若要截取某些部分則需另外寫正規式將其取出