loading
Please wait while loading...

查看詳情 Post request show 404 not found on php with IIS

May related to:
1.
This line in my web.config file was causing the issue:
<trace enabled="true" localOnly="false" pageOutput="false" requestLimit="40" />

2.
I had this same problem. Any PHP POST to another PHP page was hanging. In the process of rebuilding the web.config file from scratch, I found an error message that suggested running the AppPool Managed pipeline mode in Classic mode.
After making the above change, my PHP code is working as expected.

 

Reference:
http://stackoverflow.com/questions/4357636/iis7-php-http-post-hang

查看詳情 PHP匯出Excel可讀的UTF-8編碼CSV檔案

範例:
$fp = fopen("export.csv","w");
fwrite($fp, "\xEF\xBB\xBF".$output);

說明:
代碼內容為將$output寫入檔案export.csv,其中$output為UTF-8編碼的資料
在$output前加上"\xEF\xBB\xBF",此為寫入BOM 標籤,這樣便可令Excel能正確讀取UTF-8編碼。

查看詳情 Google Oauth 2.0 每次登入皆需重新授權

之前制作了一個web app使用了google帳戶作登入驗証。參考google官方的例子,制作這個Login的功能並不難。可是我遇到一個問題就是每次按下登入後,頁面都會重定向到google並且要求用戶授權,這實在是有點麻煩,如果大家有用過facebook login之類的功能,都知道這類OpenID的登入服務是只會在第一次登入時要求授權,往後登入便會自動完成,google的登入又怎麼可能那麼煩人呢?於是我嘗試到網上尋找答案,終於找到了解決方法:

要讓你的google login只在第一次登入時向用戶要求授權,只需加上以下代碼便可

$client->setApprovalPrompt(auto);
...........

查看詳情 用 PHP 的 filter_var 驗証Email

以往我們驗証 email 是否正確, 通常都是用 preg_match, 可是今天卻無意中發現, 原來 php5 早已內置 email validation 的功能, 那就是 filter_var

filter_var($email, FILTER_VALIDATE_EMAIL)

可是, 可能大家平日沒有留意, 其實一般通用的 email 驗証都沒有處理好 domain 的, 例如 xxx@xxx.com1, 即使用 filter_var 也是可以順利通過的, 但事實上那樣的域名是並不存在的, 所以在驗証時最好還要加多一些限制, 我的方法如下

function verifyEmail($email) {
	if(filter_var($email, FILTER_VALIDATE_EMAIL)) {
		return preg_match('/^([a-z]{2,4})$/', end(explode('.',$email)));
	}
	return false;
}

注意: 雖然我在驗証中只允許域名最後兩字是 2-4 個字母, 但其實現在是存在一些特別的域名是超過4個字母的, 例如 .travel, .museum, 所以使用上要視符網站需求去設定

filter_var 還有很多其他驗証功能, 例如 FILTER_VALIDATE_URL, FILTER_VALIDATE_IP 等, 有需要時可到 php.net 詳閱

查看詳情 JS 新增的 input 沒有隨表單提交

我們編寫網頁表單時,有時會需要設計一些動態數目的輸入項,在這些情況中,我們通常會使用 jQuery/js 來動態增加輸入框到表單中。可是,今天我卻遇到一個問題,就是用 JS 加入的輸入框的值並沒有送到伺服器端,起初我以為是 JS 的設定錯了,但最終找到原因原來是和 html 的結構有關

以下是 html

<table id="table">
	<form>
	<thead>
		<tr>
			<th>Title</th>
		</tr>
	</thead>
	<tbody>
		<tr>
			<td><input type="text" name="dynamic[]"></td>
		</tr>
	<tbody>
	<tfoot>
		<tr>
			<td><input type="button" id="addmore"></td>
		</tr>
	</tfoot>
	</form>
</table>

JS:

$(document).ready(function() {
	$("#addmore").click(function() { $("tbody",$("#table")).append(''); });
});

令新加的輸入框無法傳送出去的原因是 table 和 form 的次序, 上例中我是把 form 放在 table 的入面, 這樣的情況便會導致提交時表單無法取得新加的輸入框的值, 因為從正確 html 層面上來說, table 中間的內容應該是寫在 td 或 th 中的, 而上例則不規則地在 table 和 td 中間插入 form, 所以便出了錯誤, 解決方法很簡單, 只需將 form 和 table 的次序調轉, 用 form 包住 table 便可以了:

Title
1 2