2015年1月29日 星期四

PHP在不同頁面之間傳值的三種常見方式

http://fanli7.net/a/bianchengyuyan/PHP/20140531/510971.html

      接觸PHP也有幾個月了,本文總結一下這段日子中,在編程過程裏常用的3種不同頁面傳值方法,希望可以给大家参考。有什麼意見也希望大家一起討論。   &
      接觸PHP也有幾個月了,本文總結一下這段日子中,在編程過程裏常用的3種不同頁面傳值方法,希望可以给大家参考。有什麼意見也希望大家一起討論。
      一. POST傳值
      post傳值是用於html的<form>表單跳轉的方法,很方便使用。例如:
 <html>
 <form action='' method=''>
 <input type='text' name='name1'>
 <input type='hidden' name='name2' value='value'>
 <input type='submit' value='提交'>
 </form>
 </html>
      form中的action填入的是跳轉頁面的url路徑,method填入post方法。form表單中的提交按鈕按下後,就會把form中有name的內容都傳到填入的url中,可以通過$_POST['name']獲取,例如:
<?php
$a=$_POST['name1'];
$b=$_POST['name2'];
?>
      這裏有個很方便的小技巧,在input標簽中把type選为'hidden'時,這個input標簽會隱藏起來,不在頁面顯示,但這input標簽在 form中,並且有name值和value值,同样會跟隨提交按鈕傳遞過去,這種隱藏標簽可以傳遞一些不想顯示出來的內容。
    二.GET傳值
     GET傳值是通過跟隨url傳遞的,在頁面跳轉時,跟着url跳轉。常用於<a>標簽的使用。例如:
<a href='delete.php?id=value'>點我跳轉</a>
   跳轉進入xxx.php後,就能通過$_GET['id']獲取傳遞的值。GET方法常用於URL的目的是刪除或讀取某個id的php文件。
   三.SESSION傳值
   SESSION是全局變量的一種,經常用於用戶登陆後保存用戶id之類的常用數據。一旦保存到SESSION中,其他頁面都可以通過SESSION獲取,SESSION的使用要開启session:
<?php
//session賦值
   session_start();
   $_SESSION['one']=value1;
   $_SESSION['two']=value2;

//session值的讀取:
   $one = $_SESSION['one'];
   
   //session值的銷毀
   unset($_SESSION['one']);
?>
   以上三種方式是常用方式,大家可以参考使用。

2015年1月28日 星期三

請問不使用< input type="submit"> 如何傳值?

http://www.programmer-club.com.tw/ShowSameTitleN/php/9872.html

請問不使用<input type="submit">如何傳值? 更改我的閱讀文章字型大小
作者 : shanesss(JJM)
[ 貼文 51 | 人氣 9379 | 評價 0 | 評價/貼文 0 | 送出評價 16 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2009/5/22 下午 07:56:23
請問各位大大
select可以不透過<input type="submit">就傳值到其他網頁嗎?

code如下:
//-------------------------------------------------------------------------
<form name="form1" method="post" action="card.php">
     <p align="left">
     <select name="color" size="1">
     <option selected value="0">請選擇</option>
     <option value="white">白</option>
     <option value="red">紅</option>
     </select>
     </p>
</form>
//-------------------------------------------------------------------------
有方法可以把值傳遞到card.php嗎?

謝謝
作者 : davidsets(勇ㄚ)
[ 貼文 32 | 人氣 705 | 評價 80 | 評價/貼文 2.5 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2009/5/23 上午 07:11:11
純粹是Javascript的問題,不要submit按鈕,甚至不要form也可以給你傳
<script language=javascript>
function link(obj){
location.href="abc.php?color="+obj;
}
</script>
     <select name="color" size="1" onchange=link(this.value)>
     <option selected value="0">請選擇</option>
     <option value="white">白</option>
     <option value="red">紅</option>
     </select>
最後在abc.php,用$_GET或$_REQUEST去接收color這個變數即可
作者 : davidsets(勇ㄚ)
[ 貼文 32 | 人氣 705 | 評價 80 | 評價/貼文 2.5 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2009/5/23 上午 07:18:18
囧"~這個討論區沒有重新編輯的功能
不知道你已經假設card.php這個檔名了

即然發了文章,再雞婆多跟你講一些
除了剛剛的方法外,你還可以偷偷的送
<script language=javascript>
function link(obj){
obj.submit;
}
</script>
<form name="form1" method="post" action="card.php">
     <p align="left">
     <select name="color" size="1 onchange=link(this.form)>
     <option selected value="0">請選擇</option>
     <option value="white">白</option>
     <option value="red">紅</option>
     </select>
     </p>
</form>

第一個方法你還要傳另一個值的話會比較麻煩
第二個方法,你要傳多少表單都沒關係,只要在同一個form的資料都會送出
作者 : shanesss(JJM)
[ 貼文 51 | 人氣 9379 | 評價 0 | 評價/貼文 0 | 送出評價 16 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2009/5/25 上午 10:00:47
謝謝大大指導~

2015年1月12日 星期一

解决PHP下载乱码问题,word doc 文件等


header('Content-type: application/octet-stream');
header('Content-Disposition: attachment; filename="' . $docno);
ob_clean();
flush();

readfile('http://xxx/cgi-bin/fglccgi/topprod/topcust/help/0/aim/download_doc/' . $docno);

2015年1月8日 星期四

遠端無法連線到MySQL Server ERROR 2003 (HY000)

http://blog.lyhdev.com/2006/07/mysql-server-error-2003-hy000.html

MySQL安裝後可能預設關閉遠端連線,因此在遠端進行連線時會出現這個錯誤:
ERROR 2003 (HY000): Can't connect to MySQL server on '***.***.***.***' (###)

如果必須透過遠端檢視或操作MySQL Server,需要修改一下設定檔,將bind-address、skip-networking的選項取消(如果被開啟的話)。

若這些設定沒有問題,仍沒辦法連線,再做一些其他檢查:
  1. netstat -nl grep 3306 (此數字是MySQL預設的連接埠)是否有0.0.0.0:3306出現,若沒有則表示MySQL server未啟動或仍未允許遠端連線
  2. iptables -L 檢視一下是否被防火牆擋掉

Excel開啟CSV檔的花式技巧

http://wen198599.pixnet.net/blog/post/22314819-%5B%E5%BC%95%E7%94%A8%5Dexcel%E9%96%8B%E5%95%9Fcsv%E6%AA%94%E7%9A%84%E8%8A%B1%E5%BC%8F%E6%8A%80%E5%B7%A7

CSV檔是很普遍的Grid式資料匯出格式,而很多人也都知道Excel可以直接將CSV檔開啟成試算表。不過稱作Comma Separated Value的CSV,除了"用逗號將值隔開"之外,還有一些進階的花式技巧。例如:

1. 如果是內含逗號的字串值,可以用雙引號將字串包起來,例如: 886,"Taipei, Taiwan"
2. 如果在雙引號中的字串中又包含了雙引號,則可以遵循VB/VBScript的慣例,用兩個雙引號代替。例如: "12'30"""-->12'30"
3. 用Excel開啟CSV時,Excel會自動判斷值的性質,進行資料轉換。比較煩的是,明明編號是007,就算用了雙引號包夾成"007",Excel還是會將它轉換成7,即使在Excel中重新調整它的儲存格式為字串,也無法還原回007。
這裡分享一個小技巧,我們可以用="007"的宣告方式,強制指定字串值,Excel就不會雞婆將它轉成數字。而這個技巧還可以再延伸,甚至可以用=SUM(B2:B5)的寫法,指定儲存格的運算式。範例如下:

[Updated 2007/02/01]
在公司分享這篇KB後,同事Daniel也提供了他的寶貴經驗: 看來Excel只接受ANSI/BIG5編碼的CSV檔,如果將CSV檔存成Unicode編碼,Excel就無法識別出逗號,而會將整列資料視為同一個值。
謝謝Daniel的分享!


另外…Excel不默認支持UTF8的CSV文件
因此excel打開utf-8中文的csv百分百會發生這種問題。

有兩種解決辦法:
1. 可以先用notepad打開csv,另存為ANSI編碼,再用Excel打開
2. 先打開空的Excel,然後在料->取得外部資料->從文字檔→選擇csv文件,在導入資料對話框中選好UTF-8的編碼(你會發現默認是ANSI),就可以了。

Perl 解決Wide character in print with UTF-8 mode

use utf8;
binmode(STDIN, ':encoding(utf8)');
binmode(STDOUT, ':encoding(utf8)');
binmode(STDERR, ':encoding(utf8)');
 
但是如果要寫入FILE,則是
open FILE ,">:encoding(utf8)","tpca.csv";
print FILE ...;
close FILE;