Subversion Repositories php-qbpwcf

Rev

Rev 30 | Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
3 liveuser 1
<?php
2
 
3
/*
4
 
5
	QBPWCF, Quick Build PHP website Component base on Fedora Linux.
6
    Copyright (C) 2015~2024 Min-Jhin,Chen
7
 
8
    This file is part of QBPWCF.
9
 
10
    QBPWCF is free software: you can redistribute it and/or modify
11
    it under the terms of the GNU General Public License as published by
12
    the Free Software Foundation, either version 3 of the License, or
13
    (at your option) any later version.
14
 
15
    QBPWCF is distributed in the hope that it will be useful,
16
    but WITHOUT ANY WARRANTY; without even the implied warranty of
17
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18
    GNU General Public License for more details.
19
 
20
    You should have received a copy of the GNU General Public License
21
    along with QBPWCF.  If not, see <http://www.gnu.org/licenses/>.
22
 
23
*/
24
namespace qbpwcf;
25
 
26
/*
27
類別說明:
28
form表單應用的類別.
29
備註:
30
無.
31
*/
32
class form{
33
 
34
	/*
35
	#函式說明:
36
	#當前類別被呼叫的靜態方法不存在時,將會執行該函數,回報該方法不存在.
37
	#回傳結果:
38
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
39
	#$reuslt["error"],執行不正常結束的錯訊息陣列.
40
	#$result["function"],當前執行的函式名稱.
41
	#必填參數:
42
	#$method,物件,為物件實體或類別名稱,會自動置入該參數.
43
	#$arguments,陣列,為呼叫方法時所用的參數.
44
	#可省略參數:
45
	#無.
46
	#參考資料:
47
	#__call=>http://php.net/manual/en/language.oop5.overloading.php#object.callstatic
48
	#備註:
49
	#無.
50
	*/
51
	public function __call($method,$arguments){
52
 
53
		#取得當前執行的函式
54
		$result["function"]=__FUNCTION__;
55
 
56
		#設置執行不正常
57
		$result["status"]="false";
58
 
59
		#設置執行錯誤
60
		$result["error"][]=__NAMESPACE__ ."/".$method."() 不存在!";
61
 
62
		#設置所丟入的參數
63
		$result["error"][]=$arguments;
64
 
65
		#回傳結果
66
		return $result;
67
 
68
		}#function __call end
69
 
70
	/*
71
	#函式說明:
72
	#當前類別被呼叫的靜態方法不存在時,將會執行該函數,回報該方法不存在.
73
	#回傳結果:
74
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
75
	#$reuslt["error"],執行不正常結束的錯訊息陣列.
76
	#$result["function"],當前執行的函式名稱.
77
	#必填參數:
78
	#$method,物件,為物件實體或類別名稱,會自動置入該參數.
79
	#$arguments,陣列,為呼叫方法時所用的參數.
80
	#可省略參數:
81
	#無.
82
	#參考資料:
83
	#__call=>http://php.net/manual/en/language.oop5.overloading.php#object.callstatic
84
	#備註:
85
	#無.
86
	*/
87
	public static function __callStatic($method,$arguments){
88
 
89
		#取得當前執行的函式
90
		$result["function"]=__FUNCTION__;
91
 
92
		#設置執行不正常
93
		$result["status"]="false";
94
 
95
		#設置執行錯誤
96
		$result["error"][]="欲呼叫的". __NAMESPACE__ ."/".$method."() 不存在!";
97
 
98
		#設置所丟入的參數
99
		$result["error"][]=$arguments;
100
 
101
		#回傳結果
102
		return $result;
103
 
104
		}#function __callStatic end
105
 
106
	/*
107
	#函式說明:
108
	#表單開始
109
	#回傳結果:
110
	#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
111
	#$result["error"],錯誤訊息陣列.
112
	#$resutl["function"],當前執行的函式名稱.
113
	#$result["content"],表單開始的語法.
114
	#必填參數:
115
	#$conf["action"],字串,爲要交給那個檔案處理該表單傳送的內容.
116
	$conf["action"]="";
117
	#可省略參數:
118
	#$conf["legend"]="";#顯示表單的標題
119
	#$conf["name"]="";#爲該表單的名稱,id也跟$conf["name"]一樣.
120
	#$conf["method"]="";#爲傳輸的方法,若沒設定則預設爲post,其他可用的參數爲get。
121
	#$conf["target"]="";#為顯示的方式,若沒設定則預設爲"_self",其他可用的參數爲 "_blank"、"_parent"、"_top",也可以是iframe的名稱。
122
	#$conf["tableStart"]="true";#爲該表單是否要以<table>開始。"true"爲是,"false"為否,預設為"false".
123
	#$conf["tableClass"]="";#表格要套用的css樣式,預設爲"__withoutBorder"無框線的預設樣式;若爲"__withBorder"的話,則爲有框線的預設樣式。
124
	#$conf["showFieldsetBorder"]="false";#是否要顯示表單區域的框線,預設為"false"不顯示,"true"代表要顯示.
125
	#參考資料:
126
	#http://www.w3schools.com/html/html_forms.asp
127
	#http://www.w3schools.com/tags/tag_fieldset.asp
128
	#備註:
129
	#建議增加enctype的參數設定application/json=>https://imququ.com/post/four-ways-to-post-data-in-http.html
130
	*/
131
	public static function start(&$conf){
132
 
133
		#初始化要回傳的變數
134
		$result=array();
135
 
136
		#設置當前執行的函式
137
		$result["function"]=__FUNCTION__;
138
 
139
		#初始化表單開始的語法
140
		$result["content"]="";
141
 
142
		#如果 $conf 不為陣列
143
		if(gettype($conf)!="array"){
144
 
145
			#設置執行失敗
146
			$result["status"]="false";
147
 
148
			#設置執行錯誤訊息
149
			$result["error"][]="\$conf變數須為陣列形態";
150
 
151
			#如果傳入的參數為 null
152
			if($conf==null){
153
 
154
				#設置執行錯誤訊息
155
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
156
 
157
				}#if end
158
 
159
			#回傳結果
160
			return $result;
161
 
162
			}#if end
163
 
164
		#檢查參數
165
		#函式說明:
166
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
167
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
168
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
169
		#$result["function"],當前執行的函式名稱.
170
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
171
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
172
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
173
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
174
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
175
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
176
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
177
		#必填參數:
178
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
179
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
180
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
181
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("action");
182
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double");
183
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string");
184
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
185
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
186
		#可省略參數:
187
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
188
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
189
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
190
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("legend","name","method","target","tableStart","tableClass","showFieldsetBorder");
191
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
192
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string","string","string","string","string","string");
193
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
194
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,null,"post","_top","false","__withoutBorder","false");
195
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
196
		#$conf["arrayCountEqualCheck"][]=array();
197
		#參考資料:
198
		#array_keys=>http://php.net/manual/en/function.array-keys.php
199
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
200
		unset($conf["variableCheck::checkArguments"]);
201
 
202
		#如果 $checkArguments["status"] 等於 "false"
203
		if($checkArguments["status"]=="false"){
204
 
205
			#設置錯誤識別
206
			$result["status"]="false";
207
 
208
			#設置錯誤訊息
209
			$result["error"]=$checkArguments;
210
 
211
			#回傳結果
212
			return $result;
213
 
214
			}#if end
215
 
216
		#如果 $checkArguments["passed"] 等於 "false"
217
		if($checkArguments["passed"]=="false"){
218
 
219
			#設置錯誤識別
220
			$result["status"]="false";
221
 
222
			#設置錯誤訊息
223
			$result["error"]=$checkArguments;
224
 
225
			#回傳結果
226
			return $result;
227
 
228
			}#if end
229
 
230
		#建立表格預設的 css 樣式 "__defaultTbaleCsssStyle"
231
		#函式說明:
232
		#創建 css 樣式
233
		#必填參數:
234
		$conf_createCssStyle["cssStyleName"]="__defaultTbaleCsssStyle";#為該 css 樣式的名稱,不能以數字開頭。
235
		$conf_createCssStyle["attributes"]=array("table-layout","word-break","width","border");#為屬性名稱,須為陣列值
236
		$conf_createCssStyle["content"]=array("fixed","break-all","100%","0px");#為屬性值,須為陣列值
237
		$css=css::createCssStyle($conf_createCssStyle);
238
		unset($conf_createCssStyle);
239
 
240
		#如果建立css樣式失敗
241
		if($css["status"]=="false"){
242
 
243
			#設置錯誤識別
244
			$result["status"]="false";
245
 
246
			#設置錯誤訊息
247
			$result["error"]=$css;
248
 
249
			#回傳結果
250
			return $result;
251
 
252
			}#if end
253
 
254
		#取得表格預設的css語法
255
		$result["content"]=$result["content"].$css["content"];
256
 
257
		#如果 $conf["name"] 存在
258
		if(isset($conf["name"])){
259
 
260
			#如果 $conf["name"] 不為 ""
261
			if($conf["name"]!=""){
262
 
263
				#設定name與id屬性
264
				$conf["name"]=" name=".$conf["name"]." id=".$conf["name"];
265
 
266
				}#if end
267
 
268
			}#if end
269
 
270
		#反之$conf["name"]不存在
271
		else{
272
 
273
			#設為 ""
274
			$conf["name"]="";
275
 
276
			}#esle end
277
 
278
		#判斷其值是否爲"true"
279
		if($conf["tableStart"]=="true"){
280
 
281
			#函式說明:
282
			#表格開始,可以設定表格的厚度和位置
283
			#回傳結果:
284
			#$result,表格開始的語法
285
			#必填寫的參數:
286
 
287
			#如果 $conf["tableClass"] 存在
288
			if(isset($conf["tableClass"])){
289
 
290
				#則套用指定的樣式
291
				$conf["table"]["start"]["class"]=$conf["tableClass"];
292
 
293
				}#if end
294
 
295
			#反之採用預設沒有線條的css樣式
296
			else{
297
 
298
				#則套用的預設的樣式
299
				$conf["table"]["start"]["class"]="__withoutBorder";
300
 
301
				}#else end
302
 
303
			$tableStart=table::start($conf["table"]["start"]);
304
			unset($conf["table"]["start"]);
305
 
306
			#如果表格開始失敗
307
			if($tableStart["status"]=="false"){
308
 
309
				#設置錯誤識別
310
				$result["status"]="false";
311
 
312
				#設置錯誤訊息
313
				$result["error"]=$tableStart;
314
 
315
				#回傳結果
316
				return $result;
317
 
318
				}#if end
319
 
320
			#串接表格開始的語法
321
			$result["content"]=$result["content"].$tableStart["content"];
322
 
323
			}#if end
324
 
325
		#如果有設置 $conf["legend"]
326
		if(isset($conf["legend"])){
327
 
328
			#設置要顯示的表單名稱
329
			$conf["legend"]="<legend>".$conf["legend"]."</legend>";
330
 
331
			}#if end
332
 
333
		#反之
334
		else{
335
 
336
			#設為 ""
337
			$conf["legend"]="";
338
 
339
			}#else end
340
 
341
		#如果 $conf["showFieldsetBorder"] 為 "false"
342
		if($conf["showFieldsetBorder"]=="false"){
343
 
344
			#設置要套用的樣式
345
			$conf["showFieldsetBorder"]=" class=\"__qbpwcf_fieldsetCssStyle\" ";
346
 
347
			}#if end
348
 
349
		#反之設為 ""
350
		else{
351
 
352
			$conf["showFieldsetBorder"]="";
353
 
354
			}#else end
355
 
356
		#設定要印出/回傳的變數內容
357
		$result["content"]=$result["content"]."<form action = ".$conf["action"]." class=\"__qbpwcf_hiddenFormBlank\" ".$conf["name"]." method = ".$conf["method"]." enctype= \"multipart/form-data\" target = ".$conf["target"]." ><fieldset ".$conf["showFieldsetBorder"]." >".$conf["legend"];
358
 
359
		#設置執行正常
360
		$result["status"]="true";
361
 
362
		#回傳結果
363
		return $result;
364
 
365
		}#function start end
366
 
367
	/*
368
	#函式說明:
369
	#表單結束
370
	#回傳結果:
371
	#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
372
	#$result["error"],錯誤訊息陣列.
373
	#$resutl["function"],當前執行的函式名稱.
374
	#$result["content"],表單結束的語法.
375
	#必填參數:
376
	#$conf["tableEnd"],字串,爲該表單是否要以</table>結尾。"true"爲是;"false"爲否。
377
	$conf["tableEnd"]="false";
378
	#可省略參數:
379
	#無.
380
	#參考資料:
381
	#無.
382
	#備註:
383
	#無.
384
	*/
385
	public static function end(&$conf){
386
 
387
		#初始化要回傳的變數
388
		$result=array();
389
 
390
		#設置當前執行的函式
391
		$result["function"]=__FUNCTION__;
392
 
393
		#初始化表單開始的語法
394
		$result["content"]="";
395
 
396
		#如果 $conf 不為陣列
397
		if(gettype($conf)!="array"){
398
 
399
			#設置執行失敗
400
			$result["status"]="false";
401
 
402
			#設置執行錯誤訊息
403
			$result["error"][]="\$conf變數須為陣列形態";
404
 
405
			#如果傳入的參數為 null
406
			if($conf==null){
407
 
408
				#設置執行錯誤訊息
409
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
410
 
411
				}#if end
412
 
413
			#回傳結果
414
			return $result;
415
 
416
			}#if end
417
 
418
		#檢查參數
419
		#函式說明:
420
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
421
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
422
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
423
		#$result["function"],當前執行的函式名稱.
424
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
425
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
426
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
427
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
428
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
429
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
430
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
431
		#必填參數:
432
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
433
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
434
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
435
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("tableEnd");
436
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double");
437
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string");
438
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
439
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
440
		#可省略參數:
441
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
442
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
443
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
444
		#$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("legend","name","method","target","tableStart","tableClass","showFieldsetBorder");
445
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
446
		#$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string","string","string","string","string","string");
447
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
448
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,"","post","_top",null,null,"false");
449
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
450
		#$conf["arrayCountEqualCheck"][]=array();
451
		#參考資料:
452
		#array_keys=>http://php.net/manual/en/function.array-keys.php
453
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
454
		unset($conf["variableCheck::checkArguments"]);
455
 
456
		#如果 $checkArguments["status"] 等於 "false"
457
		if($checkArguments["status"]=="false"){
458
 
459
			#設置錯誤識別
460
			$result["status"]="false";
461
 
462
			#設置錯誤訊息
463
			$result["error"]=$checkArguments;
464
 
465
			#回傳結果
466
			return $result;
467
 
468
			}#if end
469
 
470
		#如果 $checkArguments["passed"] 等於 "false"
471
		if($checkArguments["passed"]=="false"){
472
 
473
			#設置錯誤識別
474
			$result["status"]="false";
475
 
476
			#設置錯誤訊息
477
			$result["error"]=$checkArguments;
478
 
479
			#回傳結果
480
			return $result;
481
 
482
			}#if end
483
 
484
		#儲存表單結束的html
485
		$result["content"]=$result["content"]."</fieldset></form>";
486
 
487
		#判斷其值是否爲"true"
488
		if($conf["tableEnd"]=="true"){
489
 
490
			#儲存表格結尾的標籤
491
			$result["content"]=$result["content"]."</table>";
492
 
493
			}#if end
494
 
495
		#設置執行正常
496
		$result["status"]="true";
497
 
498
		#回傳結果
499
		return $result;
500
 
501
		}#function end end
502
 
503
	/*
504
	#函式說明:
505
	#若有表單透過POST或GET的方式傳送的資料,則將內容回傳,若是用GET的方式傳送則轉址到 $headerLocation
506
	#回傳結果:
507
	#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
508
	#$result["error"],錯誤訊息陣列.
509
	#$resutl["function"],當前執行的函式名稱.
510
	#$result["warning"],警告訊息.
511
	#$result["content"],接收到變數內容,若為null則代表要接收的變數不存在.
512
	#必填參數:
513
	#$conf["inputName"],字串,讀取表單的資料時用來辨別的名稱。
514
	$conf["inputName"]="";
515
	#可省略參數
516
	#$conf["refuseGetMethod"],字串,是否要擋 get 傳值,如果有設置,則不檔GET傳值。
517
	#$conf["refuseGetMethod"]="true";
518
	#$conf["transferLocation"],字串,如果是用GET傳值,則轉址到那個網址,預設爲資安素養網"https://isafe.moe.edu.tw/"
519
	#$conf["transferLocation"]="";
520
	#$conf["correctCharacter"],字串,如果爲"false",則不處理可能導致網頁出問題的字串,預設為"true".
521
	#$conf["correctCharacter"]="false";
522
	#參考資料:
523
	#伺服器端的變數 -> http://php.net/manual/en/reserved.variables.server.php
524
	#備註:
525
	#無.
526
	*/
527
	public static function responseInputData(&$conf){
528
 
529
		#初始化要回傳的變數
530
		$result=array();
531
 
532
		#設置當前執行的函式
533
		$result["function"]=__FUNCTION__;
534
 
535
		#初始化表單開始的語法
536
		$result["content"]="";
537
 
538
		#如果 $conf 不為陣列
539
		if(gettype($conf)!="array"){
540
 
541
			#設置執行失敗
542
			$result["status"]="false";
543
 
544
			#設置執行錯誤訊息
545
			$result["error"][]="\$conf變數須為陣列形態";
546
 
547
			#如果傳入的參數為 null
548
			if($conf==null){
549
 
550
				#設置執行錯誤訊息
551
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
552
 
553
				}#if end
554
 
555
			#回傳結果
556
			return $result;
557
 
558
			}#if end
559
 
560
		#檢查參數
561
		#函式說明:
562
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
563
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
564
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
565
		#$result["function"],當前執行的函式名稱.
566
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
567
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
568
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
569
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
570
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
571
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
572
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
573
		#必填參數:
574
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
575
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
576
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
577
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("inputName");
578
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double");
579
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string");
580
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
581
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
582
		#可省略參數:
583
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
584
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
585
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
586
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("refuseGetMethod","transferLocation","correctCharacter");
587
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
588
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string","string");
589
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
590
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("true","https://isafe.moe.edu.tw/","true");
591
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
592
		#$conf["arrayCountEqualCheck"][]=array();
593
		#參考資料:
594
		#array_keys=>http://php.net/manual/en/function.array-keys.php
595
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
596
		unset($conf["variableCheck::checkArguments"]);
597
 
598
		#如果 $checkArguments["status"] 等於 "false"
599
		if($checkArguments["status"]=="false"){
600
 
601
			#設置錯誤識別
602
			$result["status"]="false";
603
 
604
			#設置錯誤訊息
605
			$result["error"]=$checkArguments;
606
 
607
			#回傳結果
608
			return $result;
609
 
610
			}#if end
611
 
612
		#如果 $checkArguments["passed"] 等於 "false"
613
		if($checkArguments["passed"]=="false"){
614
 
615
			#設置錯誤識別
616
			$result["status"]="false";
617
 
618
			#設置錯誤訊息
619
			$result["error"]=$checkArguments;
620
 
621
			#回傳結果
622
			return $result;
623
 
624
			}#if end
625
 
626
		#如果$conf["security"]不存在,則代表採用預設值要防止get傳值
627
		if($conf["refuseGetMethod"]=="true"){
628
 
629
			#若有表單透過POST傳送的資料
630
			if(isset($_POST[$conf["inputName"]])){
631
 
632
				#如果 $conf["correctCharacter"] 爲 false
633
				if($conf["correctCharacter"]=="false"){
634
 
635
					#如果 $_POST[$conf["inputName"]] 存在
636
					if(isset($_POST[$conf["inputName"]])){
637
 
638
						#設置執行正常
639
						$result["status"]="true";
640
 
641
						#設置抓到的post數值
642
						$result["content"]=$_POST[$conf["inputName"]];
643
 
644
						#回傳結果
645
						return $result;
646
 
647
						}#if end
648
 
649
					}#if end
650
 
651
				#反之 $conf["correctCharacter"] 不爲 false
652
				else{
653
 
654
					#如果 $_POST[$conf["inputName"]] 存在
655
					if(isset($_POST[$conf["inputName"]])){
656
 
657
						#將字串作處理避免錯誤
658
						#函式說明:
659
						#處理字串避免網頁出錯
660
						#回傳結果:
661
						#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
662
						#$result["function"],當前執行的函數.
663
						#$result["content"],爲處理好的字串.
664
						#$result["error"],錯誤訊息陣列.
665
						#必填參數:
666
						$conf["stringProcess::correctCharacter"]["stringIn"]=$_POST[$conf["inputName"]];#爲要處理的字串
667
						#可省略的參數:
668
						#$conf["selectedCharacter"]=array("");#爲被選擇要處理的字串/字元,須爲陣列值。
669
							#若不設定則預設爲要將這些字串作替換("<",">","=","//","'","$","%","&","|","/*","*\/","#","\"")。
670
							#特殊字元,「\n」代表換行,「\t」代表tab鍵的間隔
671
						#$conf["changeTo"]=array();#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
672
						$correctCharacter=stringProcess::correctCharacter($conf["stringProcess::correctCharacter"]);
673
 
674
						#如果處理字串失敗
675
						if($correctCharacter["status"]=="false"){
676
 
677
							#設置錯誤識別
678
							$result["status"]="false";
679
 
680
							#設置錯誤訊息
681
							$result["error"]=$correctCharacter;
682
 
683
							#回傳結果
684
							return $result;
685
 
686
							}#if end
687
 
688
						#設置執行正常
689
						$result["status"]="true";
690
 
691
						#設置抓到的post數值
692
						$result["content"]=$correctCharacter["content"];
693
 
694
						#回傳結果
695
						return $result;
696
 
697
						}#if end
698
 
699
					}#else end
700
 
701
				}#if end
702
 
703
			#若有表單透過GET傳送的資料
704
			if(isset($_GET[$conf["inputName"]])){
705
 
706
				#進行轉址的動作
707
				$conf["header"]["redirectionNow"]["headerLocation"]=$conf["header"]["redirectionNow"]["transferLocation"];
708
				header::redirectionNow($conf["header"]["redirectionNow"]);
709
				unset($conf["header"]["redirectionNow"]);
710
 
711
				}#判斷式結束
712
 
713
			}#判斷式結束
714
 
715
		#如果不使用檔get傳值
716
		else{
717
 
718
			#若有表單透過POST傳送的資料
719
			if(isset($_POST[$conf["inputName"]])){
720
 
721
				#如果 $conf["correctCharacter"] 存在
722
				if(isset($conf["correctCharacter"])){
723
 
724
					#如果 $conf["correctCharacter"] 爲 false
725
					if($conf["correctCharacter"]=="false"){
726
 
727
						#設置執行正常
728
						$result["status"]="true";
729
 
730
						#設置抓到的post數值
731
						$result["content"]=$_POST[$conf["inputName"]];
732
 
733
						#回傳結果
734
						return $result;
735
 
736
						}#if end
737
 
738
					}#if end
739
 
740
				#反之
741
				else{
742
 
743
					#將字串作處理避免錯誤
744
					$correctCharacter_conf["stringIn"]=$_POST[$conf["inputName"]];#爲要處理的字串
745
					$correctCharacter=stringProcess::correctCharacter($correctCharacter_conf);
746
					unset($correctCharacter_conf);
747
 
748
					#如果處理字串失敗
749
					if($correctCharacter["status"]=="false"){
750
 
751
						#設置錯誤識別
752
						$result["status"]="false";
753
 
754
						#設置錯誤訊息
755
						$result["error"]=$correctCharacter;
756
 
757
						#回傳結果
758
						return $result;
759
 
760
						}#if end
761
 
762
					#設置執行正常
763
					$result["status"]="true";
764
 
765
					#設置抓到的post數值
766
					$result["content"]=$correctCharacter["content"];
767
 
768
					#回傳結果
769
					return $result;
770
 
771
					}#else end
772
 
773
				}#if end
774
 
775
			#若有表單透過GET傳送的資料
776
			if(isset($_GET[$conf["inputName"]])){
777
 
778
				#如果 $conf["correctCharacter"] 存在
779
				if(isset($conf["correctCharacter"])){
780
 
781
					#如果 $conf["correctCharacter"] 爲 false
782
					if($conf["correctCharacter"]=="false"){
783
 
784
						#設置執行正常
785
						$result["status"]="true";
786
 
787
						#設置抓到的get數值
788
						$result["content"]=$_GET[$conf["inputName"]];
789
 
790
						#回傳結果
791
						return $result;
792
 
793
						}#判斷式結束
794
 
795
					}#判斷式結束
796
 
797
				#反之
798
				else{
799
 
800
					#將字串作處理避免錯誤
801
					$correctCharacter_conf["stringIn"]=$_GET[$conf["inputName"]];#爲要處理的字串
802
					$correctCharacter=stringProcess::correctCharacter($correctCharacter_conf);
803
					unset($correctCharacter_conf);
804
 
805
					#如果處理字串失敗
806
					if($correctCharacter["status"]=="false"){
807
 
808
						#設置錯誤識別
809
						$result["status"]="false";
810
 
811
						#設置錯誤訊息
812
						$result["error"]=$correctCharacter;
813
 
814
						#回傳結果
815
						return $result;
816
 
817
						}#if end
818
 
819
					#設置執行正常
820
					$result["status"]="true";
821
 
822
					#設置抓到的get數值
823
					$result["content"]=$correctCharacter["content"];
824
 
825
					#回傳結果
826
					return $result;
827
 
828
					}#else end
829
 
830
				}#if end
831
 
832
			}#else end
833
 
834
		#執行到這邊代表要接收的變數不存在
835
		$result["warning"][]="表單變數「".$conf["inputName"]."」不存在";
836
 
837
		#設置執行正常
838
		$result["status"]="true";
839
 
840
		#設置接收到的內容為 null
841
		$result["content"]=null;
842
 
843
		#回傳結果
844
		return $result;
845
 
846
		}#funcion responseInputData end
847
 
848
	/*
849
	#函式說明:
850
	#若有表單透過POST或GET的方式傳送的資料,則將內容回傳,若是用GET的方式傳送則轉址到 $headerLocation
851
	#回傳結果:
852
	#$result["status"],是否執行成功,"true"代表執行成功;"false"代表執行失敗。
853
	#$result["function"],當前執行的函數名稱.
854
	#$result["error"],錯誤訊息。
855
	#$result["reveivedVarName"],接收到的變數名稱
856
	#$result["receivedVarValue"],接收到的變數內容
857
	#$result["HTTP_REFERER"],前一頁的網址,null為不存在的意思.
858
	#必填參數:
859
	#$conf["inputName"],字串,讀取表單的資料時用來辨別的名稱,
860
	$conf["inputName"]="";
861
	#可省略參數:
862
	#$conf["receiveType"],字串,要接收 post/POST 或 get/GET 的變數,預設爲 POST
863
	#$conf["receiveType"]="POST";
864
	#$conf["allowGet"],字串,是否要允許 get 傳值,"true",代表允許;"false" ,代表不允許,預設爲不允許。
865
	#$conf["allowGet"]="true";
866
	#$conf["limitPrePage"],字串陣列,限定前一頁的網址須爲改陣列裏面的其中一個位置,才能接收內容,不符合則轉址。
867
	#$conf["limitPrePage"]=array();
868
	#$conf["transferLocation"],字串,如果是用GET傳值,則轉址到那個網址,預設爲資安素養網"https://isafe.moe.edu.tw/"
869
	#$conf["transferLocation"]="";#
870
	#$conf["correctCharacter"],字串,如果爲"false",則不處理可能導致網頁出問題的字串,預設為"true".
871
	#$conf["correctCharacter"]="false";
872
	#參考資料:
873
	#伺服器端的變數 -> http://php.net/manual/en/reserved.variables.server.php
874
	#備註:
875
	#無.
876
	*/
877
	public static function responseInputDataSecurityEnhance(&$conf){
878
 
879
		#初始化要回傳的變數
880
		$result=array();
881
 
882
		#設置當前執行的函式
883
		$result["function"]=__FUNCTION__;
884
 
885
		#如果 $conf 不為陣列
886
		if(gettype($conf)!="array"){
887
 
888
			#設置執行失敗
889
			$result["status"]="false";
890
 
891
			#設置執行錯誤訊息
892
			$result["error"][]="\$conf變數須為陣列形態";
893
 
894
			#如果傳入的參數為 null
895
			if($conf==null){
896
 
897
				#設置執行錯誤訊息
898
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
899
 
900
				}#if end
901
 
902
			#回傳結果
903
			return $result;
904
 
905
			}#if end
906
 
907
		#檢查參數
908
		#函式說明:
909
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
910
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
911
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
912
		#$result["function"],當前執行的函式名稱.
913
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
914
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
915
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
916
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
917
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
918
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
919
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
920
		#必填參數:
921
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
922
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
923
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
924
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("inputName");
925
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double");
926
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string");
927
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
928
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
929
		#可省略參數:
930
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
931
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
932
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
933
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("receiveType","allowGet","limitPrePage","transferLocation","correctCharacter");
934
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
935
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string","array","string","string");
936
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
937
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("POST","false",null,"https://isafe.moe.edu.tw/","true");
938
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
939
		#$conf["arrayCountEqualCheck"][]=array();
940
		#參考資料:
941
		#array_keys=>http://php.net/manual/en/function.array-keys.php
942
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
943
		unset($conf["variableCheck::checkArguments"]);
944
 
945
		#如果 $checkArguments["status"] 等於 "false"
946
		if($checkArguments["status"]=="false"){
947
 
948
			#設置錯誤識別
949
			$result["status"]="false";
950
 
951
			#設置錯誤訊息
952
			$result["error"]=$checkArguments;
953
 
954
			#回傳結果
955
			return $result;
956
 
957
			}#if end
958
 
959
		#如果 $checkArguments["passed"] 等於 "false"
960
		if($checkArguments["passed"]=="false"){
961
 
962
			#設置錯誤識別
963
			$result["status"]="false";
964
 
965
			#設置錯誤訊息
966
			$result["error"]=$checkArguments;
967
 
968
			#回傳結果
969
			return $result;
970
 
971
			}#if end
972
 
973
		#如果 $_SERVER["HTTP_REFERER"] 存在
974
		if(isset($_SERVER["HTTP_REFERER"])){
975
 
976
			#取得前一個網址
977
			$result["HTTP_REFERER"]=basename($_SERVER["HTTP_REFERER"]);
978
 
979
			}#if end
980
 
981
		#反之 $_SERVER["HTTP_REFERER"] 不存在
982
		else{
983
 
984
			#設為 null
985
			$result["HTTP_REFERER"]=null;
986
 
987
			}#else end
988
 
989
		#初始化接收的變數內容
990
		#$result["reveivedVarName"]="";
991
		#$result["receivedVarValue"]="";
992
 
993
		#更正 post 的名稱
994
		if($conf["receiveType"]=="post"){
995
 
996
			$conf["receiveType"]="POST";
997
 
998
			}#if end
999
 
1000
		#更正 get 的名稱
1001
		if($conf["receiveType"]=="get"){
1002
 
1003
			$conf["receiveType"]="GET";
1004
 
1005
			}#if end
1006
 
1007
		#如果是 post 的傳送方式
1008
		if($conf["receiveType"]=="POST"){
1009
 
1010
			#如果不存在要抓取的變數
1011
			if(!isset($_POST[$conf["inputName"]])){
1012
 
1013
				#設置執行狀態爲 "false"
1014
				$result["status"]="false";
1015
 
1016
				#設置錯誤訊息
1017
				$result["error"]="key爲".$conf["inputName"]."的$".$conf["receiveType"]."變數不存在!";
1018
 
1019
				#回傳結果
1020
				return $result;
1021
 
1022
				}#if end
1023
 
1024
			#設置取得的變數內容
1025
			$result["reveivedVarName"]=$conf["inputName"];
1026
			$result["receivedVarValue"]=$_POST[$conf["inputName"]];
1027
 
1028
			}#if end
1029
 
1030
		#如果是 get 的傳送方式
1031
		if($conf["receiveType"]=="GET"){
1032
 
1033
			#如果不存在要抓取的變數
1034
			if(!isset($_GET[$conf["inputName"]])){
1035
 
1036
				#設置執行狀態爲 "false"
1037
				$result["status"]="false";
1038
 
1039
				#設置錯誤訊息
1040
				$result["error"]="key爲".$conf["inputName"]."的$".$receiveType."變數不存在!";
1041
 
1042
				#回傳結果
1043
				return $result;
1044
 
1045
				}#if end
1046
 
1047
			#設置取得的變數內容
1048
			$result["reveivedVarName"]=$conf["inputName"];
1049
			$result["receivedVarValue"]=$_GET[$conf["inputName"]];
1050
 
1051
			}#if end
1052
 
1053
		#如果 $conf["allowGet"] 等於 "fasle"
1054
		if($conf["allowGet"]=="false"){
1055
 
1056
			#如果是用 get 傳送資料
1057
			if(count($_GET)>0){
1058
 
1059
				#設定session變數後,立即轉址
1060
				#必填參數:
1061
				$conf["header"]["redirectionNow"]["headerLocation"]=$conf["transferLocation"];#為要轉址到的地方
1062
					#若爲 $_SERVER["PHP_SELF"],則爲回到目前頁面。
1063
					#全民資安素養網爲 https://isafe.moe.edu.tw/
1064
				#可省略參數:
1065
				#$conf["sessionName"]=array("","","");#可省略,可以指派3維session變數的內容,此處爲該3維session變數的名稱。
1066
				#$conf["sessionValue"]="";#可省略,該3維session變數的內容爲設爲何?
1067
				#參靠資料來源:
1068
				#http://php.net/manual/en/reserved.variables.server.php
1069
				header::redirectionNow($conf["header"]["redirectionNow"]);
1070
				unset($conf["header"]["redirectionNow"]);
1071
 
1072
				}#if end
1073
 
1074
			}#if end
1075
 
1076
		#如果 $conf["limitPrePage"] 有設定
1077
		if(isset($conf["limitPrePage"])){
1078
 
1079
			#如果 $conf["limitPrePage"] 為陣列型別
1080
			if(gettype($conf["limitPrePage"])=="array"){
1081
 
1082
				#檢查 前一拜訪頁的位址 是否在 $conf["limitPrePage"] 陣列裡面
1083
				#函式說明:
1084
				#檢查一個數值是否與陣列裏面的元素相同
1085
				#回傳的結果:
1086
				#$result["status"],"true"表示執行正確,"false"表示執行錯誤.
1087
				#$result["founded"],"true"表示有找到相同的,"false"表示沒有找到相同的.
1088
				#$result["error"],錯誤訊息
1089
				#$result["equalVarName"],相等的變數名稱或key.
1090
				#$result["equalVarValue"],相等的變數數值內容.
1091
				#必填參數:
1092
				$conf["search"]["getEqualVar"]["conditionElement"]=basename($_SERVER["HTTP_REFERER"]);#條件元素,要等於的元素內容.
1093
				$conf["search"]["getEqualVar"]["compareElements"]=$conf["limitPrePage"];#要比對的陣列變數內容.
1094
				$getMatchResult=search::getEqualVar($conf["search"]["getEqualVar"]);
1095
				unset($conf["search"]["getEqualVar"]);
1096
 
1097
				#如果檢查出錯
1098
				if($getMatchResult["status"]=="false"){
1099
 
1100
					#設置錯誤識別
1101
					$result["status"]="false";
1102
 
1103
					#設置錯誤訊息
1104
					$result["error"]=$getMatchResult;
1105
 
1106
					#回傳結果
1107
					return $result;
1108
 
1109
					}#if end
1110
 
1111
				#如果 $getMatchResult["founded"] 等於 "false"
1112
				if($getMatchResult["founded"]=="false"){
1113
 
1114
					#轉址
1115
					#函式說明:
1116
					#設定session變數後,立即轉址.
1117
					#回傳的結果:
1118
					#$result["status"],執行是否成功,"true"代表執行成功,"false"代表執行失敗.
1119
					#$result["error"],錯誤訊息陣列.
1120
					#必填參數:
1121
					#$conf["headerLocation"],為要轉址到的地方,若爲 $_SERVER["PHP_SELF"],則爲回到目前頁面,全民資安素養網爲 https://isafe.moe.edu.tw/.
1122
					$conf["header"]["redirectionNow"]["headerLocation"]=$conf["transferLocation"];
1123
					#可省略的參數:
1124
					#$conf["sessionName"],可省略,可以指派3維session變數的內容,此處爲該3維session變數的名稱.
1125
					#$conf["sessionName"]=array("","","");
1126
					#$conf["sessionValue"],可省略,該3維session變數的內容爲設爲何?
1127
					#$conf["sessionValue"]="";
1128
					#$conf["hostUnderNat"],為伺服器是否為透過NAT轉封包,且有設定轉址."true"為是,"true"的話會將轉址的服務修正,以免轉址到不能連線到的ip.
1129
					#$conf["hostUnderNat"]["protocol"],#要連線到伺服器的通訊協定,"http"與"https"是可以用的選項.
1130
					#$conf["hostUnderNat"]["protocol"]="https";
1131
					#$conf["hostUnderNat"]["localhostIP"],可省略,為伺服器的IP位置.
1132
					#$conf["hostUnderNat"]["localhostIP"]="";
1133
					#參靠資料來源:
1134
					#http://php.net/manual/en/reserved.variables.server.php
1135
					#建議:
1136
					#新增可應用於在虛擬機器下透過NAT上網,且透過轉port的方式也能正確地轉址的辦法.
1137
					header::redirectionNow($conf["header"]["redirectionNow"]);
1138
					unset($conf["header"]["redirectionNow"]);
1139
 
1140
					}#if end
1141
 
1142
				}#if end
1143
 
1144
			#反之代表參數型別有錯
1145
			else{
1146
 
1147
				#設置錯誤識別
1148
				$result["status"]="false";
1149
 
1150
				#設置錯誤訊息
1151
				$result["error"]="\$conf[\"limitPrePage\"]參數須為字串陣列";
1152
 
1153
				#回傳結果
1154
				return $result;
1155
 
1156
				}#else end
1157
 
1158
			}#if end
1159
 
1160
		#如果 $conf["correctCharacter"] 等於 true
1161
		if($conf["correctCharacter"]=="true"){
1162
 
1163
			#函式說明:
1164
			#處理字串避免網頁出錯
1165
			#回傳結果:
1166
			#$result,爲處理好的字串。
1167
			#必填參數:
1168
			$conf["stringProcess"]["correctCharacter"]["stringIn"]=$result["receivedVarValue"];#爲要處理的字串
1169
			#可省略的參數:
1170
			#$conf["selectedCharacter"]=array("");#爲被選擇要處理的字串/字元,須爲陣列值。
1171
				#若不設定則預設爲要將這些字串作替換("<",">",";","=","//","'","$","%","&","|","/*","*/","#")。
1172
			#$conf["changeTo"]=array();#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
1173
			$correctCharacter=stringProcess::correctCharacter($conf["stringProcess"]["correctCharacter"]);
1174
			unset($conf["stringProcess"]["correctCharacter"]);
1175
 
1176
			#如果修正字串失敗
1177
			if($correctCharacter["status"]=="false"){
1178
 
1179
				#設置錯誤識別
1180
				$result["status"]="false";
1181
 
1182
				#設置錯誤訊息
1183
				$result["error"]=$correctCharacter;
1184
 
1185
				#回傳結果
1186
				return $result;
1187
 
1188
				}#if end
1189
 
1190
			#取得修正後接收到的變數內容
1191
			$result["receivedVarValue"]=$correctCharacter["content"];
1192
 
1193
			}#if end
1194
 
1195
		#設置執行成功狀態
1196
		$result["status"]="true";
1197
 
1198
		#回傳結果
1199
		return $result;
1200
 
1201
		}#function responseInputDataSecurityEnhance end
1202
 
1203
	/*
1204
	#函式說明:
1205
	#可以處理多個透過GET、POST而來的資訊,儲存成變數。
1206
	#回傳結果:
1207
	#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
1208
	#$result["error"],錯誤訊息陣列.
1209
	#$resutl["function"],當前執行的函式名稱.
1210
	#$result["inputDataContent"],所接收的參數陣列。
1211
	#$result["inputDataCount"],總共接收到幾個元素。
1212
	#$result["inputDataKey"],所接收到的參數陣列元素key值。
1213
	#必填參數:
1214
	$conf["method"]="";#傳送過來的資料是用"post/POST"還是"get/GET"?
1215
	#可省略參數:
1216
	#$conf["stopGetMethod"]="true";#若設爲"true",則遇到以get方式傳送過來的數值時,則進行轉址,若為"false"則不轉址,預設為"true".
1217
	#$conf["transferLocation"]="";#遇到get傳值的時候要轉址到的頁面,預設爲資安素養網"https:#isafe.moe.edu.tw/"
1218
	#$conf["ignore"]=array();#如果要接收的變數名稱與該陣列其一元素一樣,則不放進要回傳的變數裏面。
1219
	#$conf["correctCharacter"]="false";#如果爲"false",則不處理可能導致網頁出問題的字串,預設爲要進行處理。
1220
	#參考資料:
1221
	#foreach 的用法 -> http:#php.net/manual/en/control-structures.foreach.php
1222
	#備註:
1223
	#建議改用 responseInputData 實作
1224
	*/
1225
	public static function responseMultiInputData(&$conf){
1226
 
1227
		#初始化要回傳的變數
1228
		$result=array();
1229
 
1230
		#設置當前執行的函式
1231
		$result["function"]=__FUNCTION__;
1232
 
1233
		#如果 $conf 不為陣列
1234
		if(gettype($conf)!="array"){
1235
 
1236
			#設置執行失敗
1237
			$result["status"]="false";
1238
 
1239
			#設置執行錯誤訊息
1240
			$result["error"][]="\$conf變數須為陣列形態";
1241
 
1242
			#如果傳入的參數為 null
1243
			if($conf==null){
1244
 
1245
				#設置執行錯誤訊息
1246
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
1247
 
1248
				}#if end
1249
 
1250
			#回傳結果
1251
			return $result;
1252
 
1253
			}#if end
1254
 
1255
		#檢查參數
1256
		#函式說明:
1257
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
1258
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1259
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
1260
		#$result["function"],當前執行的函式名稱.
1261
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
1262
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
1263
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
1264
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
1265
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
1266
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
1267
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
1268
		#必填參數:
1269
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
1270
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
1271
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
1272
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("method");
1273
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double");
1274
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string");
1275
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
1276
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
1277
		#可省略參數:
1278
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
1279
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
1280
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
1281
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("stopGetMethod","transferLocation","ignore","correctCharacter");
1282
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
1283
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string","array","string");
1284
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
1285
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("true","https://isafe.moe.edu.tw/",null,"true");
1286
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
1287
		#$conf["arrayCountEqualCheck"][]=array();
1288
		#參考資料:
1289
		#array_keys=>http://php.net/manual/en/function.array-keys.php
1290
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
1291
		unset($conf["variableCheck::checkArguments"]);
1292
 
1293
		#如果 $checkArguments["status"] 等於 "false"
1294
		if($checkArguments["status"]=="false"){
1295
 
1296
			#設置錯誤識別
1297
			$result["status"]="false";
1298
 
1299
			#設置錯誤訊息
1300
			$result["error"]=$checkArguments;
1301
 
1302
			#回傳結果
1303
			return $result;
1304
 
1305
			}#if end
1306
 
1307
		#如果 $checkArguments["passed"] 等於 "false"
1308
		if($checkArguments["passed"]=="false"){
1309
 
1310
			#設置錯誤識別
1311
			$result["status"]="false";
1312
 
1313
			#設置錯誤訊息
1314
			$result["error"]=$checkArguments;
1315
 
1316
			#回傳結果
1317
			return $result;
1318
 
1319
			}#if end
1320
 
1321
		#若有表單透過GET傳送的資料
1322
		#$_GET變數有可能有設定,但是是爲!isset,所以改用 !isset 來判斷是否爲空值
1323
		if(!isset($_GET)){
1324
 
1325
			#如果 $conf["stopGetMethod"] 有設定
1326
			if(isset($conf["stopGetMethod"])){
1327
 
1328
				#如果 $conf["stopGetMethod"] 爲 "true"
1329
				if($conf["stopGetMethod"]=="true"){
1330
 
1331
					#如果 $conf["transferLocation"] 有設定
1332
					if(isset($conf["transferLocation"])){
1333
 
1334
						#進行轉址的動作
1335
						$conf["header"]["redirectionNow"]["headerLocation"]=$conf["header"]["redirectionNow"]["transferLocation"];
1336
						header::redirectionNow($conf["header"]["redirectionNow"]);
1337
						unset($conf["header"]["redirectionNow"]);
1338
 
1339
						}#if end
1340
 
1341
					#如果 $conf["transferLocation"] 沒有設定
1342
					else{
1343
 
1344
						#進行預設的轉址位置
1345
						$conf["header"]["redirectionNow"]["headerLocation"]="https:#isafe.moe.edu.tw/";
1346
						header::redirectionNow($conf["header"]["redirectionNow"]);
1347
						unset($conf["header"]["redirectionNow"]);
1348
 
1349
						}#else end
1350
 
1351
					}#if end
1352
 
1353
				}#if end
1354
 
1355
			}#if end
1356
 
1357
		#初始化接收到的變數
1358
		$result["inputDataContent"]=array();
1359
 
1360
		#依據 $conf["method"] 判別
1361
		switch($conf["method"]){
1362
 
1363
			#如果 $conf["method"] 爲 "post"
1364
			case "post":
1365
 
1366
				#改為 "POST"
1367
				$conf["method"]="POST";
1368
 
1369
			#如果 $conf["method"] 爲 "POST"
1370
			case "POST":
1371
 
1372
				#陣列元素名稱的key編號初始值
1373
				$inputDataKeyNum=0;
1374
 
1375
				#將每個透過 POST 方式吃傳送過來的變數,轉存到變數裏面。
1376
				foreach($_POST as $elementKey => $elementValue){
1377
 
1378
					#如果 $conf["correctCharacter"]爲 "true"
1379
					if($conf["correctCharacter"]==="true"){
1380
 
1381
						#檢查是否邀接收的變數名稱是否為要忽略的清單裡面
1382
						#回傳結果:
1383
						#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1384
						#$result["function"],當前執行的函數
1385
						#$result["error"],函式錯誤訊息,若爲""則表示沒有錯誤
1386
						#$result["founded"][$i],若爲0代表沒有相同的元素;反之1代表有相同的元素,$i爲第i+1個參數判斷後的結果。
1387
						#必填參數:
1388
						$conf_checkEquality["inputElement"]=array($elementKey);#爲要進行比對的變數/數值。
1389
						$conf_checkEquality["blackBoxElement"]=$conf["ignore"];#爲用來比對的變數/數值陣列
1390
						$result_checkEquality=search::checkEquality($conf_checkEquality);
1391
						unset($conf_checkEquality);
1392
 
1393
						#如果檢查失敗
1394
						if($result_checkEquality["status"]=="false"){
1395
 
1396
							#設置錯誤識別
1397
							$result["status"]="false";
1398
 
1399
							#設置錯誤訊息
1400
							$result["error"]=$result_checkEquality;
1401
 
1402
							#回傳結果
1403
							return $result;
1404
 
1405
							}#if end
1406
 
1407
						#如果變數的名稱等於要忽略的變數項目之一
1408
						if($result_checkEquality["founded"][0]=="true"){
1409
 
1410
							#略過這個變數的處理
1411
							continue;
1412
 
1413
							}#if end						
1414
 
1415
						#處理字串避免網頁出錯
1416
						#函式說明:
1417
						#處理字串避免網頁出錯
1418
						#回傳結果:
1419
						#$result,爲處理好的字串。
1420
						#必天寫的參數:
1421
						$conf_correctCharacter["stringIn"]=$elementValue;#爲要處理的字串
1422
						#可省略的參數:
1423
						#$conf["selectedCharacter"]=array("");#爲被選擇要處理的字串/字元,須爲陣列值。
1424
							#若不設定則預設爲要將這些字串作替換(" ","<",">",";","=","#","*","'","$","%","&","|")。
1425
						#$conf["changeTo"];#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
1426
						$correctCharacter=stringProcess::correctCharacter($conf_correctCharacter);
1427
						unset($conf_correctCharacter);
1428
 
1429
						#如果矯正接收的變數內容失敗
1430
						if($correctCharacter["status"]=="false"){
1431
 
1432
							#設置錯誤識別
1433
							$result["status"]="false";
1434
 
1435
							#設置錯誤訊息
1436
							$result["error"]=$correctCharacter;
1437
 
1438
							#回傳結果
1439
							return $result;
1440
 
1441
							}#if end
1442
 
1443
						#取得處理的變數字串內容
1444
						$elementValue=$correctCharacter["content"];
1445
 
1446
						}#if end
1447
 
1448
					#如果 $conf["ignore"] 存在
1449
					if(isset($conf["ignore"])){
1450
 
1451
						#檢查是否邀接收的變數名稱是否為要忽略的清單裡面
1452
						#回傳結果:
1453
						#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1454
						#$result["function"],當前執行的函數
1455
						#$result["error"],函式錯誤訊息,若爲""則表示沒有錯誤
1456
						#$result["founded"][$i],若爲0代表沒有相同的元素;反之1代表有相同的元素,$i爲第i+1個參數判斷後的結果。
1457
						#必填參數:
1458
						$conf_checkEquality["inputElement"]=array($elementKey);#爲要進行比對的變數/數值。
1459
						$conf_checkEquality["blackBoxElement"]=$conf["ignore"];#爲用來比對的變數/數值陣列
1460
						$result_checkEquality=search::checkEquality($conf_checkEquality);
1461
						unset($conf_checkEquality);
1462
 
1463
						#如果檢查失敗
1464
						if($result_checkEquality["status"]=="false"){
1465
 
1466
							#設置錯誤識別
1467
							$result["status"]="false";
1468
 
1469
							#設置錯誤訊息
1470
							$result["error"]=$result_checkEquality;
1471
 
1472
							#回傳結果
1473
							return $result;
1474
 
1475
							}#if end
1476
 
1477
						#如果變數的名稱等於要忽略的變數項目之一
1478
						if($result_checkEquality["founded"][0]=="true"){
1479
 
1480
							#略過這個變數的取得
1481
							continue;
1482
 
1483
							}#if end
1484
 
1485
						#如果變數名稱不等於要忽略的變數項目之一
1486
						else{
1487
 
1488
							#將每個透過 POST 方式吃傳送過來的變數,轉存到 $result["inputDataContent"] 陣列變數裏面。
1489
							$result["inputDataContent"][$elementKey]=$elementValue;
1490
 
1491
							#將每個透過 POST 方式傳送過來的變數名稱,轉存到 $result["inputDataKey"] 陣列變數裏面。
1492
							$result["inputDataKey"][$inputDataKeyNum]=$elementKey;
1493
 
1494
							#陣列元素名稱的key加1
1495
							$inputDataKeyNum++;
1496
 
1497
							}#else end
1498
 
1499
						}#if end
1500
 
1501
					#反之不存在要忽略接收的變數
1502
					else{
1503
 
1504
						#將每個透過 POST 方式傳送過來的變數,轉存到 $result["inputDataContent"] 陣列變數裏面。
1505
						$result["inputDataContent"][$elementKey]=$elementValue;
1506
 
1507
						#將每個透過 POST 方式傳送過來的變數名稱,轉存到 $result["inputDataKey"] 陣列變數裏面。
1508
						$result["inputDataKey"][$inputDataKeyNum]=$elementKey;$inputDataKeyNum++;
1509
 
1510
						}#else end
1511
 
1512
					}#foreach end
1513
 
1514
				#取得總共有接收幾個變數
1515
				$result["inputDataCount"]=count($result["inputDataContent"]);
1516
 
1517
				#跳出 switch
1518
				break;
1519
 
1520
			#如果 $conf["method"] 爲 "get"
1521
			case "get":
1522
 
1523
				#改為 "get"
1524
				$conf["method"]="GET";
1525
 
1526
			#如果 $conf["method"] 爲 "GET"
1527
			case "GET":
1528
 
1529
				#陣列元素名稱的key編號初始值
1530
				$inputDataKeyNum=0;
1531
 
1532
				#將每個透過 GET 方式吃傳送過來的變數,轉存到變數裏面。
1533
				foreach($_GET as $elementKey => $elementValue){
1534
 
1535
					#如果 $conf["correctCharacter"] 爲 "true"
1536
					if($conf["correctCharacter"]==="true"){
1537
 
1538
						#處理字串避免網頁出錯
1539
						#函式說明:
1540
						#處理字串避免網頁出錯
1541
						#回傳結果:
1542
						#$result,爲處理好的字串。
1543
						#必天寫的參數:
1544
						$conf_correctCharacter["stringIn"]=$elementValue;#爲要處理的字串
1545
						#可省略的參數:
1546
						#$conf["selectedCharacter"]=array("");#爲被選擇要處理的字串/字元,須爲陣列值。
1547
							#若不設定則預設爲要將這些字串作替換(" ","<",">",";","=","#","*","'","$","%","&","|")。
1548
						#$conf["changeTo"];#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
1549
						$correctCharacter=stringProcess::correctCharacter($conf_correctCharacter);
1550
						unset($conf_correctCharacter);
1551
 
1552
						#如果矯正接收的變數內容失敗
1553
						if($correctCharacter["status"]=="false"){
1554
 
1555
							#設置錯誤識別
1556
							$result["status"]="false";
1557
 
1558
							#設置錯誤訊息
1559
							$result["error"]=$correctCharacter;
1560
 
1561
							#回傳結果
1562
							return $result;
1563
 
1564
							}#if end
1565
 
1566
						#取得處理的變數字串內容
1567
						$elementValue=$correctCharacter["content"];
1568
 
1569
						}#if end
1570
 
1571
					#如果 $conf["ignore"] 存在
1572
					if(isset($conf["ignore"])){
1573
 
1574
						#檢查是否邀接收的變數名稱是否為要忽略的清單裡面
1575
						#回傳結果:
1576
						#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1577
						#$result["function"],當前執行的函數
1578
						#$result["error"],函式錯誤訊息,若爲""則表示沒有錯誤
1579
						#$result["founded"][$i],若爲0代表沒有相同的元素;反之1代表有相同的元素,$i爲第i+1個參數判斷後的結果。
1580
						#必填參數:
1581
						$conf_checkEquality["inputElement"]=array($elementKey);#爲要進行比對的變數/數值。
1582
						$conf_checkEquality["blackBoxElement"]=$conf["ignore"];#爲用來比對的變數/數值陣列
1583
						$result_checkEquality=search::checkEquality($conf_checkEquality);
1584
						unset($conf_checkEquality);
1585
 
1586
						#如果檢查失敗
1587
						if($result_checkEquality["status"]=="false"){
1588
 
1589
							#設置錯誤識別
1590
							$result["status"]="false";
1591
 
1592
							#設置錯誤訊息
1593
							$result["error"]=$result_checkEquality;
1594
 
1595
							#回傳結果
1596
							return $result;
1597
 
1598
							}#if end
1599
 
1600
						#如果變數的名稱等於要忽略的變數項目之一
1601
						if($result_checkEquality["founded"][0]=="true"){
1602
 
1603
							#略過這個變數的取得
1604
							continue;
1605
 
1606
							}#if end
1607
 
1608
						#如果變數名稱不等於要忽略的變數項目之一
1609
						else{
1610
 
1611
							#將每個透過 POST 方式吃傳送過來的變數,轉存到 $result["inputDataContent"] 陣列變數裏面。
1612
							$result["inputDataContent"][$elementKey]=$elementValue;
1613
 
1614
							#將每個透過 POST 方式傳送過來的變數名稱,轉存到 $result["inputDataKey"] 陣列變數裏面。
1615
							$result["inputDataKey"][$inputDataKeyNum]=$elementKey;
1616
 
1617
							#陣列元素名稱的key加1
1618
							$inputDataKeyNum++;
1619
 
1620
							}#else end
1621
 
1622
						}#if end
1623
 
1624
					}#foreach end
1625
 
1626
				#取得總共有接收幾個變數
1627
				$result["inputDataCount"]=count($result["inputDataContent"]);
1628
 
1629
				#跳出 switch
1630
				break;
1631
 
1632
			}#switch end
1633
 
1634
		#執行到這邊代表正常
1635
		$result["status"]="true";
1636
 
1637
		#回傳結果陣列
1638
		return $result;
1639
 
1640
		}#responseMutiInputData function end
1641
 
1642
	/*
1643
	#函式說明:
1644
	#可以處理多個透過GET、POST而來的資訊,儲存成變數,同時限定傳送的方法、來源,來增加安全性,檢查有沒有皆收到必須要接收到的變數,沒有接收到的變數可以指定從session變數中取得.
1645
	#回傳結果:
1646
	#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
1647
	#$result["error"],錯誤訊息陣列.
1648
	#$resutl["function"],當前執行的函式名稱.
1649
	#$result["warning"],警告訊息陣列.
1650
	#$result["passed"],是否有皆收到全部該接收到的變數,若有設定$conf["checkedVarName"]的話,執行正常後會回傳該結果。
1651
	#$result["lostVarName"],沒有皆收到的變數名稱陣列
1652
	#$result["inputDataContent"],所接收的參數陣列.
1653
	#$result["inputDataContent"]["變數名稱"],所接收變數的內容.
1654
	#$result["inputDataCount"],從表單總共接收到幾個元素.
1655
	#$result["HTTP_REFERER"],前一頁的網址,null代表不存在.
1656
	#必填參數:
1657
	#$conf["method"],字串,傳送過來的資料是用"post/POST"還是"get/GET"?
1658
	$conf["method"]="";
1659
	#可省略參數:
1660
	#$conf["allowGet"],字串,是否要允許 get 傳值,"true",代表允許;"false" ,代表不允許,預設爲不允許.
1661
	#$conf["allowGet"]="true";
1662
	#$conf["limitPrePage"],字串陣列,是否要限定前一頁的網址為哪些,才能接收內容,不符合則轉址.
1663
	#$conf["limitPrePage"]=array("");
1664
	#$conf["transferLocation"],字串,遇到get傳值,或前一個頁面不符合要求時要轉址到的頁面,預設爲資安素養網"https://isafe.moe.edu.tw/"
1665
	#$conf["transferLocation"]="";
1666
	#$conf["ignore"]=字串陣列,如果要接收的變數名稱與該陣列其一元素一樣,則不放進要回傳的變數裏面.
1667
	#$conf["ignore"]=array();
1668
	#$conf["correctCharacter"]=,字串,如果爲"false",則不處理可能導致網頁出問題的字串,預設爲要進行處理.
1669
	#$conf["correctCharacter"]="false";
1670
	#$conf["checkedVarName"],字串陣列,為檢查是否有接收到哪些變數.
1671
	#$conf["checkedVarName"]=array();
1672
	#$conf["canBeEmptyString"],字串,用$conf["checkedVarName"]指定接收的變數名稱陣列,若接收到的內容為空字串是否算有接收到內容,預設為"false","true"代表接收到的內容可以為空字串,"false"代表接收到的內容不可以為空字串.
1673
	#$conf["canBeEmptyString"]="false";
1674
	#$conf["sessionNameArray"],陣列,若存在則代表若沒有從表單取得變數,則從session變數中取得內容,每個元素代表每個表單變數對應的session名稱,若不是要改用session方式取得變數內容的變數,請輸入null,數量請跟$conf["checkedVarName"]參數一致.
1675
	#$conf["sessionNameArray"]=array();
1676
	#$conf["unsetSessionArray"],陣列,與$conf["sessionNameArray"]對應的元素,是否要接收到變數後就卸除,"true"代表要卸除,"false"代表不要卸除.
1677
	#$conf["unsetSessionArray"]=array();
1678
	#$conf["recaptcha_url"],字串,有內容代表要檢查有無透過recaptcha於特定頁面網址認證過.
1679
	#$conf["recaptcha_url"]="";
1680
	#參考資料:
1681
	#foreach 的用法 -> http://php.net/manual/en/control-structures.foreach.php
1682
	#伺服器端的變數 -> http://php.net/manual/en/reserved.variables.server.php
1683
	#備註:
1684
	#表單變數的名稱若含有「.」,則會變成「-」。
1685
	*/
1686
	public static function responseMultiInputDataSecurityEnhance(&$conf){
1687
 
1688
		#設置回傳變數的初始值
1689
		$result=array();
1690
 
1691
		#設置當前執行的函式
1692
		$result["function"]=__FUNCTION__;
1693
 
1694
		#如果 $conf 不為陣列
1695
		if(gettype($conf)!="array"){
1696
 
1697
			#設置執行失敗
1698
			$result["status"]="false";
1699
 
1700
			#設置執行錯誤訊息
1701
			$result["error"][]="\$conf變數須為陣列形態";
1702
 
1703
			#如果傳入的參數為 null
1704
			if($conf==null){
1705
 
1706
				#設置執行錯誤訊息
1707
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
1708
 
1709
				}#if end
1710
 
1711
			#回傳結果
1712
			return $result;
1713
 
1714
			}#if end
1715
 
1716
		#如果 $_SERVER["HTTP_REFERER"] 存在
1717
		if(isset($_SERVER["HTTP_REFERER"])){
1718
 
1719
			#取得前一個網址
1720
			$result["HTTP_REFERER"]=basename($_SERVER["HTTP_REFERER"]);
1721
 
1722
			}#if end
1723
 
1724
		#反之 $_SERVER["HTTP_REFERER"] 不存在
1725
		else{
1726
 
1727
			#設為 null
1728
			$result["HTTP_REFERER"]=null;
1729
 
1730
			}#else end
1731
 
1732
		#檢查參數
1733
		#函式說明:
1734
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
1735
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1736
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
1737
		#$result["function"],當前執行的函式名稱.
1738
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
1739
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
1740
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
1741
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
1742
		#必填參數:
1743
		#$conf["variableCheck.checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
1744
		$conf["variableCheck.checkArguments"]["varInput"]=&$conf;
1745
		#$conf["variableCheck.checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
1746
		$conf["variableCheck.checkArguments"]["mustBeFilledVariableName"][]="method";
1747
		#$conf["variableCheck.checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double");
1748
		$conf["variableCheck.checkArguments"]["mustBeFilledVariableType"][]="string";
1749
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
1750
		$conf["variableCheck.checkArguments"]["referenceVarKey"]="variableCheck.checkArguments";
1751
		#可省略參數:
1752
		#$conf["variableCheck.checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"false"。
1753
		#$conf["variableCheck.checkArguments"]["canBeEmptyString"]="false";
1754
		#$conf["variableCheck.checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
1755
		$conf["variableCheck.checkArguments"]["skipableVariableName"][]="allowGet";
1756
		$conf["variableCheck.checkArguments"]["skipableVariableName"][]="limitPrePage";
1757
		$conf["variableCheck.checkArguments"]["skipableVariableName"][]="transferLocation";
1758
		$conf["variableCheck.checkArguments"]["skipableVariableName"][]="ignore";
1759
		$conf["variableCheck.checkArguments"]["skipableVariableName"][]="correctCharacter";
1760
		$conf["variableCheck.checkArguments"]["skipableVariableName"][]="checkedVarName";
1761
		$conf["variableCheck.checkArguments"]["skipableVariableName"][]="canBeEmptyString";
1762
		$conf["variableCheck.checkArguments"]["skipableVariableName"][]="sessionNameArray";
1763
		$conf["variableCheck.checkArguments"]["skipableVariableName"][]="unsetSessionArray";
1764
		$conf["variableCheck.checkArguments"]["skipableVariableName"][]="recaptcha_url";
1765
		#$conf["variableCheck.checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
1766
		$conf["variableCheck.checkArguments"]["skipableVariableType"][]="string";
1767
		$conf["variableCheck.checkArguments"]["skipableVariableType"][]="array";
1768
		$conf["variableCheck.checkArguments"]["skipableVariableType"][]="string";
1769
		$conf["variableCheck.checkArguments"]["skipableVariableType"][]="array";
1770
		$conf["variableCheck.checkArguments"]["skipableVariableType"][]="string";
1771
		$conf["variableCheck.checkArguments"]["skipableVariableType"][]="array";
1772
		$conf["variableCheck.checkArguments"]["skipableVariableType"][]="string";
1773
		$conf["variableCheck.checkArguments"]["skipableVariableType"][]="array";
1774
		$conf["variableCheck.checkArguments"]["skipableVariableType"][]="array";
1775
		$conf["variableCheck.checkArguments"]["skipableVariableType"][]="string";
1776
		#$conf["variableCheck.checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,"null"代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
1777
		$conf["variableCheck.checkArguments"]["skipableVarDefaultValue"][]="false";
1778
		$conf["variableCheck.checkArguments"]["skipableVarDefaultValue"][]=null;
1779
		$conf["variableCheck.checkArguments"]["skipableVarDefaultValue"][]="https://isafe.moe.edu.tw/";
1780
		$conf["variableCheck.checkArguments"]["skipableVarDefaultValue"][]=null;
1781
		$conf["variableCheck.checkArguments"]["skipableVarDefaultValue"][]="true";
1782
		$conf["variableCheck.checkArguments"]["skipableVarDefaultValue"][]=null;
1783
		$conf["variableCheck.checkArguments"]["skipableVarDefaultValue"][]="false";
1784
		$conf["variableCheck.checkArguments"]["skipableVarDefaultValue"][]=null;
1785
		$conf["variableCheck.checkArguments"]["skipableVarDefaultValue"][]=null;
1786
		$conf["variableCheck.checkArguments"]["skipableVarDefaultValue"][]=null;
1787
		#$conf["variableCheck.checkArguments"]["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
1788
		$conf["variableCheck.checkArguments"]["arrayCountEqualCheck"][]=array("checkedVarName","sessionNameArray","unsetSessionArray");
1789
		$checkResult=variableCheck::checkArguments($conf["variableCheck.checkArguments"]);
1790
		unset($conf["variableCheck.checkArguments"]);
1791
 
1792
		#如果檢查失敗
1793
		if($checkResult["status"]=="false"){
1794
 
1795
			#設置錯誤
1796
			$result["status"]="false";
1797
 
1798
			#設置錯誤訊息
1799
			$result["error"]=$checkResult;
1800
 
1801
			#回傳結果
1802
			return $result;
1803
 
1804
			}#if end
1805
 
1806
		#如果檢查不通過
1807
		if($checkResult["passed"]=="false"){
1808
 
1809
			#設置錯誤
1810
			$result["status"]="false";
1811
 
1812
			#設置錯誤訊息
1813
			$result["error"]=$checkResult;
1814
 
1815
			#回傳結果
1816
			return $result;
1817
 
1818
			}#if end
1819
 
1820
		#如果有設置要檢查有無於特定網址取得google recaptcha認證
1821
		if(isset($conf["recaptcha_url"])){
1822
 
1823
			#函式說明:
1824
			#檢查是否擁有透過gl_reCAPTCHA_server授權的session網址記錄.
1825
			#回傳結果:
1826
			#$result["status"],執行正常與否,"false"代表不正常;"true"代表正常.
1827
			#$result["error"],錯誤訊息陣列.
1828
			#$result["function"],函式名稱.
1829
			#$result["passed"],"true"代表通過檢查,"false"代表沒有通過檢查.
1830
			#必填參數:
1831
			#$conf["url"],字串,要有什麼的網址才通過檢查
1832
			$conf["authenticate::gl_reCAPTCH_authCheck"]["url"]=$conf["recaptcha_url"];
1833
			$gl_reCAPTCH_authCheck=authenticate::gl_reCAPTCH_authCheck($conf["authenticate::gl_reCAPTCH_authCheck"]);
1834
			unset($conf["authenticate::gl_reCAPTCH_authCheck"]);
1835
 
1836
			#如果檢驗有無通過 google reCAPTCHA 的記錄 失敗
1837
			if($gl_reCAPTCH_authCheck["status"]==="false"){
1838
 
1839
				#設置錯誤
1840
				$result["status"]="false";
1841
 
1842
				#設置錯誤訊息
1843
				$result["error"]=$gl_reCAPTCH_authCheck;
1844
 
1845
				#回傳結果
1846
				return $result;
1847
 
1848
				}#if end
1849
 
1850
			#如果無通過 google reCAPTCHA 的記錄
1851
			if($gl_reCAPTCH_authCheck["passed"]==="false"){
1852
 
1853
				#設置正常
1854
				$result["status"]="true";
1855
 
1856
				#設置沒通過測試
1857
				$result["passed"]="false";
1858
 
1859
				#設置錯誤訊息
1860
				$result["error"]=$gl_reCAPTCH_authCheck;
1861
 
1862
				#回傳結果
1863
				return $result;
1864
 
1865
				}#if end
1866
 
1867
			}#if end
1868
 
1869
		#如果 $conf["method"] 為 get
1870
		if($conf["method"]=="get"){
1871
 
1872
			#將之轉換為 "GET"
1873
			$conf["method"]="GET";
1874
 
1875
			}#if end
1876
 
1877
		#如果 $conf["method"] 為 post
1878
		if($conf["method"]=="post"){
1879
 
1880
			#將之轉換為 "POST"
1881
			$conf["method"]="POST";
1882
 
1883
			}#if end
1884
 
1885
		#如果不允許 get 要求
1886
		if($conf["allowGet"]=="false"){
1887
 
1888
			#如果有 get 要求存在
1889
			if(count($_GET)>0){
1890
 
1891
				#轉址
1892
				#函式說明:
1893
				#設定session變數後,立即轉址.
1894
				#回傳的結果:
1895
				#$result["status"],執行是否成功,"true"代表執行成功,"false"代表執行失敗.
1896
				#$result["error"],錯誤訊息陣列.
1897
				#必填參數:
1898
				#$conf["headerLocation"],為要轉址到的地方,若爲 $_SERVER["PHP_SELF"],則爲回到目前頁面,全民資安素養網爲 https://isafe.moe.edu.tw/.
1899
				$conf["header"]["redirectionNow"]["headerLocation"]=$conf["transferLocation"];
1900
				#可省略的參數:
1901
				#$conf["sessionName"],可省略,可以指派3維session變數的內容,此處爲該3維session變數的名稱.
1902
				#$conf["sessionName"]=array("","","");
1903
				#$conf["sessionValue"],可省略,該3維session變數的內容爲設爲何?
1904
				#$conf["sessionValue"]="";
1905
				#$conf["hostUnderNat"],為伺服器是否為透過NAT轉封包,且有設定轉址."true"為是,"true"的話會將轉址的服務修正,以免轉址到不能連線到的ip.
1906
				#$conf["hostUnderNat"]["protocol"],#要連線到伺服器的通訊協定,"http"與"https"是可以用的選項.
1907
				#$conf["hostUnderNat"]["protocol"]="https";
1908
				#$conf["hostUnderNat"]["localhostIP"],可省略,為伺服器的IP位置.
1909
				#$conf["hostUnderNat"]["localhostIP"]="";
1910
				#參靠資料來源:
1911
				#http://php.net/manual/en/reserved.variables.server.php
1912
				#建議:
1913
				#新增可應用於在虛擬機器下透過NAT上網,且透過轉port的方式也能正確地轉址的辦法.
1914
				header::redirectionNow($conf["header"]["redirectionNow"]);
1915
				unset($conf["header"]["redirectionNow"]);
1916
 
1917
				#debug
1918
				#echo "<p><p>有$_GET變數<p>";
1919
				#var_dump($_GET);
1920
 
1921
				}#if end
1922
 
1923
			}#if end
1924
 
1925
		#如果 $conf["limitPrePage"] 有設定
1926
		if(isset($conf["limitPrePage"])){
1927
 
1928
			#如果有前一頁瀏覽的網址記錄
1929
			if($result["HTTP_REFERER"]!=null){
1930
 
1931
				#檢查 前一拜訪頁的位址 是否在 $conf["limitPrePage"] 陣列裡面
1932
				#函式說明:
1933
				#檢查一個數值是否與陣列裏面的元素相同
1934
				#回傳的結果:
1935
				#$result["status"],"true"表示執行正確,"false"表示執行錯誤.
1936
				#$result["founded"],"true"表示有找到相同的,"false"表示沒有找到相同的.
1937
				#$result["error"],錯誤訊息
1938
				#$result["equalVarName"],相等的變數名稱或key.
1939
				#$result["equalVarValue"],相等的變數數值內容.
1940
				#必填參數:
1941
				$conf["search"]["getEqualVar"]["conditionElement"]=$result["HTTP_REFERER"];#條件元素,要等於的元素內容.
1942
				$conf["search"]["getEqualVar"]["compareElements"]=$conf["limitPrePage"];#要比對的陣列變數內容.
1943
				$getMatchResult=search::getEqualVar($conf["search"]["getEqualVar"]);
1944
				unset($conf["search"]["getEqualVar"]);
1945
 
1946
				#如果檢查出錯
1947
				if($getMatchResult["status"]=="false"){
1948
 
1949
					#設置錯誤識別
1950
					$result["status"]="false";
1951
 
1952
					#設置錯誤訊息
1953
					$result["error"]=$getMatchResult;
1954
 
1955
					#回傳結果
1956
					return $result;
1957
 
1958
					}#if end
1959
 
1960
				#如果 $getMatchResult["founded"] 等於 "false"
1961
				if($getMatchResult["founded"]==="false"){
1962
 
1963
					#轉址
1964
					#函式說明:
1965
					#設定session變數後,立即轉址.
1966
					#回傳的結果:
1967
					#$result["status"],執行是否成功,"true"代表執行成功,"false"代表執行失敗.
1968
					#$result["error"],錯誤訊息陣列.
1969
					#必填參數:
1970
					#$conf["headerLocation"],為要轉址到的地方,若爲 $_SERVER["PHP_SELF"],則爲回到目前頁面,全民資安素養網爲 https://isafe.moe.edu.tw/.
1971
					$conf["header"]["redirectionNow"]["headerLocation"]=$conf["transferLocation"];
1972
					#可省略的參數:
1973
					#$conf["sessionName"],可省略,可以指派3維session變數的內容,此處爲該3維session變數的名稱.
1974
					#$conf["sessionName"]=array("","","");
1975
					#$conf["sessionValue"],可省略,該3維session變數的內容爲設爲何?
1976
					#$conf["sessionValue"]="";
1977
					#$conf["hostUnderNat"],為伺服器是否為透過NAT轉封包,且有設定轉址."true"為是,"true"的話會將轉址的服務修正,以免轉址到不能連線到的ip.
1978
					#$conf["hostUnderNat"]["protocol"],#要連線到伺服器的通訊協定,"http"與"https"是可以用的選項.
1979
					#$conf["hostUnderNat"]["protocol"]="https";
1980
					#$conf["hostUnderNat"]["localhostIP"],可省略,為伺服器的IP位置.
1981
					#$conf["hostUnderNat"]["localhostIP"]="";
1982
					#參靠資料來源:
1983
					#http://php.net/manual/en/reserved.variables.server.php
1984
					#建議:
1985
					#新增可應用於在虛擬機器下透過NAT上網,且透過轉port的方式也能正確地轉址的辦法.
1986
					header::redirectionNow($conf["header"]["redirectionNow"]);
1987
					unset($conf["header"]["redirectionNow"]);
1988
 
1989
					}#if end
1990
 
1991
				}#if end
1992
 
1993
			#反之沒有記錄前一頁瀏覽的頁面
1994
			else{
1995
 
1996
				#設置警告訊息
1997
				$result["warning"][]="無法取得前一個瀏覽的頁面";
1998
 
1999
				}#else end
2000
 
2001
			}#if end
2002
 
2003
		#依據 $conf["method"] 來分類判斷
2004
		switch($conf["method"]){
2005
 
2006
			#如果 $conf["method"] 為 "GET"
2007
			case "GET":
2008
 
2009
				#抓取每個$_GET變數
2010
				$getVarArray=$_GET;
2011
 
2012
				#如果接收的$_GET變數數量等於0
2013
				if(count($getVarArray)==0){
2014
 
2015
					#設置抓到的表單變數數量為0
2016
					$result["inputDataCount"]=0;
2017
 
2018
					#設置空的 $result["inputDataContent"] 陣列
2019
					$result["inputDataContent"]=array();
2020
 
2021
					}#if end
2022
 
2023
				#反之代表有 get 變數
2024
				else{
2025
 
2026
					#針對每個$_GET變數
2027
					foreach($getVarArray as $getVarKey=>$getVarValue){
2028
 
2029
						#轉存每個$_GET變數
2030
						$result["inputDataContent"][$getVarKey]=$getVarValue;
2031
 
2032
						}#foreach end
2033
 
2034
					}#else end
2035
 
2036
				#中斷
2037
				break;
2038
 
2039
			#如果 $conf["method"] 為 "POST"
2040
			case "POST":
2041
 
2042
				#抓取每個$_POST變數
2043
				$postVarArray=$_POST;
2044
 
2045
				#如果接收的$_POST變數數量等於0
2046
				if(count($postVarArray)==0){
2047
 
2048
					#設置抓到的表單變數數量為0
2049
					$result["inputDataCount"]=0;
2050
 
2051
					#設置空的 $result["inputDataContent"] 陣列
2052
					$result["inputDataContent"]=array();
2053
 
2054
					}#if end
2055
 
2056
				#反之有post變數
2057
				else{
2058
 
2059
					#針對每個$_POST變數
2060
					foreach($postVarArray as $postVarKey=>$postVarValue){
2061
 
2062
						#取得每個$_POST變數
2063
						$result["inputDataContent"][$postVarKey]=$postVarValue;
2064
 
2065
						}#foreach end
2066
 
2067
					}#else end
2068
 
2069
				#中斷
2070
				break;
2071
 
2072
			#如果 $conf["method"] 不為以上數值
2073
			default:
2074
 
2075
				#設置錯誤
2076
				$result["status"]="false";
2077
 
2078
				#設置錯誤訊息
2079
				$result["error"][]="\$conf[\"method\"]須為 \"get\" 、 \"GET\" 、 \"post\" 、 \"POST\" ";
2080
 
2081
				#回傳結果
2082
				return $result;
2083
 
2084
			}#switch end
2085
 
2086
		#如果 $conf["ignore"] 有設置
2087
		if(isset($conf["ignore"])){
2088
 
2089
			#初始化暫存有那些key
2090
			$inputDataKey=array();
2091
 
2092
			#依據 $result["inputDataContent"] 的數目
2093
			foreach($result["inputDataContent"] as $key=>$value){
2094
 
2095
				#儲存key
2096
				$inputDataKey[$key]=$key;
2097
 
2098
				}#foreache end
2099
 
2100
			#函式說明:
2101
			#檢查多個字串裡面是否有多個關鍵字
2102
			#回傳結果:
2103
			#$result["status"],整體來說,執行是否成功,"true"代表執行成功,"false"代表執行失敗。
2104
			#$result["function"],當前執行的函數名稱.
2105
			#$result["foundedFalseKey"],$result[$i]["founded"]結果為"false"的元素key陣列。
2106
			#$result["foundedAll"],是否每個關鍵字都有找到,"true"代表每個都有找到,"false"代表沒有每個都找到.
2107
			#必填參數:
2108
			$conf["search"]["findManyKeyWordsFromManyString"]["keyWords"]=$conf["ignore"];#想要搜尋的關鍵字
2109
			$conf["search"]["findManyKeyWordsFromManyString"]["stringArray"]=$inputDataKey;#要被搜尋的字串內容陣列
2110
			#可省略參數:
2111
			$conf["search"]["findManyKeyWordsFromManyString"]["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
2112
			$filted=search::findManyKeyWordsFromManyString($conf["search"]["findManyKeyWordsFromManyString"]);
2113
			unset($conf["search"]["findManyKeyWordsFromManyString"]);
2114
 
2115
			#debug
2116
			#var_dump($filted);
2117
 
2118
			#如果檢查多個字串裡面是否有多個關鍵字失敗
2119
			if($filted["status"]=="false"){
2120
 
2121
				#設置錯誤
2122
				$result["status"]="false";
2123
 
2124
				#設置錯誤訊息
2125
				$result["error"]=$filted;
2126
 
2127
				#回傳結果
2128
				return $result;
2129
 
2130
				}#if end
2131
 
2132
			#如果全部都有找到
2133
			if($filted["foundedAll"]=="true"){
2134
 
2135
				#取得沒被篩選掉的內容
2136
				$result["inputDataContent"]=array();
2137
 
2138
				}#if end
2139
 
2140
			#反之為有些沒有符合
2141
			else{
2142
 
2143
				#另存 $result["inputDataContent"]
2144
				$temp["inputDataContent"]=$result["inputDataContent"];
2145
 
2146
				#移除舊的 $result["inputDataContent"]
2147
				unset($result["inputDataContent"]);
2148
 
2149
				#依據沒被篩選掉的變數key
2150
				foreach($filted["foundedFalseKey"] as $key){
2151
 
2152
					#取得不是要忽略的表單變數
2153
					$result["inputDataContent"][$key]=$temp["inputDataContent"][$key];
2154
 
2155
					}#foreach end
2156
 
2157
				#移除 $temp["inputDataContent"]
2158
				unset($temp["inputDataContent"]);
2159
 
2160
				}#else end
2161
 
2162
			}#if end
2163
 
2164
		#如果 $conf["correctCharacter"] 為 "true" 且 $result["inputDataContent"]元素數量大於0 則代表要過濾字串
2165
		if($conf["correctCharacter"]=="true" && count($result["inputDataContent"])>0 ){
2166
 
2167
			#如果 $result["inputDataContent"] 的元素不為字串就會出錯。
2168
 
2169
			#函式說明:
2170
			#處理多個字串避免網頁出錯
2171
			#回傳結果:
2172
			#$result["status"],"true"代表執行成功,"false"代表執行失敗。
2173
			#$result["error"],錯誤訊息
2174
			#$result["processedStrArray"],處理好的字串陣列
2175
			#必填參數:
2176
			$conf["stringProcess"]["correctMutiStrCharacter"]["stringIn"]=$result["inputDataContent"];#爲要處理的字串陣列
2177
			#可省略的參數:
2178
			#$conf["selectedCharacter"]=array("");#爲被選擇要處理的字串/字元,須爲陣列值。
2179
				#若不設定則預設爲要將這些字串作替換("<",">",";","=","//","'","$","%","&","|","/*","*\/","#")。
2180
				#特殊字元,「\n」代表換行,「\t」代表tab鍵的間隔
2181
			#$conf["changeTo"]=array();#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
2182
			$peocessedStrArray=stringProcess::correctMutiStrCharacter($conf["stringProcess"]["correctMutiStrCharacter"]);
2183
			unset($conf["stringProcess"]);
2184
 
2185
			#如果分割失敗
2186
			if($peocessedStrArray["status"]=="false"){
2187
 
2188
				#設置執行不正常
2189
				$result["status"]="false";
2190
 
2191
				#設置執行錯誤訊息
2192
				$result["error"]=$peocessedStrArray;
2193
 
2194
				#回傳結果
2195
				return $result;
2196
 
2197
				}#if end
2198
 
2199
			#取得處理好的字串陣列
2200
			$result["inputDataContent"]=$peocessedStrArray["processedStrArray"];
2201
 
2202
			}#if end
2203
 
2204
		#取得接收到的變數數量
2205
		$result["inputDataCount"]=count($result["inputDataContent"]);
2206
 
2207
		#如果 $conf["checkedVarName"] 有設定
2208
		if(isset($conf["checkedVarName"])){
2209
 
2210
			#初始化沒有接收的變數陣列
2211
			$result["lostVarName"]=array();
2212
 
2213
			#檢查變數是否有皆收到
2214
			#函式說明:
2215
			#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
2216
			#回傳的結果:
2217
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
2218
			#$reuslt["error"],執行不正常結束的錯訊息陣列.
2219
			#$result["function"],當前執行的函式名稱.
2220
			#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
2221
			#$result["content"][$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
2222
			#$result["content"][$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
2223
			#$result["content"][$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
2224
			#必填參數:
2225
			$conf["variableCheck.isexistMulti"]["varInput"]=$result["inputDataContent"];#要檢查的陣列變數
2226
			$conf["variableCheck.isexistMulti"]["variableCheck"]=$conf["checkedVarName"];#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
2227
			#可省略參數:
2228
			#$conf["variableType"]=array();#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double");
2229
			$conf["variableCheck.isexistMulti"]["canBeEmptyString"]=$conf["canBeEmptyString"];#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
2230
			$checkShouldBeExistedVar=variableCheck::isexistMulti($conf["variableCheck.isexistMulti"]);
2231
			#var_dump($conf["variableCheck.isexistMulti"]);
2232
			unset($conf["variableCheck.isexistMulti"]);
2233
 
2234
			#var_dump($checkShouldBeExistedVar);
2235
 
2236
			#如果檢查要接收到的變數失敗
2237
			if($checkShouldBeExistedVar["status"]=="false"){
2238
 
2239
				#設置錯誤
2240
				$result["status"]="false";
2241
 
2242
				#設置錯誤訊息
2243
				$result["error"]=$checkShouldBeExistedVar;
2244
 
2245
				#回傳結果
2246
				return $result;
2247
 
2248
				}#if end
2249
 
2250
			#如果 $checkShouldBeExistedVar["passed"] 等於 "false"
2251
			if($checkShouldBeExistedVar["passed"]=="false"){
2252
 
2253
				#設置沒有抓到全部的變數
2254
				$result["passed"]="false";
2255
 
2256
				#取得是哪些變數是沒有接收到
2257
				foreach($conf["checkedVarName"] as $varName){
2258
 
2259
					#如果該變數沒抓到
2260
					if($checkShouldBeExistedVar["content"][$varName]["varExist"]=="false"){
2261
 
2262
						#取得沒抓到的變數名稱
2263
						$result["lostVarName"][]=$varName;
2264
 
2265
						}#if end
2266
 
2267
					}#for end
2268
 
2269
				}#if end
2270
 
2271
			#反之代表該取得的變數都有抓到
2272
			else{
2273
 
2274
				#設置沒有抓到全部的變數
2275
				$result["passed"]="true";
2276
 
2277
				}#if end
2278
 
2279
			}#if end
2280
 
2281
		#如果 $result["lostVarName"] 存在
2282
		if(isset($result["lostVarName"])){
2283
 
2284
			#如果找不到的變數($result["lostVarName"])數量大於0
2285
			if(count($result["lostVarName"])>0){
2286
 
2287
				#如果 $conf["sessionNameArray"] 有設置
2288
				if(isset($conf["sessionNameArray"])){
2289
 
2290
					#複製遺失的變數名稱陣列
2291
					$copy["lostVarName"]=$result["lostVarName"];
2292
 
2293
					#有幾個遺失的變數就執行幾次
2294
					for($i=0;$i<count($copy["lostVarName"]);$i++){
2295
 
2296
						#尋找 $result["lostVarName"][$i] 在 $conf["checkedVarName"] 中的哪一個,key為何?
2297
						#函式說明:
2298
						#檢查一個數值是否與陣列裏面的元素相同,找到一個相符合的元素後就會停止搜尋.
2299
						#回傳的結果:
2300
						#$result["status"],"true"表示執行正確,"false"表示執行錯誤.
2301
						#$result["founded"],"true"表示有找到相同的,"false"表示沒有找到相同的.
2302
						#$result["error"],錯誤訊息
2303
						#$result["equalVarName"],相等的變數名稱或key.
2304
						#$result["equalVarValue"],相等的變數數值內容.
2305
						#必填參數:
2306
						$conf["search::getEqualVar"]["conditionElement"]=$copy["lostVarName"][$i];#條件元素,要等於的元素內容.
2307
						$conf["search::getEqualVar"]["compareElements"]=$conf["checkedVarName"];#要比對的陣列變數內容.
2308
						$searchResult=search::getEqualVar($conf["search::getEqualVar"]);
2309
						unset($conf["search::getEqualVar"]);
2310
 
2311
						#如果尋找失敗
2312
						if($searchResult["status"]=="false"){
2313
 
2314
							#設置執行失敗
2315
							$result["status"]="false";
2316
 
2317
							#設置執行錯誤
2318
							$result["error"]=$searchResult;
2319
 
2320
							#回傳結果
2321
							return $result;
2322
 
2323
							}#if end
2324
 
2325
						#如果沒有找到對應的變數名稱
2326
						if($searchResult["founded"]=="false"){
2327
 
2328
							#設置執行失敗
2329
							$result["status"]="false";
2330
 
2331
							#設置執行錯誤
2332
							$result["error"]=$searchResult;
2333
 
2334
							#回傳結果
2335
							return $result;
2336
 
2337
							}#if end
2338
 
2339
						#如果該變數是不允許從session取得的
2340
						if($conf["sessionNameArray"][$searchResult["equalVarName"]]==null){
2341
 
2342
							#設置執行失敗
2343
							$result["status"]="false";
2344
 
2345
							#設置執行錯誤
2346
							$result["error"][]="變數".$searchResult["equalVarValue"]."禁止從session中取得";
2347
 
2348
							#回傳結果
2349
							return $result;
2350
 
2351
							}#if end
2352
 
2353
						#取得遺失變數對應的session變數名稱
2354
						$sessionVarName=$conf["sessionNameArray"][$searchResult["equalVarName"]];
2355
 
2356
						#函式說明:
2357
						#取得session變數裡面的數值,然後卸除該session變數
2358
						#回傳結果:
2359
						#$result["status"],執行是否正常,"true"代表正常,"false"代表有誤.
2360
						#$result["error"],錯誤訊息
2361
						#$result["founded"],是否找到session變數,"true"代表找到,"false"代表沒找到.
2362
						#$result["content"],取得的變數內容
2363
						#必填參數:
2364
						$conf["session::getSessionValue"]["sessionVarName"]=$sessionVarName;#要取得內容的session變數名稱
2365
						#可省略參數:
2366
 
2367
						#如果存在是否要卸除session變數的陣列
2368
						if(isset($conf["unsetSessionArray"])){
2369
 
2370
							#設置其是否要卸除
2371
							$conf["unsetSessionVar"]=$conf["unsetSessionArray"][$searchResult["equalVarName"]];#"true"代表要卸除session變數,預設不卸除
2372
 
2373
							}#if end
2374
 
2375
						#參考資料:
2376
						#http://stackoverflow.com/questions/8971261/php-5-4-call-time-pass-by-reference-easy-fix-available
2377
						#可變變數->http://emn178.pixnet.net/blog/post/80119035-php%E6%95%99%E5%AD%B8---%E8%AE%8A%E6%95%B8%28variables%29
2378
						#卸除參考的原始變數->http://stackoverflow.com/questions/6654538/php-function-to-unset-variables-passed-by-reference
2379
						$getSessionValue=session::getSessionValue($conf["session::getSessionValue"]);
2380
						unset($conf["session::getSessionValue"]);
2381
 
2382
						#如果取得 session 變數失敗
2383
						if($getSessionValue["status"]=="false"){
2384
 
2385
							#設置執行失敗
2386
							$result["status"]="false";
2387
 
2388
							#設置執行錯誤
2389
							$result["error"]=$getSessionValue;
2390
 
2391
							#回傳結果
2392
							return $result;
2393
 
2394
							}#if end
2395
 
2396
						#如果 session 變數不存在
2397
						if($getSessionValue["founded"]=="false"){
2398
 
2399
							#設置執行失敗
2400
							$result["status"]="false";
2401
 
2402
							#設置沒有找到所有指定的變數
2403
							$result["passed"]="false";
2404
 
2405
							#設置執行錯誤
2406
							$result["error"]=$getSessionValue;
2407
 
2408
							#回傳結果
2409
							return $result;
2410
 
2411
							}#if end
2412
 
2413
						#將取得的session變數儲存起來
2414
						$result["inputDataContent"][$copy["lostVarName"][$i]]=$getSessionValue["content"];
2415
 
2416
						#從找不到的變數清單裡面移除已經找到的變數
2417
						unset($result["lostVarName"][$i]);
2418
 
2419
						}#for end
2420
 
2421
					#如果沒有遺失的變數
2422
					if(count($result["lostVarName"])==0){
2423
 
2424
						#設置檢查都通過
2425
						$result["passed"]="true";
2426
 
2427
						}#if end
2428
 
2429
					}#if end
2430
 
2431
				}#if end
2432
 
2433
			}#if end
2434
 
2435
		#設置執行成功
2436
		$result["status"]="true";
2437
 
2438
		#回傳結果
2439
		return $result;
2440
 
2441
		}#function responseMutiInputDataSecurityEnhance end
2442
 
2443
	/*
2444
	#函式說明:
2445
	#能夠接收數個指定的變數名稱
2446
	#回傳的結果:
2447
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
2448
	#$result["function"],當前執行的函數
2449
	#$result["error"],函式錯誤訊息,若爲""則表示沒有錯誤
2450
	#$result["warning"],警告訊息陣列
2451
	#$result["getedValue"][$elementKey],取得的變數內容,請將「$elementKey」替換成要取得的表單傳送名稱,例如:$result["getedValue"]["account"],如果該變數不存在則其值會等於null.
2452
	#必填參數:
2453
	$conf["receivedVarArray"]=array();#要接收的參數陣列
2454
	#可省略參數:
2455
	#$conf["correctStr"],是否要過濾字串,預設為"true"要過濾,"false"為不要過濾.
2456
	#$conf["correctStr"]="true";
2457
	#參考資料:
2458
	#無.
2459
	#備註:
2460
	#無.
2461
	*/
2462
	public static function receiveCustomMultiData(&$conf){
2463
 
2464
		#初始化要回傳的內容
2465
		$result=array();
2466
 
2467
		#設置當前執行的函數
2468
		$result["function"]=__FUNCTION__;
2469
 
2470
		#如果 $conf 不為陣列
2471
		if(gettype($conf)!="array"){
2472
 
2473
			#設置執行失敗
2474
			$result["status"]="false";
2475
 
2476
			#設置執行錯誤訊息
2477
			$result["error"][]="\$conf變數須為陣列形態";
2478
 
2479
			#如果傳入的參數為 null
2480
			if($conf==null){
2481
 
2482
				#設置執行錯誤訊息
2483
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
2484
 
2485
				}#if end
2486
 
2487
			#回傳結果
2488
			return $result;
2489
 
2490
			}#if end
2491
 
2492
		#檢查參數
2493
		#函式說明:
2494
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
2495
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
2496
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
2497
		#$result["function"],當前執行的函式名稱.
2498
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
2499
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
2500
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
2501
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
2502
		#必填參數:
2503
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
2504
		$conf["variableCheck.checkArguments"]["varInput"]=&$conf;
2505
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
2506
		$conf["variableCheck.checkArguments"]["mustBeFilledVariableName"]=array("receivedVarArray");
2507
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double");
2508
		$conf["variableCheck.checkArguments"]["mustBeFilledVariableType"]=array("array");
2509
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
2510
		$conf["variableCheck.checkArguments"]["referenceVarKey"]="variableCheck.checkArguments";
2511
		#可省略參數:
2512
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"false"。
2513
		#$conf["variableCheck.checkArguments"]["canBeEmptyString"]="false";
2514
		#$conf["variableCheck.checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
2515
		$conf["variableCheck.checkArguments"]["skipableVariableName"]=array("method","correctStr");
2516
		#$conf["variableCheck.checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
2517
		$conf["variableCheck.checkArguments"]["skipableVariableType"]=array("string","string");
2518
		#$conf["variableCheck.checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,"null"代表不指定.
2519
		$conf["variableCheck.checkArguments"]["skipableVarDefaultValue"]=array("post","true");
2520
		$checkResult=variableCheck::checkArguments($conf["variableCheck.checkArguments"]);
2521
		unset($conf["variableCheck.checkArguments"]);
2522
 
2523
		#如果檢查失敗
2524
		if($checkResult["status"]=="false"){
2525
 
2526
			#設置執行不正常
2527
			$result["status"]="false";
2528
 
2529
			#程式停止執行
2530
			$result["error"]=$checkResult;
2531
 
2532
			#回傳結果
2533
			return $result;
2534
 
2535
			}#if end
2536
 
2537
		#如果檢查不通過
2538
		if($checkResult["passed"]=="false"){
2539
 
2540
			#設置執行不正常
2541
			$result["status"]="false";
2542
 
2543
			#程式停止執行
2544
			$result["error"]=$checkResult;
2545
 
2546
			#回傳結果
2547
			return $result;
2548
 
2549
			}#if end
2550
 
2551
		#根據接收的模式來判斷
2552
		switch($conf["method"]){
2553
 
2554
			#如果爲 post/POST
2555
			case "post" || "POST" :
2556
 
2557
				#有幾個變數要接收,就判斷幾次
2558
				for($i=0;$i<count($conf["receivedVarArray"]);$i++){
2559
 
2560
					#將每個post變數視爲$elementKey指到$elementValue
2561
					foreach($_POST as $elementKey => $elementValue){
2562
 
2563
						#如果 $elementKey 等於任何一個 $conf["receivedVarArray"] 裏陣列元素的key
2564
						#函式說明:
2565
						#檢查一個數值是否與陣列裏面的元素相同,如果有相同的則會傳其變數內容。
2566
						#回傳結果:
2567
						#$result["status"],"true"表示執行正確,"false"表示執行錯誤.
2568
						#$result["founded"],"true"表示有找到相同的,"false"表示沒有找到相同的.
2569
						#$result["error"],錯誤訊息
2570
						#$result["function"],當前執行的函數名稱
2571
						#$result["equalVarName"],相等的變數名稱或key.
2572
						#$result["equalVarValue"],相等的變數數值內容.
2573
						#必填參數:
2574
						$conf["search"]["getEqualVar"]["conditionElement"]=$conf["receivedVarArray"][$i];#條件元素,要等於的元素內容。
2575
						$conf["search"]["getEqualVar"]["compareElements"]=array($elementKey);#要比對的陣列變數內容。
2576
						$getEqualVarResult=search::getEqualVar($conf["search"]["getEqualVar"]);
2577
						unset($conf["search"]["getEqualVar"]);
2578
 
2579
						#如果 search::getEqualVar 執行失敗
2580
						if($getEqualVarResult["status"]=="false"){
2581
 
2582
							#設置執行不正常
2583
							$result["status"]="false";
2584
 
2585
							#程式停止執行
2586
							$result["error"]=$getEqualVarResult;
2587
 
2588
							#回傳結果
2589
							return $result;
2590
 
2591
							}#if end
2592
 
2593
						#如果找到對應的變數名稱
2594
						if($getEqualVarResult["founded"]=="true"){
2595
 
2596
							#設定爲要回傳的變數之一
2597
							#$result["getedValue"][$elementKey]=$getEqualVarResult["equalVarName"];
2598
							$result["getedValue"][$elementKey]=$elementValue;
2599
 
2600
							}#if end
2601
 
2602
						}#foreach end
2603
 
2604
					#如果該變數沒有接收到
2605
					if(!isset($result["getedValue"][$conf["receivedVarArray"][$i]])){
2606
 
2607
						#設為 null
2608
						$result["getedValue"][$conf["receivedVarArray"][$i]]=null;
2609
 
2610
						}#if end
2611
 
2612
					}#for end
2613
 
2614
				#挑出 case
2615
				break;
2616
 
2617
			#如果爲 get/GET
2618
			case "get" || "GET" :
2619
 
2620
				#有幾個變數要接收,就判斷幾次
2621
				for($i=0;$i<count($conf["receivedVarArray"]);$i++){
2622
 
2623
					#將每個post變數視爲$elementKey指到$elementValue
2624
					foreach($_GET as $elementKey => $elementValue){
2625
 
2626
						#如果 $elementKey 等於任何一個 $conf["receivedVarArray"] 裏陣列元素的key
2627
						#函式說明:
2628
						#檢查一個數值是否與陣列裏面的元素相同,如果有相同的則會傳其變數內容。
2629
						#$result["status"],"true"表示執行正確,"false"表示執行錯誤.
2630
						#$result["founded"],"true"表示有找到相同的,"false"表示沒有找到相同的.
2631
						#$result["error"],錯誤訊息
2632
						#$result["function"],當前執行的函數名稱
2633
						#$result["equalVarName"],相等的變數名稱或key.
2634
						#$result["equalVarValue"],相等的變數數值內容.
2635
						#必填參數:
2636
						$conf["search"]["getEqualVar"]["conditionElement"]=$conf["receivedVarArray"][$i];#條件元素,要等於的元素內容。
2637
						$conf["search"]["getEqualVar"]["compareElements"]=array($elementKey);#要比對的陣列變數內容。
2638
						$getEqualVarResult=search::getEqualVar($conf["search"]["getEqualVar"]);
2639
						unset($conf["search"]["getEqualVar"]);
2640
 
2641
						#如果 search::getEqualVar 執行失敗
2642
						if($getEqualVarResult["status"]=="false"){
2643
 
2644
							#設置執行不正常
2645
							$result["status"]="false";
2646
 
2647
							#程式停止執行
2648
							$result["error"]=$getEqualVarResult;
2649
 
2650
							#回傳結果
2651
							return $result;
2652
 
2653
							}#if end
2654
 
2655
						#如果找到對應的變數名稱
2656
						if($getEqualVarResult["founded"]=="true"){
2657
 
2658
							#設定爲要回傳的變數之一
2659
							$result["getedValue"][$elementKey]=$elementValue;
2660
 
2661
							}#if end
2662
 
2663
						}#foreach end
2664
 
2665
					#如果該變數沒有接收到
2666
					if(!isset($result["getedValue"][$conf["receivedVarArray"][$i]])){
2667
 
2668
						#設為 null
2669
						$result["getedValue"][$conf["receivedVarArray"][$i]]=null;
2670
 
2671
						}#if end
2672
 
2673
					}#for end
2674
 
2675
				#挑出 case
2676
				break;
2677
 
2678
			#如果不爲以上內容
2679
			default :
2680
 
2681
				#設置執行失敗
2682
				$result["status"]="false";
2683
 
2684
				#設置執行錯誤
2685
				$result["error"][]="不適用的method參數";
2686
 
2687
				#回傳false,表示函式使用有誤
2688
				return $result;
2689
 
2690
			}#switch end
2691
 
2692
		#設置執行正常
2693
		$result["status"]="true";
2694
 
2695
		#回傳結果
2696
		return $result;
2697
 
2698
		}#function receiveCustomMultiData end
2699
 
2700
	/*
2701
	#函式說明:
2702
	#放置按鈕
2703
	#回傳結果:
2704
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
2705
	#$result["function"],當前執行的函數.
2706
	#$result["error"],錯誤訊息陣列.
2707
	#$result["content"],按鈕語法.
2708
	#必填參數:
2709
	$conf["buttonDisplayValue"]="";#爲按鈕上顯示的文字。
2710
	#可省略參數:
2711
	#$conf["buttonStyleName"]="";#可省略,爲按鈕所要使用的css樣式類別名稱,預設的css樣式爲 __qbpwcf_button 。
2712
	#$conf["buttonActionScriptFunction"]="";#可省略,爲按下按鈕時所要執行的javaScript函式或程式,預設不設定。
2713
		#"document.forms.formName.submit()"爲傳送名爲testForm的表單內容
2714
		#"window.print()"爲使用瀏覽器內建工具列印當前網頁
2715
		#若搭配 javaScript 類別的 confirmWindow 函數的回傳結果,則會有確認視窗的效果.
2716
	#$conf["buttonBorder"]="";#可省略,爲IE9內會自動產生外框,此爲外框的厚度,屬性值爲正整數,預設爲0。
2717
	#$conf["disabled"]="true";#可省略,為按鈕的功能是否要取消,若為"true"則代表要取消,若為"false"則代表功能正常,預設為"false".
2718
	#$conf["tableStart"]="true";#爲是否要表格開始。"false"代表否,"true"代表是。預設爲"false"。
2719
	#$conf["tableClass"]="";#表格要套用的css樣式,若省略的話,則預設爲 __defaultTbaleCsssStyle 其屬性爲 table-layout:fixed word-break:break-all width:100% ,須搭配 $conf["tablStart"] 與 $conf["tableEnd"] 使用。
2720
	#$conf["trStart"]="true";#爲是否要以<tr>開頭,"true"表示"是"。也可以看作新的一列開始,預設為"false".
2721
	#$conf["trClass"]="__withoutBorder";#<tr>要套用的css樣式,預設為"__withoutBorder",亦即沒有框線的樣式;"__withBorder"則爲有框線的樣式
2722
	#$conf["tdStart"]="true";#爲是否要以<td>開頭,"true"表示"是"。也可以看成列裏面的元素開始,預設為"false".
2723
	#$conf["tdClass"]="__withoutBorder";#<td>要套用的css樣式,"__withoutBorder"爲沒有框線的樣式;__withBorder爲有框線的樣式
2724
	#$conf["tdEnd"]="true";#爲是否要以</td>結尾,"true"表示"是"。也可以看成列裏面的元素結束,預設為"false".
2725
	#$conf["trEnd"]="true";#爲是否要以</tr>結尾,"true"表示"是"。也可以看作該列結束,預設為"false".
2726
	#$conf["tableEnd"]="true";#爲是否要表格結束。"false"代表否,"true"代表是,預設爲"false"。
2727
	#$conf["formStart"]="true";#爲是否要表單開始,如果爲"true"則代表要表單開始,預設為"false".
2728
	#$conf["action"]="";#爲表單要傳送到哪個頁面,須搭配$conf["formStart"]與$conf["formEnd"]參數使用
2729
	#$conf["target"]="";#為目標表單顯示的方式,若沒設定則預設爲"_self",其他可用的參數爲 "_blank"、"_parent"、"_top",也可以是iframe的名稱。須搭配$conf["formStart"]與$conf["formEnd"]參數使用
2730
	#$conf["formEnd"]="true";#爲是否要表單結束,如果爲"true"則代表要表單結束,預設為"false".
2731
	#$conf["formId"],字串,表單的id.
2732
	#$conf["formId"]="";
2733
	#$conf["buttonId"],字串,按鈕的id.
2734
	#$conf["buttonId"]="";
2735
	#參考資料:
2736
	#http://stackoverflow.com/questions/3014649/how-to-disable-html-button-using-javascript
2737
	#備註:
2738
	#無.
2739
	*/
2740
	public static function button(&$conf){
2741
 
2742
		#初始化要回傳的內容
2743
		$result=array();
2744
 
2745
		#設置當前執行的函數
2746
		$result["function"]=__FUNCTION__;
2747
 
2748
		#初始化content樣式內容
2749
		$result["content"]="";
2750
 
2751
		#如果 $conf 不為陣列
2752
		if(gettype($conf)!="array"){
2753
 
2754
			#設置執行失敗
2755
			$result["status"]="false";
2756
 
2757
			#設置執行錯誤訊息
2758
			$result["error"][]="\$conf變數須為陣列形態";
2759
 
2760
			#如果傳入的參數為 null
2761
			if($conf==null){
2762
 
2763
				#設置執行錯誤訊息
2764
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
2765
 
2766
				}#if end
2767
 
2768
			#回傳結果
2769
			return $result;
2770
 
2771
			}#if end
2772
 
2773
		#檢查參數
2774
		#函式說明:
2775
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
2776
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
2777
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
2778
		#$result["function"],當前執行的函式名稱.
2779
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
2780
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
2781
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
2782
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
2783
		#必填參數:
2784
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
2785
		$conf["variableCheck.checkArguments"]["varInput"]=&$conf;
2786
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
2787
		$conf["variableCheck.checkArguments"]["mustBeFilledVariableName"]=array("buttonDisplayValue");
2788
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double");
2789
		$conf["variableCheck.checkArguments"]["mustBeFilledVariableType"]=array("string");
2790
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
2791
		$conf["variableCheck.checkArguments"]["referenceVarKey"]="variableCheck.checkArguments";
2792
		#可省略參數:
2793
		#$conf["variableCheck.checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"false"。
2794
		#$conf["variableCheck.checkArguments"]["canBeEmptyString"]="false";
2795
		#$conf["variableCheck.checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
2796
		$conf["variableCheck.checkArguments"]["skipableVariableName"]=array("buttonStyleName","buttonActionScriptFunction","buttonBorder","disabled","tableStart","tableClass","trStart","trClass","tdStart","tdClass","tdEnd","trEnd","tableEnd","formStart","action","target","formEnd","formId","buttonId");
2797
		#$conf["variableCheck.checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
2798
		$conf["variableCheck.checkArguments"]["skipableVariableType"]=array("string","string","string","string","string","string","string","string","string","string","string","string","string","string","string","string","string","string","string");
2799
		#$conf["variableCheck.checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,"null"代表不指定.
2800
		$conf["variableCheck.checkArguments"]["skipableVarDefaultValue"]=array("__qbpwcf_button",null,"0","false","false","__defaultTbaleCsssStyle","false","__withoutBorder","false","__withoutBorder","false","false","false","false",null,"_self","false",null,null);
2801
		$checkResult=variableCheck::checkArguments($conf["variableCheck.checkArguments"]);
2802
		unset($conf["variableCheck.checkArguments"]);
2803
 
2804
		#如果檢查失敗
2805
		if($checkResult["status"]=="false"){
2806
 
2807
			#設置執行不正常
2808
			$result["status"]="false";
2809
 
2810
			#程式停止執行
2811
			$result["error"]=$checkResult;
2812
 
2813
			#回傳結果
2814
			return $result;
2815
 
2816
			}#if end
2817
 
2818
		#如果檢查不通過
2819
		if($checkResult["passed"]=="false"){
2820
 
2821
			#設置執行不正常
2822
			$result["status"]="false";
2823
 
2824
			#程式停止執行
2825
			$result["error"]=$checkResult;
2826
 
2827
			#回傳結果
2828
			return $result;
2829
 
2830
			}#if end
2831
 
2832
		#如果要表格開始
2833
		if($conf["tableStart"]=="true"){
2834
 
2835
			#函式說明:
2836
			#表格開始,可以設定表格的厚度和位置
2837
			#回傳結果:
2838
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
2839
			#$result["content"],表格開始的語法
2840
			#$result["function"],當前執行的函數
2841
			#$result["error"],函式錯誤訊息
2842
			#必填寫的參數:
2843
			$conf["table::start"]["class"]=$conf["tableClass"];#爲表格的css樣式,若為"",則代表不套用css樣式;若爲"__withoutBorder"的話則套用無框線的預設樣式;若爲"__withBorder"的話,則爲有框線的預設樣式。
2844
			$tableStart=table::start($conf["table::start"]);
2845
			unset($conf["table::start"]);
2846
 
2847
			#如果表開始立失敗
2848
			if($tableStart["status"]=="false"){
2849
 
2850
				#設置執行失敗
2851
				$result["status"]="false";
2852
 
2853
				#設置執行錯誤訊息
2854
				$result["error"]=$tableStart;
2855
 
2856
				#回傳結果
2857
				return $result;
2858
 
2859
				}#if end
2860
 
2861
			#串接表格開始的語法
2862
			$result["content"]=$result["content"].$tableStart["content"];
2863
 
2864
			}#if end
2865
 
2866
		#如果其值爲 true
2867
		if($conf["trStart"]=="true"){
2868
 
2869
			#套用列開始指定的css樣式
2870
			#函式說明:
2871
			#列開始
2872
			#回傳結果:
2873
			#$result["status"],執行是否正常,"true"代表正常;"false"代表不正常.
2874
			#$result["error"],函式錯誤訊息陣列.
2875
			#$result["content"],列開始的語法.
2876
			#$result["function"],當前執行的函式名稱.
2877
			#必填寫的參數:
2878
			$conf["table"]["trStart"]["class"]=$conf["trClass"];#爲tr的css樣式,若為""則為不套用css樣式;若爲"__withoutBorder"的話則套用無框線的預設樣式;若爲"__withBorder"的話,則爲有框線的預設樣式。
2879
			$trStart=table::trStart($conf["table"]["trStart"]);
2880
			unset($conf["table"]);
2881
 
2882
			#如果列開始失敗
2883
			if($trStart["status"]=="false"){
2884
 
2885
				#設置執行失敗
2886
				$result["status"]="false";
2887
 
2888
				#設置執行錯誤訊息
2889
				$result["error"]=$trStart;
2890
 
2891
				#回傳結果
2892
				return $result;
2893
 
2894
				}#if end
2895
 
2896
			#串接列開始
2897
			$result["content"]=$result["content"].$trStart["content"];
2898
 
2899
			}#if end
2900
 
2901
		#如果$conf["tdStart"]其值爲 "true"
2902
		if($conf["tdStart"]=="true"){
2903
 
2904
			#列開始且套用css樣式.
2905
			#函式說明:
2906
			#行開始
2907
			#回傳結果:
2908
			#$result["status"],執行是否正常,"true"代表正常;"false"代表不正常.
2909
			#$result["error"],函式錯誤訊息陣列.
2910
			#$result["content"],行開始的語法.
2911
			#$result["function"],當前執行的函式名稱.
2912
			#必填寫的參數:
2913
			$conf["table"]["tdStart"]["class"]=$conf["tdClass"];#該 td 要套用套用的 css 樣式
2914
				#預設的樣式
2915
				#"border-width","border","border-color","border-style","margin-right","margin-left"
2916
				#"100%","1px","#0000FF","solid","auto","auto"
2917
			$tdStart=table::tdStart($conf["table"]["tdStart"]);
2918
			unset($conf["table"]);
2919
 
2920
			#若行開始失敗
2921
			if($tdStart["status"]=="false"){
2922
 
2923
				#設置執行失敗
2924
				$result["status"]="false";
2925
 
2926
				#設置執行錯誤訊息
2927
				$result["error"]=$tdStart;
2928
 
2929
				#回傳結果
2930
				return $result;
2931
 
2932
				}#if end
2933
 
2934
			#串接行開始的語法
2935
			$result["content"]=$result["content"].$tdStart["content"];
2936
 
2937
			}#if end
2938
 
2939
		#如果 $conf["formStart"] 等於 "true"
2940
		if($conf["formStart"]=="true"){
2941
 
2942
			#如果 $conf["action"] 有設定
2943
			if(isset($conf["action"])){
2944
 
2945
				#表單開始
2946
				#函式說明:
2947
				#表單開始
2948
				#回傳結果:
2949
				#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
2950
				#$result["error"],錯誤訊息陣列.
2951
				#$resutl["function"],當前執行的函式名稱.
2952
				#$result["content"],表單開始的語法.
2953
				$conf["form"]["start"]["action"]=$conf["action"];#爲要交給那個檔案處理該表單傳送的內容
2954
				#可省略參數:
2955
				#$conf["name"]="";#爲該表單的名稱
2956
				#$conf["method"]="";#爲傳輸的方法,若沒設定則預設爲post,其他可用的參數爲get。
2957
				$conf["form"]["start"]["target"]=$conf["target"];#為顯示的方式,若沒設定則預設爲"_self",其他可用的參數爲 "_blank"、"_parent"、"_top",也可以是iframe的名稱。
2958
				#$conf["form"]["start"]["tableStart"]=$conf["tableStart"];#爲該表單是否要以<table>開始。"true"爲是;
2959
				#$conf["form"]["start"]["tableClass"]=$conf["tableClass"];#表格要套用的css樣式,若爲"__withoutBorder"的話則套用無框線的預設樣式;若爲"__withBorder"的話,則爲有框線的預設樣式。
2960
 
2961
				#如果有設定 $conf["formId"]
2962
				if(isset($conf["formId"])){
2963
 
2964
					#設置表單的名稱與id
2965
					$conf["form"]["start"]["name"]=$conf["formId"];#爲該表單的名稱,id也跟$conf["name"]一樣.
2966
 
2967
					}#if end
2968
 
2969
				$formStart=form::start($conf["form"]["start"]);
2970
				unset($conf["form"]);
2971
 
2972
				#如果表單開始失敗
2973
				if($formStart["status"]=="false"){
2974
 
2975
					#設置執行失敗
2976
					$result["status"]="false";
2977
 
2978
					#設置執行錯誤訊息
2979
					$result["error"]=$formStart;
2980
 
2981
					#回傳結果
2982
					return $result;
2983
 
2984
					}#if end
2985
 
2986
				#串接表單開始的語法
2987
				$result["content"]=$result["content"].$formStart["content"];
2988
 
2989
				}#if end
2990
 
2991
			#反之不存在
2992
			else{
2993
 
2994
				#設置執行失敗
2995
				$result["status"]="false";
2996
 
2997
				#設置錯誤訊息
2998
				$result["status"]="\$conf[\"action\"]參數沒有設置!";
2999
 
3000
				#回傳結果
3001
				return $result;
3002
 
3003
				}#else end
3004
 
3005
			}#if end
3006
 
3007
		#套用按鈕的css樣式
3008
		$conf["buttonStyleName"]=" class = '".$conf["buttonStyleName"]."' ";
3009
 
3010
		#如果$conf["buttonActionScriptFunction"]不存在
3011
		if(!isset($conf["buttonActionScriptFunction"])){
3012
 
3013
			#則預設給與""
3014
			$conf["buttonActionScriptFunction"]="";
3015
 
3016
			}#if end
3017
 
3018
		#反之$conf["buttonActionScriptFunction"]存在
3019
		else{
3020
 
3021
			#則套用設定的javaScript
3022
			$conf["buttonActionScriptFunction"]=" onClick=\"".$conf["buttonActionScriptFunction"]."\"";
3023
 
3024
			}#else end
3025
 
3026
		#如果 $conf["disabled"] 為"true"
3027
		if($conf["disabled"]=="true"){
3028
 
3029
			#設置取消按鈕功能的屬性
3030
			$conf["disabled"]=" disabled=\"disabled\" ";
3031
 
3032
			}#if end
3033
 
3034
		#反之 $conf["disabled"] 不為"true"
3035
		else{
3036
 
3037
			#預設功能要正常
3038
			$conf["disabled"]="";
3039
 
3040
			}#else end
3041
 
3042
		#如果有設置 $conf["buttonId"]
3043
		if(isset($conf["buttonId"])){
3044
 
3045
			#設置按鈕id的語法
3046
			$conf["buttonId"]=" id=\"".$conf["buttonId"]."\"";
3047
 
3048
			}#if end
3049
 
3050
		#反之
3051
		else{
3052
 
3053
			#設為空字串
3054
			$conf["buttonId"]="";
3055
 
3056
			}#else end
3057
 
3058
		#放置按鈕
3059
		$result["content"]=$result["content"]."<input type = submit ".$conf["disabled"]." value = \"".$conf["buttonDisplayValue"]."\" ".$conf["buttonStyleName"]." ".$conf["buttonActionScriptFunction"]." border = ".$conf["buttonBorder"]." ".$conf["buttonId"]." >";
3060
 
3061
		#如果其值爲 true
3062
		if($conf["tdEnd"]=="true"){
3063
 
3064
			#加上 </td>
3065
			$result["content"]=$result["content"]."</td>";
3066
 
3067
			}#if end
3068
 
3069
		#如果其值爲 true
3070
		if($conf["trEnd"]=="true"){
3071
 
3072
			#加上 </tr>
3073
			$result["content"]=$result["content"]."</tr>";
3074
 
3075
			}#if end
3076
 
3077
		#如果 $conf["formEnd"] 等於 true
3078
		if($conf["formEnd"]=="true"){
3079
 
3080
			#說明:
3081
			#表單結束
3082
			#回傳結果:
3083
			#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
3084
			#$result["error"],錯誤訊息陣列.
3085
			#$resutl["function"],當前執行的函式名稱.
3086
			#$result["content"],表單結束的語法.
3087
			#必填寫的參數:
3088
			$conf_end["tableEnd"]=$conf["tableEnd"];#爲該表單是否要以</table>結尾。"true"爲是;"false"爲否。
3089
			$formEnd=form::end($conf_end);
3090
			unset($conf_end);
3091
 
3092
			#如果表單結束失敗
3093
			if($formEnd["status"]=="false"){
3094
 
3095
				#設置執行失敗
3096
				$result["status"]="false";
3097
 
3098
				#設置執行錯誤訊息
3099
				$result["error"]=$formEnd;
3100
 
3101
				#回傳結果
3102
				return $result;
3103
 
3104
				}#if end
3105
 
3106
			#串聯表單結束的語法
3107
			$result["content"]=$result["content"].$formEnd["content"];
3108
 
3109
			}#if end
3110
 
3111
		#如果有表格結束
3112
		if($conf["tableEnd"]=="true"){
3113
 
3114
			#函式說明:
3115
			#表格結束
3116
			#回傳結果:
3117
			#表格結束的語法
3118
			$result["content"]=$result["content"].table::end();
3119
 
3120
			}#if end
3121
 
3122
		#執行到這邊代表執行正常
3123
		$result["status"]="true";
3124
 
3125
		#回傳結果
3126
		return $result;
3127
 
3128
		}#function button end
3129
 
3130
	/*
3131
	#函式說明:
3132
	#以圖片代替的表單送出扭
3133
	#回傳結果:
3134
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
3135
	#$result["function"],當前執行的函數.
3136
	#$result["error"],錯誤訊息陣列.
3137
	#$result["content"],按鈕語法.
3138
	#必填參數:
3139
	$conf["img"]="";#爲要作爲按鈕的圖片位置。
3140
	#可省略參數:
3141
	#$conf["formStart"]="true";#爲是否要表單開始,如果爲"true"則代表要表單開始,預設為"false".
3142
	#$conf["formAction"]="";#字串,表單要傳送到哪邊
3143
	#$conf["legend"]="";#字串,圖片按鈕的註解.
3144
	#$conf["formMethod"]="";#字串,表單傳送的方式,預設為"post",也可以使用"get".
3145
	#$conf["formTarget"]="";#字串,表單的回應要呈現在哪邊,預設為"_self"(當前頁面、頁框),"_top"為整個頁面,"_parent"為父頁面,"_blank"為開新頁面,也可以為iframe的名稱.
3146
	#$conf["formEnd"]="true";#爲是否要表單結束,如果爲"true"則代表要表單結束,預設為"false".
3147
	#$conf["width"]="";#爲按鈕圖片的寬度,若省略,則按照原始圖片的寬度。
3148
	#$conf["height"]="";#爲按鈕圖片的高度,若省略,則按照原始圖片的高度。
3149
	#$conf["class"]="";#爲按鈕圖片要套用的css樣式名稱,若省略,則不套用任何css樣式。
3150
	#$conf["trStart"]="true";#爲是否要以<tr>開頭,"true"表示"是"。也可以看作新的一列開始。
3151
	#$conf["tdStart"]="true";#爲是否要以<td>開頭,"true"表示"是"。也可以看成列裏面的元素開始
3152
	#$conf["tdEnd"]="true";#爲是否要以</td>結尾,"true"表示"是"。也可以看成列裏面的元素結束
3153
	#$conf["trEnd"]="true";#爲是否要以</tr>結尾,"true"表示"是"。也可以看作該列結束。
3154
	#$conf["formId"],字串,表單的id.
3155
	#$conf["formId"]="";
3156
	#$conf["buttonId"],字串,按鈕的id.
3157
	#$conf["buttonId"]="";
3158
	#參考資料:
3159
	#無.
3160
	#備註:
3161
	#使用圖片作為傳送按時,會傳送點擊圖片的x軸與y軸數數值.
3162
	*/
3163
	public static function buttonImg(&$conf){
3164
 
3165
		#初始化要回傳的內容
3166
		$result=array();
3167
 
3168
		#設置當前執行的函數
3169
		$result["function"]=__FUNCTION__;
3170
 
3171
		#初始化content樣式內容
3172
		$result["content"]="";
3173
 
3174
		#如果 $conf 不為陣列
3175
		if(gettype($conf)!="array"){
3176
 
3177
			#設置執行失敗
3178
			$result["status"]="false";
3179
 
3180
			#設置執行錯誤訊息
3181
			$result["error"][]="\$conf變數須為陣列形態";
3182
 
3183
			#如果傳入的參數為 null
3184
			if($conf==null){
3185
 
3186
				#設置執行錯誤訊息
3187
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
3188
 
3189
				}#if end
3190
 
3191
			#回傳結果
3192
			return $result;
3193
 
3194
			}#if end
3195
 
3196
		#檢查參數
3197
		#函式說明:
3198
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
3199
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
3200
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
3201
		#$result["function"],當前執行的函式名稱.
3202
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
3203
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
3204
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
3205
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
3206
		#必填參數:
3207
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
3208
		$conf["variableCheck.checkArguments"]["varInput"]=&$conf;
3209
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
3210
		$conf["variableCheck.checkArguments"]["mustBeFilledVariableName"]=array("img");
3211
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double");
3212
		$conf["variableCheck.checkArguments"]["mustBeFilledVariableType"]=array("string");
3213
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
3214
		$conf["variableCheck.checkArguments"]["referenceVarKey"]="variableCheck.checkArguments";
3215
		#可省略參數:
3216
		#$conf["variableCheck.checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"false"。
3217
		#$conf["variableCheck.checkArguments"]["canBeEmptyString"]="false";
3218
		#$conf["variableCheck.checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
3219
		$conf["variableCheck.checkArguments"]["skipableVariableName"]=array("formStart","formAction","legend","formMethod","formTarget","formEnd","width","height","class","trStart","tdStart","tdEnd","trEnd","formId","buttonId");
3220
		#$conf["variableCheck.checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
3221
		$conf["variableCheck.checkArguments"]["skipableVariableType"]=array("string","string","string","string","string","string","string","string","string","string","string","string","string","string","string");
3222
		#$conf["variableCheck.checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,"null"代表不指定.
3223
		$conf["variableCheck.checkArguments"]["skipableVarDefaultValue"]=array("false",null,null,"post","_self","false",null,null,null,"false","false","false","false",null,null);
3224
		$checkResult=variableCheck::checkArguments($conf["variableCheck.checkArguments"]);
3225
		unset($conf["variableCheck.checkArguments"]);
3226
 
3227
		#如果檢查失敗
3228
		if($checkResult["status"]=="false"){
3229
 
3230
			#設置執行不正常
3231
			$result["status"]="false";
3232
 
3233
			#程式停止執行
3234
			$result["error"]=$checkResult;
3235
 
3236
			#回傳結果
3237
			return $result;
3238
 
3239
			}#if end
3240
 
3241
		#如果檢查不通過
3242
		if($checkResult["passed"]=="false"){
3243
 
3244
			#設置執行不正常
3245
			$result["status"]="false";
3246
 
3247
			#程式停止執行
3248
			$result["error"]=$checkResult;
3249
 
3250
			#回傳結果
3251
			return $result;
3252
 
3253
			}#if end
3254
 
3255
		#如果其值爲 true
3256
		if($conf["trStart"]=="true"){
3257
 
3258
			$result["content"]=$result["content"]."<tr>";
3259
 
3260
			}#if end
3261
 
3262
		#如果其值爲 true
3263
		if($conf["tdStart"]=="true"){
3264
 
3265
			$result["content"]=$result["content"]."<td>";
3266
 
3267
			}#if end
3268
 
3269
		#如果 $conf["formStart"] 為 "true" 且 $conf["formAction"] 有設置
3270
		if($conf["formStart"]=="true" && isset($conf["formAction"])){
3271
 
3272
			#函式說明:
3273
			#表單開始
3274
			#回傳結果:
3275
			#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
3276
			#$result["error"],錯誤訊息陣列.
3277
			#$resutl["function"],當前執行的函式名稱.
3278
			#$result["content"],表單開始的語法.
3279
			#必填參數:
3280
			$conf["form::start"]["action"]=$conf["formAction"];#爲要交給那個檔案處理該表單傳送的內容
3281
			#可省略參數:
3282
 
3283
			#如果有設定 $conf["legend"]
3284
			if(isset($conf["legend"])){
3285
 
3286
				$conf["form::start"]["legend"]=$conf["legend"];#顯示表單的標題
3287
 
3288
				}#if end
3289
 
3290
			#如果有設置 $conf["formId"]
3291
			if(isset($conf["formId"])){
3292
 
3293
				#設置表單的名稱與id
3294
				$conf["form::start"]["name"]=$conf["formId"];#爲該表單的名稱
3295
 
3296
				}#if end
3297
 
3298
			$conf["form::start"]["method"]=$conf["formMethod"];#爲傳輸的方法,若沒設定則預設爲post,其他可用的參數爲get。
3299
			$conf["form::start"]["target"]=$conf["formTarget"];#為顯示的方式,若沒設定則預設爲"_self",其他可用的參數爲 "_blank"、"_parent"、"_top",也可以是iframe的名稱。
3300
			#$conf["tableStart"]="true";#爲該表單是否要以<table>開始。"true"爲是,"false"為否,預設為"false".
3301
			#$conf["tableClass"]="";#表格要套用的css樣式,預設爲"__withoutBorder"無框線的預設樣式;若爲"__withBorder"的話,則爲有框線的預設樣式。
3302
			#$conf["showFieldsetBorder"]="false";#是否要顯示表單區域的框線,預設為"false"不顯示,"true"代表要顯示.
3303
			#參考資料:
3304
			#http://www.w3schools.com/html/html_forms.asp
3305
			#http://www.w3schools.com/tags/tag_fieldset.asp
3306
			$formStart=form::start($conf["form::start"]);
3307
			unset($conf["form::start"]);
3308
 
3309
			#如果表單開始失敗
3310
			if($formStart["status"]=="false"){
3311
 
3312
				#設置執行不正常
3313
				$result["status"]="false";
3314
 
3315
				#程式停止執行
3316
				$result["error"]=$formStart;
3317
 
3318
				#回傳結果
3319
				return $result;
3320
 
3321
				}#if end
3322
 
3323
			#串接表單開始
3324
			$result["content"]=$result["content"].$formStart["content"];
3325
 
3326
			}#if end
3327
 
3328
		#如果$conf["class"]沒有設定
3329
		if(!isset($conf["class"])){
3330
 
3331
			#則$conf["class"]就爲空的
3332
			$conf["class"] = "";
3333
 
3334
			}#if end
3335
 
3336
		#如果$conf["class"]有設定
3337
		else{
3338
 
3339
			#則套用css樣式
3340
			$conf["class"] = "class=".$conf["class"];
3341
 
3342
			}#else end
3343
 
3344
		#如果$conf["width"]沒設定
3345
		if(!isset($conf["width"])){
3346
 
3347
			#則$conf["width"]設爲""
3348
			$conf["width"]="";
3349
 
3350
			}#if end
3351
 
3352
		#如果$conf["width"]有設定
3353
		else{
3354
 
3355
			#就按照設定值
3356
			$conf["width"]=" width=".$conf["width"];
3357
 
3358
			}#else end
3359
 
3360
		#如果$conf["height"]沒設定
3361
		if(!isset($conf["height"])){
3362
 
3363
			#則$conf["height"]設爲""
3364
			$conf["height"]="";
3365
 
3366
			}#if end
3367
 
3368
		#$conf["height"]有設定
3369
		else{
3370
 
3371
			#就按照設定值
3372
			$conf["height"]=" height=".$conf["height"];
3373
 
3374
			}#else end
3375
 
3376
		#如果 $conf["buttonId"] 存在
3377
		if(isset($conf["buttonId"])){
3378
 
3379
			#設置按鈕的id
3380
			$conf["buttonId"]=" id=\"".$conf["buttonId"]."\"";
3381
 
3382
			}#if end
3383
 
3384
		#反之
3385
		else{
3386
 
3387
			#設為 ""
3388
			$conf["buttonId"]="";
3389
 
3390
			}#else end
3391
 
3392
		#放置圖片按鈕的樣式
3393
		$result["content"]=$result["content"]."<input type=image src=".$conf["img"]." alt=Submit ".$conf["width"]." ".$conf["height"]." ".$conf["class"]." border = 0 ".$conf["buttonId"]." >";
3394
 
3395
		#如果 $conf["formEnd"] 為 "true"
3396
		if($conf["formEnd"]=="true"){
3397
 
3398
			#函式說明:
3399
			#表單結束
3400
			#回傳結果:
3401
			#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
3402
			#$result["error"],錯誤訊息陣列.
3403
			#$resutl["function"],當前執行的函式名稱.
3404
			#$result["content"],表單結束的語法.
3405
			#必填參數:
3406
			$conf["form::end"]["tableEnd"]="false";#爲該表單是否要以</table>結尾。"true"爲是;"false"爲否。
3407
			$formEnd=form::end($conf["form::end"]);
3408
			unset($conf["form::end"]);
3409
 
3410
			#如果 表單結束 失敗
3411
			if($formEnd["status"]=="false"){
3412
 
3413
				#設置執行不正常
3414
				$result["status"]="false";
3415
 
3416
				#程式停止執行
3417
				$result["error"]=$formEnd;
3418
 
3419
				#回傳結果
3420
				return $result;
3421
 
3422
				}#if end
3423
 
3424
			#串接表單結束
3425
			$result["content"]=$result["content"].$formEnd["content"];
3426
 
3427
			}#if end
3428
 
3429
		#如果其值爲 true
3430
		if($conf["tdEnd"]=="true"){
3431
 
3432
			$result["content"]=$result["content"]."</td>";
3433
 
3434
			}#if end
3435
 
3436
		#如果其值爲 true
3437
		if($conf["trEnd"]=="true"){
3438
 
3439
			$result["content"]=$result["content"]."</tr>";
3440
 
3441
			}#if end
3442
 
3443
		#執行到這邊代表執行正常
3444
		$result["status"]="true";
3445
 
3446
		#回傳結果
3447
		return $result;
3448
 
3449
		}#function buttonImg end
3450
 
3451
	/*
3452
	#函式說明:
3453
	#將表單填寫的狀態還原至預設值的按鈕.
3454
	#回傳的內容:
3455
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
3456
	#$result["function"],當前執行的函數.
3457
	#$result["error"],錯誤訊息陣列.
3458
	#$result["content"],按鈕語法.
3459
	#必填參數:
3460
	#$conf["value"],字串,爲清空表單內容的按鈕顯示名稱
3461
	$conf["value"]="reset";
3462
	#可省略參數:
3463
	#$conf["class"],字串,爲要套用的css樣式名稱,預設為__qbpwcf_button."
3464
	#$conf["class"]="";
3465
	#$conf["trStart"],字串,爲是否要以<tr>開頭,"true"表示"是",也可以看作新的一列開始,預設為"false".
3466
	#$conf["trStart"]="true";
3467
	#$conf["tdStart"],字串,爲是否要以<td>開頭,"true"表示"是",可以看成列裏面的元素開始,預設為"false".
3468
	#$conf["tdStart"]="true";
3469
	#$conf["tdEnd"],字串,爲是否要以</td>結尾,"true"表示"是",也可以看成列裏面的元素結束,預設為"false".
3470
	#$conf["trEnd"]="true";#爲是否要以</tr>結尾,"true"表示"是",也可以看作該列結束,預設為"false".
3471
	#$conf["buttonId"],字串,按鈕的id.
3472
	#$conf["buttonId"]="";
3473
	#參考資料:
3474
	#無.
3475
	#備註:
3476
	#無.
3477
	*/
3478
	public static function buttonReset(&$conf){
3479
 
3480
		#初始化要回傳的內容
3481
		$result=array();
3482
 
3483
		#設置當前執行的函數
3484
		$result["function"]=__FUNCTION__;
3485
 
3486
		#初始化content樣式內容
3487
		$result["content"]="";
3488
 
3489
		#如果 $conf 不為陣列
3490
		if(gettype($conf)!="array"){
3491
 
3492
			#設置執行失敗
3493
			$result["status"]="false";
3494
 
3495
			#設置執行錯誤訊息
3496
			$result["error"][]="\$conf變數須為陣列形態";
3497
 
3498
			#如果傳入的參數為 null
3499
			if($conf==null){
3500
 
3501
				#設置執行錯誤訊息
3502
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
3503
 
3504
				}#if end
3505
 
3506
			#回傳結果
3507
			return $result;
3508
 
3509
			}#if end
3510
 
3511
		#檢查參數
3512
		#函式說明:
3513
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
3514
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
3515
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
3516
		#$result["function"],當前執行的函式名稱.
3517
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
3518
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
3519
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
3520
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
3521
		#必填參數:
3522
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
3523
		$conf["variableCheck.checkArguments"]["varInput"]=&$conf;
3524
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
3525
		$conf["variableCheck.checkArguments"]["mustBeFilledVariableName"]=array("value");
3526
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double");
3527
		$conf["variableCheck.checkArguments"]["mustBeFilledVariableType"]=array("string");
3528
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
3529
		$conf["variableCheck.checkArguments"]["referenceVarKey"]="variableCheck.checkArguments";
3530
		#可省略參數:
3531
		#$conf["variableCheck.checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"false"。
3532
		#$conf["variableCheck.checkArguments"]["canBeEmptyString"]="false";
3533
		#$conf["variableCheck.checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
3534
		$conf["variableCheck.checkArguments"]["skipableVariableName"]=array("class","trStart","tdStart","tdEnd","trEnd","buttonId");
3535
		#$conf["variableCheck.checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
3536
		$conf["variableCheck.checkArguments"]["skipableVariableType"]=array("string","string","string","string","string","string");
3537
		#$conf["variableCheck.checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,"null"代表不指定.
3538
		$conf["variableCheck.checkArguments"]["skipableVarDefaultValue"]=array("__qbpwcf_button","false","false","false","false",null);
3539
		$checkResult=variableCheck::checkArguments($conf["variableCheck.checkArguments"]);
3540
		unset($conf["variableCheck.checkArguments"]);
3541
 
3542
		#如果檢查失敗
3543
		if($checkResult["status"]=="false"){
3544
 
3545
			#設置執行不正常
3546
			$result["status"]="false";
3547
 
3548
			#程式停止執行
3549
			$result["error"]=$checkResult;
3550
 
3551
			#回傳結果
3552
			return $result;
3553
 
3554
			}#if end
3555
 
3556
		#如果檢查不通過
3557
		if($checkResult["passed"]=="false"){
3558
 
3559
			#設置執行不正常
3560
			$result["status"]="false";
3561
 
3562
			#程式停止執行
3563
			$result["error"]=$checkResult;
3564
 
3565
			#回傳結果
3566
			return $result;
3567
 
3568
			}#if end
3569
 
3570
		#如果其值爲 true
3571
		if($conf["trStart"]=="true"){
3572
 
3573
			#串接 "<tr>"
3574
			$result["content"]=$result["content"]."<tr>";
3575
 
3576
			}#if end
3577
 
3578
		#如果其值爲 true
3579
		if($conf["tdStart"]=="true"){
3580
 
3581
			#串接 "<td>"
3582
			$result["content"]=$result["content"]."<td>";
3583
 
3584
			}#if end
3585
 
3586
		#如果不使用樣式
3587
		if(!isset($conf["class"])){
3588
 
3589
			#則$class就爲空的
3590
			$conf["class"] = "";
3591
 
3592
			}#if end
3593
 
3594
		#如果有使用class樣式
3595
		else{
3596
 
3597
			#則套用樣式
3598
			$conf["class"] = " class=".$conf["class"];
3599
 
3600
			}#else end
3601
 
3602
		#套用設定值
3603
		$conf["value"]=" value =".$conf["value"];
3604
 
3605
		#如果 $conf["buttonId"] 有設置
3606
		if(isset($conf["buttonId"])){
3607
 
3608
			#設置按鈕id
3609
			$conf["buttonId"]=" id=\"".$conf["buttonId"]."\"";
3610
 
3611
			}#if end
3612
 
3613
		#反之
3614
		else{
3615
 
3616
			#設為 ""
3617
			$conf["buttonId"]="";
3618
 
3619
			}#else end
3620
 
3621
		#放置表單內容清空的按鈕
3622
		$result["content"]=$result["content"]."<input type = reset ".$conf["value"]." ".$conf["class"]." border = 0 ".$conf["buttonId"]." >";
3623
 
3624
		#如果其值爲 true
3625
		if($conf["tdEnd"]=="true"){
3626
 
3627
			#串接 "</td>"
3628
			$result["content"]=$result["content"]."</td>";
3629
 
3630
			}#if end
3631
 
3632
		#如果其值爲 true
3633
		if($conf["trEnd"]=="true"){
3634
 
3635
			#串接 "</tr>"
3636
			$result["content"]=$result["content"]."</tr>";
3637
 
3638
			}#if end
3639
 
3640
		#設置執行正常
3641
		$result["status"]="true";
3642
 
3643
		#回傳語法
3644
		return $result;
3645
 
3646
		}#function buttonReset end
3647
 
3648
	/*
3649
	#函式說明:
3650
	#一個簡單的按鈕,按了可以到指定的頁面,同時也可以傳送多個隱藏的變數
3651
	#回傳的結果
3652
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
3653
	#$result["error"],錯誤訊息陣列
3654
	#$result["function"],當前執行的函數名稱.
3655
	#$result["content"],語法內容
3656
	#必填參數:
3657
	#$conf["buttonDisplayValue"],字串,按鈕上要顯示的文字
3658
	$conf["buttonDisplayValue"]="";
3659
	#可省略參數:
3660
	#$conf["buttonStyleName"],字串,按鈕的css樣式應該爲何,若省略的話預設會採用 __qbpwcf_button 的樣式
3661
	#$conf["buttonStyleName"]="";
3662
	#$conf["hiddenVarName"],陣列,要傳送的隱藏變數名稱,與 $conf["hiddenVarContent"] 相對應。
3663
	#$conf["hiddenVarName"]=array();
3664
	#$conf["hiddenVarContent"],陣列,要傳誦的隱藏變數內容,與 $conf["hiddenVarName"] 相對應。
3665
	#$conf["hiddenVarContent"]=array();
3666
	#$conf["disabled"],字串,為按鈕的功能是否要取消,若為"true"則代表要取消,若為"false"則代表功能正常,預設為"false".
3667
	#$conf["disabled"]="true";
3668
	#$conf["formStart"],字串,爲是否要表單開始,如果爲"true"則代表要表單開始,預設爲"false".
3669
	#$conf["formStart"]="true";
3670
	#$conf["method"],字串,爲傳輸的方法,若沒設定則預設爲post,其他可用的參數爲get。
3671
	#$conf["method"]="";
3672
	#$conf["formName"],字串,該表單的名稱
3673
	#$conf["formName"]="";
3674
	#$conf["buttonId"],字串,按鈕的id
3675
	#$conf["buttonId"]="";
3676
	#$conf["actionPage"],字串,按鈕按了之後要到哪個地方?若爲 $_SERVER["PHP_SELF"],則爲回到目前頁面。
3677
	#$conf["actionPage"]="";
3678
	#$conf["buttonActionScriptFunction"],字串,爲按下按鈕時所要執行的javaScript函式,預設不設定,可以是"document.forms.formName.submit()"(傳送名爲testForm的表單內容).
3679
	#$conf["buttonActionScriptFunction"]="";
3680
	#$conf["formEnd"],字串,爲是否要表單結束,如果爲"true"則代表要表單結束,預設爲"false"
3681
	#$conf["formEnd"]="true";
3682
	#$conf["tableStart"],字串,爲是否要表格開始,"true"表示"是",預設為"false".
3683
	#$conf["tableStart"]="true";
3684
	#$conf["tableClass"],字串,爲表格要採用的css樣式名稱,"__withoutBorder"代表沒有框線的預設樣式;"__withBorder"代表有框線的預設樣式,預設為"__withoutBorder".
3685
	#$conf["tableClass"]="__withoutBorder";
3686
	#$conf["trStart"],字串,爲是否要以<tr>開頭,"true"表示"是"。也可以看作新的一列開始,預設為"false".
3687
	#$conf["trStart"]="true"
3688
	#$conf["trClass"],字串,列開始的css樣式,"__withoutBorder"代表沒有框線的預設樣式;"__withBorder"代表有框線的預設樣式,預設為"__withoutBorder"
3689
	#$conf["trClass"]="__withoutBorder";
3690
	#$conf["tdStart"],字串,爲是否要以<td>開頭,"true"表示"是"。也可以看成列裏面的元素開始,預設為"false"
3691
	#$conf["tdStart"]="true";
3692
	#$conf["tdClass"],字串,行開始的css樣式,"__withoutBorder"代表沒有框線的預設樣式;"__withBorder"代表有框線的預設樣式,預設為"__withoutBorder"
3693
	#$conf["tdClass"]="__withoutBorder";
3694
	#$conf["tdEnd"],字串,爲是否要以</td>結尾,"true"表示"是"。也可以看成列裏面的元素結束,預設為"false".
3695
	#$conf["tdEnd"]="true";
3696
	#$conf["trEnd"],字串,爲是否要以</tr>結尾,"true"表示"是"。也可以看作該列結束,預設為"false".
3697
	#$conf["trEnd"]="true";
3698
	#$conf["displayTarget"],字串,頁面的呈現方法,可以是開新視窗(_blank)、在目前頁面、頁框裏面(_self)、在父頁面(_parent)、最上層頁面(_top),預設為"_top"。
3699
	#$conf["displayTarget"]="";
3700
	#$conf["tableEnd"],字串,爲是否要表格結束,"true"表示"是",預設為"false".
3701
	#$conf["tableEnd"]="true";
3702
	#參考資料:
3703
	#無.
3704
	#備註:
3705
	#無.
3706
	*/
3707
	public static function sendHugeDataButton(&$conf){
3708
 
3709
		#初始化要回傳的內容
3710
		$result=array();
3711
 
3712
		#設置當前執行的函數
3713
		$result["function"]=__FUNCTION__;
3714
 
3715
		#初始化content樣式內容
3716
		$result["content"]="";
3717
 
3718
		#如果 $conf 不為陣列
3719
		if(gettype($conf)!="array"){
3720
 
3721
			#設置執行失敗
3722
			$result["status"]="false";
3723
 
3724
			#設置執行錯誤訊息
3725
			$result["error"][]="\$conf變數須為陣列形態";
3726
 
3727
			#如果傳入的參數為 null
3728
			if($conf==null){
3729
 
3730
				#設置執行錯誤訊息
3731
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
3732
 
3733
				}#if end
3734
 
3735
			#回傳結果
3736
			return $result;
3737
 
3738
			}#if end
3739
 
3740
		#檢查參數
3741
		#函式說明:
3742
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
3743
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
3744
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
3745
		#$result["function"],當前執行的函式名稱.
3746
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
3747
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
3748
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
3749
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
3750
		#必填參數:
3751
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
3752
		$conf["variableCheck.checkArguments"]["varInput"]=&$conf;
3753
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
3754
		$conf["variableCheck.checkArguments"]["mustBeFilledVariableName"]=array("buttonDisplayValue");
3755
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double");
3756
		$conf["variableCheck.checkArguments"]["mustBeFilledVariableType"]=array("string");
3757
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
3758
		$conf["variableCheck.checkArguments"]["referenceVarKey"]="variableCheck.checkArguments";
3759
		#可省略參數:
3760
		#$conf["variableCheck.checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"false"。
3761
		#$conf["variableCheck.checkArguments"]["canBeEmptyString"]="false";
3762
		#$conf["variableCheck.checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
3763
		$conf["variableCheck.checkArguments"]["skipableVariableName"]=array("method","buttonStyleName","hiddenVarName","hiddenVarContent","disabled","formStart","formName","actionPage","buttonActionScriptFunction","formEnd","tableStart","tableClass","trStart","trClass","tdStart","tdClass","tdEnd","trEnd","displayTarget","tableEnd","formName","buttonId");
3764
		#$conf["variableCheck.checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
3765
		$conf["variableCheck.checkArguments"]["skipableVariableType"]=array("string","string","array","array","string","string","string","string","string","string","string","string","string","string","string","string","string","string","string","string","string","string");
3766
		#$conf["variableCheck.checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,"null"代表不指定.
3767
		$conf["variableCheck.checkArguments"]["skipableVarDefaultValue"]=array("post","__qbpwcf_button",null,null,"false","false",null,null,null,"false","false","__withoutBorder","false","__withoutBorder","false","__withoutBorder","false","false","_top","false",null,null);
3768
		#$conf["variableCheck.checkArguments"]["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
3769
		$conf["variableCheck.checkArguments"]["arrayCountEqualCheck"][]=array("hiddenVarName","hiddenVarContent");
3770
		$checkResult=variableCheck::checkArguments($conf["variableCheck.checkArguments"]);
3771
		unset($conf["variableCheck.checkArguments"]);
3772
 
3773
		#如果檢查失敗
3774
		if($checkResult["status"]=="false"){
3775
 
3776
			#設置執行不正常
3777
			$result["status"]="false";
3778
 
3779
			#程式停止執行
3780
			$result["error"]=$checkResult;
3781
 
3782
			#回傳結果
3783
			return $result;
3784
 
3785
			}#if end
3786
 
3787
		#如果檢查不通過
3788
		if($checkResult["passed"]=="false"){
3789
 
3790
			#設置執行不正常
3791
			$result["status"]="false";
3792
 
3793
			#程式停止執行
3794
			$result["error"]=$checkResult;
3795
 
3796
			#回傳結果
3797
			return $result;
3798
 
3799
			}#if end
3800
 
3801
		#如果要表格開始
3802
		if($conf["tableStart"]=="true"){
3803
 
3804
			#函式說明:
3805
			#表格開始,可以設定表格的厚度和位置
3806
			#回傳結果:
3807
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
3808
			#$result["content"],表格開始的語法
3809
			#$result["function"],當前執行的函數
3810
			#$result["error"],函式錯誤訊息
3811
			#必填寫的參數:
3812
			$conf["table::start"]["class"]=$conf["tableClass"];#爲表格的css樣式,若為"",則代表不套用css樣式;若爲"__withoutBorder"的話則套用無框線的預設樣式;若爲"__withBorder"的話,則爲有框線的預設樣式。
3813
			$tableStart=table::start($conf["table::start"]);
3814
			unset($conf["table::start"]);
3815
 
3816
			#如果表開始立失敗
3817
			if($tableStart["status"]=="false"){
3818
 
3819
				#設置執行失敗
3820
				$result["status"]="false";
3821
 
3822
				#設置執行錯誤訊息
3823
				$result["error"]=$tableStart;
3824
 
3825
				#回傳結果
3826
				return $result;
3827
 
3828
				}#if end
3829
 
3830
			#串接表格開始的語法
3831
			$result["content"]=$result["content"].$tableStart["content"];
3832
 
3833
			}#if end
3834
 
3835
		#如果 $conf["formStart"] 等於 "true"
3836
		if($conf["formStart"]=="true"){
3837
 
3838
			#如果 $conf["actionPage"] 有設定
3839
			if(isset($conf["actionPage"])){
3840
 
3841
				#表單開始
3842
				#函式說明:
3843
				#表單開始
3844
				#回傳結果:
3845
				#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
3846
				#$result["error"],錯誤訊息陣列.
3847
				#$resutl["function"],當前執行的函式名稱.
3848
				#$result["content"],表單開始的語法.
3849
				$conf["form"]["start"]["action"]=$conf["actionPage"];#爲要交給那個檔案處理該表單傳送的內容
3850
				#可省略參數:
3851
 
3852
				#如果有設定 $conf["formName"]
3853
				if(isset($conf["formName"])){
3854
 
3855
					$conf["form"]["start"]["name"]=$conf["formName"];#爲該表單的名稱
3856
 
3857
					}#if end
3858
 
3859
				$conf["form"]["start"]["method"]=$conf["method"];#爲傳輸的方法,若沒設定則預設爲post,其他可用的參數爲get。
3860
				$conf["form"]["start"]["target"]=$conf["displayTarget"];#為顯示的方式,若沒設定則預設爲"_self",其他可用的參數爲 "_blank"、"_parent"、"_top",也可以是iframe的名稱。
3861
				#$conf["form"]["start"]["tableStart"]=$conf["tableStart"];#爲該表單是否要以<table>開始。"true"爲是;
3862
				#$conf["form"]["start"]["tableClass"]=$conf["tableClass"];#表格要套用的css樣式,若爲"__withoutBorder"的話則套用無框線的預設樣式;若爲"__withBorder"的話,則爲有框線的預設樣式。
3863
				$formStart=form::start($conf["form"]["start"]);
3864
				unset($conf["form"]);
3865
 
3866
				#如果表單開始失敗
3867
				if($formStart["status"]=="false"){
3868
 
3869
					#設置執行失敗
3870
					$result["status"]="false";
3871
 
3872
					#設置執行錯誤訊息
3873
					$result["error"]=$formStart;
3874
 
3875
					#回傳結果
3876
					return $result;
3877
 
3878
					}#if end
3879
 
3880
				#串接表單開始的語法
3881
				$result["content"]=$result["content"].$formStart["content"];
3882
 
3883
				}#if end
3884
 
3885
			#反之不存在
3886
			else{
3887
 
3888
				#設置執行失敗
3889
				$result["status"]="false";
3890
 
3891
				#設置錯誤訊息
3892
				$result["status"]="\$conf[\"action\"]參數沒有設置!";
3893
 
3894
				#回傳結果
3895
				return $result;
3896
 
3897
				}#else end
3898
 
3899
			}#if end
3900
 
3901
		#如果其值爲 true
3902
		if($conf["trStart"]=="true"){
3903
 
3904
			#套用列開始指定的css樣式
3905
			#函式說明:
3906
			#列開始
3907
			#回傳結果:
3908
			#$result["status"],執行是否正常,"true"代表正常;"false"代表不正常.
3909
			#$result["error"],函式錯誤訊息陣列.
3910
			#$result["content"],列開始的語法.
3911
			#$result["function"],當前執行的函式名稱.
3912
			#必填寫的參數:
3913
			$conf["table"]["trStart"]["class"]=$conf["trClass"];#爲tr的css樣式,若為""則為不套用css樣式;若爲"__withoutBorder"的話則套用無框線的預設樣式;若爲"__withBorder"的話,則爲有框線的預設樣式。
3914
			$trStart=table::trStart($conf["table"]["trStart"]);
3915
			unset($conf["table"]);
3916
 
3917
			#如果列開始失敗
3918
			if($trStart["status"]=="false"){
3919
 
3920
				#設置執行失敗
3921
				$result["status"]="false";
3922
 
3923
				#設置執行錯誤訊息
3924
				$result["error"]=$trStart;
3925
 
3926
				#回傳結果
3927
				return $result;
3928
 
3929
				}#if end
3930
 
3931
			#串接列開始
3932
			$result["content"]=$result["content"].$trStart["content"];
3933
 
3934
			}#if end
3935
 
3936
		#如果$conf["tdStart"]其值爲 "true"
3937
		if($conf["tdStart"]=="true"){
3938
 
3939
			#列開始且套用css樣式.
3940
			#函式說明:
3941
			#行開始
3942
			#回傳結果:
3943
			#$result["status"],執行是否正常,"true"代表正常;"false"代表不正常.
3944
			#$result["error"],函式錯誤訊息陣列.
3945
			#$result["content"],行開始的語法.
3946
			#$result["function"],當前執行的函式名稱.
3947
			#必填寫的參數:
3948
			$conf["table"]["tdStart"]["class"]=$conf["tdClass"];#該 td 要套用套用的 css 樣式
3949
				#預設的樣式
3950
				#"border-width","border","border-color","border-style","margin-right","margin-left"
3951
				#"100%","1px","#0000FF","solid","auto","auto"
3952
			$tdStart=table::tdStart($conf["table"]["tdStart"]);
3953
			unset($conf["table"]);
3954
 
3955
			#若行開始失敗
3956
			if($tdStart["status"]=="false"){
3957
 
3958
				#設置執行失敗
3959
				$result["status"]="false";
3960
 
3961
				#設置執行錯誤訊息
3962
				$result["error"]=$tdStart;
3963
 
3964
				#回傳結果
3965
				return $result;
3966
 
3967
				}#if end
3968
 
3969
			#串接行開始的語法
3970
			$result["content"]=$result["content"].$tdStart["content"];
3971
 
3972
			}#if end
3973
 
3974
		#如果 $conf["hiddenVarName"] 存在
3975
		if(isset($conf["hiddenVarName"])){
3976
 
3977
			#傳送多個隱藏表單的資訊
3978
			#回傳的數值:
3979
			#如果回傳值等於1,則代表參數設定錯誤。
3980
			#$result["sendedArrayName"],
3981
			#$result["sendedArrayValue"],
3982
			#$result["sendedArrayCount"],
3983
			#必填參數:
3984
			$conf_inputMutiHidden["nameArray"]=$conf["hiddenVarName"];#欲傳送的隱藏陣列變數名稱
3985
			$conf_inputMutiHidden["valueArray"]=$conf["hiddenVarContent"];#欲傳送的隱藏陣列變數數值
3986
			$hiddenVar=form::inputMultiHidden($conf_inputMutiHidden);
3987
			unset($conf_inputMutiHidden);
3988
 
3989
			#如果隱藏的表單變數設置失敗
3990
			if($hiddenVar["status"]=="false"){
3991
 
3992
				#設置執行不正常
3993
				$result["status"]="false";
3994
 
3995
				#設置執行錯誤的訊息
3996
				$result["error"]=$hiddenVar;
3997
 
3998
				#回傳結果
3999
				return $result;
4000
 
4001
				}#if end
4002
 
4003
			#接上語法
4004
			$result["content"]=$result["content"].$hiddenVar["content"];
4005
 
4006
			}#if end
4007
 
4008
		#一般按鈕
4009
		#函式說明:
4010
		#放置按鈕
4011
		#回傳結果:
4012
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
4013
		#$result["function"],當前執行的函數.
4014
		#$result["error"],錯誤訊息陣列.
4015
		#$result["content"],按鈕語法.
4016
		#必填參數:
4017
		$conf["form::button"]["buttonDisplayValue"]=$conf["buttonDisplayValue"];#爲按鈕上顯示的文字。
4018
		#可省略參數:
4019
		$conf["form::button"]["buttonStyleName"]=$conf["buttonStyleName"];#可省略,爲按鈕所要使用的css樣式類別名稱,預設的css樣式爲 __simpleButtonLinkDefaultButtonCssStyle 。
4020
			#其屬性爲   "width","height","font-size","text-align"
4021
			#其屬性值爲 "100%" ,  "50"  ,    "30"   ,   "center"
4022
 
4023
		#如果有設定 $conf["buttonActionScriptFunction"]
4024
		if(isset($conf["buttonActionScriptFunction"])){
4025
 
4026
			$conf["form::button"]["buttonActionScriptFunction"]=$conf["buttonActionScriptFunction"];#可省略,爲按下按鈕時所要執行的javaScript函式,預設不設定。
4027
			#"document.forms.formName.submit()"爲傳送名爲testForm的表單內容
4028
			#"window.print()"爲使用瀏覽器內建工具列印當前網頁
4029
 
4030
			}#if end
4031
 
4032
		#$conf["buttonBorder"]="";#可省略,爲IE9內會自動產生外框,此爲外框的厚度,屬性值爲正整數,預設爲0。
4033
		$conf["form::button"]["disabled"]=$conf["disabled"];#可省略,為按鈕的功能是否要取消,若為"true"則代表要取消,若為"false"則代表功能正常,預設為"false".
4034
		#$conf["tableStart"]="true";#爲是否要表格開始。"false"代表否,"true"代表是。預設爲"false"。
4035
		#$conf["tableClass"]="";#表格要套用的css樣式,若省略的話,則預設爲 __defaultTbaleCsssStyle 其屬性爲 table-layout:fixed word-break:break-all width:100% ,須搭配 $conf["tablStart"] 與 $conf["tableEnd"] 使用。
4036
		#$conf["trStart"]="true";#爲是否要以<tr>開頭,"true"表示"是"。也可以看作新的一列開始,預設為"false".
4037
		#$conf["trClass"]="__withoutBorder";#<tr>要套用的css樣式,預設為"__withoutBorder",亦即沒有框線的樣式;"__withBorder"則爲有框線的樣式
4038
		#$conf["tdStart"]="true";#爲是否要以<td>開頭,"true"表示"是"。也可以看成列裏面的元素開始,預設為"false".
4039
		#$conf["tdClass"]="__withoutBorder";#<td>要套用的css樣式,"__withoutBorder"爲沒有框線的樣式;__withBorder爲有框線的樣式
4040
		#$conf["tdEnd"]="true";#爲是否要以</td>結尾,"true"表示"是"。也可以看成列裏面的元素結束,預設為"false".
4041
		#$conf["trEnd"]="true";#爲是否要以</tr>結尾,"true"表示"是"。也可以看作該列結束,預設為"false".
4042
		#$conf["tableEnd"]="true";#爲是否要表格結束。"false"代表否,"true"代表是,預設爲"false"。
4043
		#$conf["formStart"]="true";#爲是否要表單開始,如果爲"true"則代表要表單開始,預設為"false".
4044
		#$conf["action"]="";#爲表單要傳送到哪個頁面,須搭配$conf["formStart"]與$conf["formEnd"]參數使用
4045
		#$conf["target"]="";#為目標表單顯示的方式,若沒設定則預設爲"_self",其他可用的參數爲 "_blank"、"_parent"、"_top",也可以是iframe的名稱。須搭配$conf["formStart"]與$conf["formEnd"]參數使用
4046
		#$conf["formEnd"]="true";#爲是否要表單結束,如果爲"true"則代表要表單結束,預設為"false".
4047
		#$conf["buttonId"],字串,按鈕的id.
4048
 
4049
		#如果 $conf["buttonId"] 有設置
4050
		if(isset($conf["buttonId"])){
4051
 
4052
			#設置按鈕id
4053
			$conf["form::button"]["buttonId"]=$conf["buttonId"];
4054
 
4055
			}#if end
4056
 
4057
		#參考資料:
4058
		#http://stackoverflow.com/questions/3014649/how-to-disable-html-button-using-javascript
4059
		$button=form::button($conf["form::button"]);
4060
		unset($conf["form::button"]);
4061
 
4062
		#如果建立按鈕失敗
4063
		if($button["status"]=="false"){
4064
 
4065
			#設置執行不正常
4066
			$result["status"]="false";
4067
 
4068
			#設置執行錯誤的訊息
4069
			$result["error"]=$button;
4070
 
4071
			#回傳結果
4072
			return $result;
4073
 
4074
			}#if end
4075
 
4076
		#接上按鈕語法
4077
		$result["content"]=$result["content"].$button["content"];
4078
 
4079
		#如果其值爲 true
4080
		if($conf["tdEnd"]=="true"){
4081
 
4082
			#加上 </td>
4083
			$result["content"]=$result["content"]."</td>";
4084
 
4085
			}#if end
4086
 
4087
		#如果其值爲 true
4088
		if($conf["trEnd"]=="true"){
4089
 
4090
			#加上 </tr>
4091
			$result["content"]=$result["content"]."</tr>";
4092
 
4093
			}#if end
4094
 
4095
		#如果 $conf["formEnd"] 等於 true
4096
		if($conf["formEnd"]=="true"){
4097
 
4098
			#說明:
4099
			#表單結束
4100
			#回傳結果:
4101
			#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
4102
			#$result["error"],錯誤訊息陣列.
4103
			#$resutl["function"],當前執行的函式名稱.
4104
			#$result["content"],表單結束的語法.
4105
			#必填寫的參數:
4106
			$conf_end["tableEnd"]="false";#爲該表單是否要以</table>結尾。"true"爲是;"false"爲否。
4107
			$formEnd=form::end($conf_end);
4108
			unset($conf_end);
4109
 
4110
			#如果表單結束失敗
4111
			if($formEnd["status"]=="false"){
4112
 
4113
				#設置執行失敗
4114
				$result["status"]="false";
4115
 
4116
				#設置執行錯誤訊息
4117
				$result["error"]=$formEnd;
4118
 
4119
				#回傳結果
4120
				return $result;
4121
 
4122
				}#if end
4123
 
4124
			#串聯表單結束的語法
4125
			$result["content"]=$result["content"].$formEnd["content"];
4126
 
4127
			}#if end
4128
 
4129
		#如果有表格結束
4130
		if($conf["tableEnd"]=="true"){
4131
 
4132
			#函式說明:
4133
			#表格結束
4134
			#回傳結果:
4135
			#表格結束的語法
4136
			$result["content"]=$result["content"].table::end();
4137
 
4138
			}#if end
4139
 
4140
		#設置執行正常
4141
		$result["status"]="true";
4142
 
4143
		#回傳結果
4144
		return $result;
4145
 
4146
		}#function sendHugeDataButton end
4147
 
4148
	/*
4149
	#函式說明:
4150
	#可以輸入文字的表單
4151
	#回傳結果:
4152
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
4153
	#$result["function"],當前執行的函數.
4154
	#$result["error"],錯誤訊息陣列.
4155
	#$result["content"],按鈕語法.
4156
	#必填參數:
4157
	#$conf["name"],字串,爲該文字輸入框的名稱,用於讓接收頁面讀取的名稱。
4158
	$conf["name"]="";
4159
	#$conf["readOnly"],字串,爲該文字框是否可以填寫資料,若要只能觀看不能填寫,那麼就必須將其值設爲"true",反之要設爲"false".
4160
	$conf["readOnly"]="false";
4161
	#可省略參數:
4162
	#$conf["width"],字串,爲文字框的外觀長度,預設為"100%".
4163
	#$conf["width"]="";
4164
	#$conf["maxInputLength"],字串,爲可輸入的最大位元長度,預設不限制.
4165
	#$conf["maxInputLength"]="";
4166
	#$conf["autoFocus"],字串,是否為將填寫的指標移到該表單,"true"代表要,預設為"false".
4167
	#$conf["autoFocus"]="";
4168
	#$conf["value"],字串,爲該文字框預設要顯示的文字,預設爲"".
4169
	#$conf["value"]="";
4170
	#$conf["class"],字串,爲要套用的css樣式,若省略,則會套用預設的 "__qbpwcf_inputTextCssStyle" 樣式,其屬性爲 "width:100%","font-size:30px"
4171
	#$conf["class"]="";
4172
	#$conf["classList"],字串陣列,為要使用的多個css class樣式,若有使用,則會取代"class"參數的設定.
4173
	#$conf["classList"]=array();
4174
	#$conf["jsActivitor"],字串,爲觸發js的條件,可以是"onChange"(已改變內容時)、"onClick"(按下按鈕時)、"onkeyup"(當鍵盤按下放開後)、"onmouseover"(當滑鼠移過去的時候)...,須搭配$conf["jsSubmitActionTarget"]參數。
4175
	#$conf["jsActivitor"]="";
4176
	#$conf["jsAction"],字串,爲該js是要做什麼,可以是"document.testForm.submit()"(傳送名爲testForm的表單內容)...,須搭配$conf["jsActivitor"]參數。
4177
	#$conf["jsAction"]="";
4178
	#$conf["trStart"],字串,爲是否要以<tr>開頭,"true"表示"是"。也可以看作新的一列開始,預設為"false".
4179
	#$conf["trStart"]="";
4180
	#$conf["tdStart"],字串,爲是否要以<td>開頭,"true"表示"是"。也可以看成列裏面的元素開始,預設為"false".
4181
	#$conf["tdStart"]="";
4182
	#$conf["formStart"],字串,爲是否要以<form>開頭,"true"表示"是",也可以看成表單的開始,預設為"false".
4183
	#$conf["formStart"]="";
4184
	#$conf["formAction"],字串,表單遞交的目的地,若$conf["formStart"]為"true",則該參數不能省略.
4185
	#$conf["formAction"]="";
4186
	#$conf["formName"],字串,爲該表單的名稱
4187
	#$conf["formName"]="";
4188
	#$conf["formMethod"],字串,爲傳輸的方法,若沒設定則預設爲post,其他可用的參數爲get。
4189
	#$conf["formMethod"]="";
4190
	#$conf["formTarget"],字串,為顯示的方式,若沒設定則預設爲"_self",其他可用的參數爲 "_blank"、"_parent"、"_top",也可以是iframe的名稱。
4191
	#$conf["formTarget"]="";
4192
	#$conf["tableStart"],字串,爲該表單是否要以<table>開始。"true"爲是,預設為"false".
4193
	#$conf["tableStart"]="";
4194
	#$conf["tableClass"],字串,表格要套用的css樣式,若爲"__withoutBorder"的話則套用無框線的預設樣式;若爲"__withBorder"的話,則爲有框線的預設樣式,預設為"__withoutBorder".
4195
	#$conf["tableClass"]="";
4196
	#$conf["formEnd"],字串,爲是否要以<form>結尾,"true"表示"是",也可以看成表單的結束,預設為"false".
4197
	#$conf["formEnd"]="true";
4198
	#$conf["tdEnd"],字串,爲是否要以</td>結尾,"true"表示"是"。也可以看成列裏面的元素結束,預設為"false".
4199
	#$conf["tdEnd"]="true";
4200
	#$conf["trEnd"],字串,爲是否要以</tr>結尾,"true"表示"是"。也可以看作該列結束,預設為"false".
4201
	#$conf["trEnd"]="true";
4202
	#$conf["tableEnd"],字串,爲該表單是否要以</table>結尾,"true"爲是,預設為"false".
4203
	#$conf["tableEnd"]="true";
4204
	#$conf["autocomplete"],字串,是否依據使用者過往輸入的記錄來提示可能要的輸入內容,"on"為啟用,"off"為停用,預設為"on".
4205
	#$conf["autocomplete"]="off";
4206
	#$conf["required"],字串,該欄位是否必填,"true"為必填,"false"為可留空,預設為"false".
4207
	#$conf["required"]="true";
4208
	#$conf["comment"],字串,輸入方框上面要放哪些註解文字,亦即用label來呈現,同時指定"for"屬性的數值為當前"input"標籤的id,意即參數"name"的內容.
4209
	#$conf["comment"]="";
4210
	#$conf["placeholder"],字串,當沒有內容時要顯示的內容.
4211
	#$conf["placeholder"]="";
4212
	#$conf["br"],字串,"true"代表最後要換行,預設為"false".
4213
	#$conf["br"]="true";
4214
	#$conf["p"],字串,"true"代表最後要空一行,預設為"false".
4215
	#$conf["p"]="true";
4216
	#$conf["id"],字串,該元素的id,預設不使用.
4217
	#$conf["id"]="";
4218
	#$conf["dataFormId"],字串,提供用於識別哪一張表單的data屬性名稱.
4219
	#$conf["dataFormId"]="";
4220
	#參考資料:
4221
	#input=>http://www.w3schools.com/tags/tag_input.asp
4222
	#備註:
4223
	#無.
4224
	*/
4225
	public static function inputText(&$conf){
4226
 
4227
		#初始化要回傳的內容
4228
		$result=array();
4229
 
4230
		#設置當前執行的函數
4231
		$result["function"]=__FUNCTION__;
4232
 
4233
		#初始化content樣式內容
4234
		$result["content"]="";
4235
 
4236
		#如果 $conf 不為陣列
4237
		if(gettype($conf)!="array"){
4238
 
4239
			#設置執行失敗
4240
			$result["status"]="false";
4241
 
4242
			#設置執行錯誤訊息
4243
			$result["error"][]="\$conf變數須為陣列形態";
4244
 
4245
			#如果傳入的參數為 null
4246
			if($conf==null){
4247
 
4248
				#設置執行錯誤訊息
4249
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
4250
 
4251
				}#if end
4252
 
4253
			#回傳結果
4254
			return $result;
4255
 
4256
			}#if end
4257
 
4258
		#函式說明:
4259
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
4260
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
4261
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
4262
		#$result["function"],當前執行的函式名稱.
4263
		#$result["argu"],設置給予的參數.
4264
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
4265
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
4266
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
4267
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
4268
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
4269
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
4270
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
4271
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
4272
		#必填寫的參數:
4273
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
4274
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
4275
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
4276
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
4277
		#可以省略的參數:
4278
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
4279
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("name","readOnly");
4280
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
4281
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
4282
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
4283
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
4284
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
4285
		#$conf["canNotBeEmpty"]=array();
4286
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
4287
		#$conf["canBeEmpty"]=array();
4288
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
4289
		#$conf["skipableVariableCanNotBeEmpty"]=array();
4290
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
4291
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("width","maxInputLength","autoFocus","value","class","jsActivitor","jsAction","trStart","tdStart","formStart","formAction","formName","formMethod","formTarget","tableStart","tableClass","formEnd","tdEnd","trEnd","tableEnd","autocomplete","comment","placeholder","br","p","required","id","dataFormId","classList");
4292
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
4293
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string","string","string","string","string","string","string","string","string","string","string","string","string","string","string","string","string","string","string","string","string","string","string","string","string","string","string","array");
4294
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
4295
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,null,"false",null,"__qbpwcf_inputTextCssStyle",null,null,"false","false","false",null,null,"post","_self","false","__withoutBorder","false","false","false","false","on",null,null,"false","false","false",null,null,null);
4296
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
4297
		#$conf["disallowAllSkipableVarIsEmpty"]="";
4298
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
4299
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
4300
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
4301
		#$conf["arrayCountEqualCheck"][]=array();
4302
		#參考資料:
4303
		#array_keys=>http://php.net/manual/en/function.array-keys.php
4304
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
4305
		unset($conf["variableCheck::checkArguments"]);
4306
 
4307
		#如果檢查失敗
4308
		if($checkArguments["status"]=="false"){
4309
 
4310
			#設置執行不正常
4311
			$result["status"]="false";
4312
 
4313
			#程式停止執行
4314
			$result["error"]=$checkArguments;
4315
 
4316
			#回傳結果
4317
			return $result;
4318
 
4319
			}#if end
4320
 
4321
		#如果檢查不通過
4322
		if($checkArguments["passed"]=="false"){
4323
 
4324
			#設置執行不正常
4325
			$result["status"]="false";
4326
 
4327
			#程式停止執行
4328
			$result["error"]=$checkArguments;
4329
 
4330
			#回傳結果
4331
			return $result;
4332
 
4333
			}#if end
4334
 
4335
		#如果 $conf["tableStart"] 為 "true"
4336
		if($conf["tableStart"]=="true"){
4337
 
4338
			#函式說明:
4339
			#表格開始,可以設定表格的厚度和位置
4340
			#回傳結果:
4341
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
4342
			#$result["content"],表格開始的語法
4343
			#$result["function"],當前執行的函數
4344
			#$result["error"],函式錯誤訊息
4345
			#必填寫的參數:
4346
			$conf["table::start"]["class"]=$conf["tableClass"];#爲表格的css樣式,若為"",則代表不套用css樣式;若爲"__withoutBorder"的話則套用無框線的預設樣式;若爲"__withBorder"的話,則爲有框線的預設樣式。
4347
			$tableStart=table::start($conf["table::start"]);
4348
			unset($conf["table::start"]);
4349
 
4350
			#如果表開始立失敗
4351
			if($tableStart["status"]=="false"){
4352
 
4353
				#設置執行失敗
4354
				$result["status"]="false";
4355
 
4356
				#設置執行錯誤訊息
4357
				$result["error"]=$tableStart;
4358
 
4359
				#回傳結果
4360
				return $result;
4361
 
4362
				}#if end
4363
 
4364
			#串接表格開始的語法
4365
			$result["content"]=$result["content"].$tableStart["content"];
4366
 
4367
			}#if end
4368
 
4369
		#如果 $conf["comment"] 有設置
4370
		if(isset($conf["comment"])){
4371
 
4372
			#新增label,且套用css樣式.
4373
			$result["content"]=$result["content"]."<label for=\"".$conf["name"]."\" class=\"".$conf["class"]."\" >".$conf["comment"]."</label>";
4374
 
4375
			}#if end
4376
 
4377
		#如果其值爲 true
4378
		if($conf["trStart"]=="true"){
4379
 
4380
			#串接列開始<tr>
4381
			$result["content"]=$result["content"]."<tr>";
4382
 
4383
			}#if end
4384
 
4385
		#如果其值爲 true
4386
		if($conf["tdStart"]=="true"){
4387
 
4388
			#串接欄位開始<td>
4389
			$result["content"]=$result["content"]."<td>";
4390
 
4391
			}#if end
4392
 
4393
		#如果 $conf["formStart"] 等於 "true"
4394
		if($conf["formStart"]=="true"){
4395
 
4396
			#函式說明:
4397
			#表單開始
4398
			#回傳結果:
4399
			#$result,表單開始的語法
4400
			#必填參數:
4401
			$conf["form"]["start"]["action"]=$conf["formAction"];#爲要交給那個檔案處理該表單傳送的內容
4402
			#可省略參數:
4403
 
4404
			#如果 $conf["formName"] 有設置
4405
			if(isset($conf["formName"])){
4406
 
4407
				#過濾 $conf["formName"] 避免錯誤
4408
				#函式說明:
4409
				#處理字串避免網頁出錯
4410
				#回傳結果:
4411
				#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
4412
				#$result["function"],當前執行的函數.
4413
				#$result["content"],爲處理好的字串.
4414
				#$result["error"],錯誤訊息陣列.
4415
				#必填參數:
4416
				$conf["stringProcess::correctCharacter"]["stringIn"]=$conf["formName"];#爲要處理的字串
4417
				#可省略的參數:
4418
				$conf["stringProcess::correctCharacter"]["selectedCharacter"]=array("<",">","=","//","'","$","%","&","|","/*","*\/","#","\""," ");#爲被選擇要處理的字串/字元,須爲陣列值。
4419
					#若不設定則預設爲要將這些字串作替換("<",">","=","//","'","$","%","&","|","/*","*\/","#","\"")。
4420
					#特殊字元,「\n」代表換行,「\t」代表tab鍵的間隔
4421
				#$conf["changeTo"]=array();#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
4422
				$correctCharacter=stringProcess::correctCharacter($conf["stringProcess::correctCharacter"]);
4423
				unset($conf["stringProcess::correctCharacter"]);
4424
 
4425
				#如果過濾 $conf["formName"] 失敗
4426
				if($correctCharacter["status"]=="false"){
4427
 
4428
					#設置執行失敗
4429
					$result["status"]="false";
4430
 
4431
					#設置執行錯誤訊息
4432
					$result["error"]=$correctCharacter;
4433
 
4434
					#回傳結果
4435
					return $result;
4436
 
4437
					}#if end
4438
 
4439
				#則設定其數值
4440
				$conf["form"]["start"]["name"]=$correctCharacter["content"];#爲該表單的名稱
4441
 
4442
				}#if end
4443
 
4444
			#如果 $conf["formMethod"] 有設置
4445
			if(isset($conf["formMethod"])){
4446
 
4447
				#則設定其數值
4448
				$conf["form"]["start"]["method"]=$conf["formMethod"];#爲傳輸的方法,若沒設定則預設爲post,其他可用的參數爲get。
4449
 
4450
				}#if end
4451
 
4452
			#如果 $conf["formTarget"] 有設定
4453
			if(isset($conf["formTarget"])){
4454
 
4455
				#則設定其數值
4456
				$conf["form"]["start"]["target"]=$conf["formTarget"];#為顯示的方式,若沒設定則預設爲"_self",其他可用的參數爲 "_blank"、"_parent"、"_top",也可以是iframe的名稱。
4457
 
4458
				}#if end
4459
 
4460
			#則設定其參數數值
4461
			$conf["form"]["start"]["tableStart"]="false";#爲該表單是否要以<table>開始。"true"爲是;
4462
 
4463
			#則設定其數值
4464
			#$conf["form"]["start"]["tableClass"]=$conf["tableClass"];#表格要套用的css樣式,若爲"__withoutBorder"的話則套用無框線的預設樣式;若爲"__withBorder"的話,則爲有框線的預設樣式。
4465
			$formStart=form::start($conf["form"]["start"]);
4466
			unset($conf["form"]["start"]);
4467
 
4468
			#如果表單開始失敗
4469
			if($formStart["status"]=="false"){
4470
 
4471
				#設置執行失敗
4472
				$result["status"]="false";
4473
 
4474
				#設置執行錯誤訊息
4475
				$result["error"]=$formStart;
4476
 
4477
				#回傳結果
4478
				return $result;
4479
 
4480
				}#if end
4481
 
4482
			#串接表單開始的語法
4483
			$result["content"]=$result["content"].$formStart["content"];
4484
 
4485
			}#if end
4486
 
4487
		#如果$conf["width"]沒設定
4488
		if(!isset($conf["width"])){
4489
 
4490
			#則$conf["width"]爲空值
4491
			$conf["width"]="";
4492
 
4493
			}#if end
4494
 
4495
		#如果$conf["width"]有設定
4496
		else{
4497
 
4498
			#則套用寬度的css設定值
4499
			$conf["width"]=" style=\"width:".$conf["width"].";\" ";
4500
 
4501
			}#else end
4502
 
4503
		#如果$conf["maxInputLength"]沒設定
4504
		if(!isset($conf["maxInputLength"])){
4505
 
4506
			#則$conf["maxInputLength"]爲空值
4507
			$conf["maxInputLength"]="";
4508
 
4509
			}#if end
4510
 
4511
		#如果$conf["maxInputLength"]有設定
4512
		else{
4513
 
4514
			$conf["maxInputLength"]=" maxlength=".$conf["maxInputLength"];
4515
 
4516
			}#else end
4517
 
4518
		#如果$conf["value"]沒有設定
4519
		if(!isset($conf["value"])){
4520
 
4521
			#則$value就爲空值
4522
			$conf["value"]="";
4523
 
4524
			}#if end
4525
 
4526
		#如果$conf["value"]有設定,且不為空.
4527
		else if($conf["value"]!==""){
4528
 
4529
			#過濾 $conf["value"] 的內容,避免錯誤。
4530
			#函式說明:
4531
			#處理字串避免網頁出錯
4532
			#回傳結果:
4533
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
4534
			#$result["function"],當前執行的函數.
4535
			#$result["content"],爲處理好的字串.
4536
			#$result["error"],錯誤訊息陣列.
4537
			#必填參數:
4538
			$conf["stringProcess::correctCharacter"]["stringIn"]=$conf["value"];#爲要處理的字串
4539
			#可省略的參數:
4540
			$conf["stringProcess::correctCharacter"]["selectedCharacter"]=array("<",">","=","//","'","$","%","&","|","/*","*\/","#","\"");#爲被選擇要處理的字串/字元,須爲陣列值。
4541
				#若不設定則預設爲要將這些字串作替換("<",">","=","//","'","$","%","&","|","/*","*\/","#","\"")。
4542
				#特殊字元,「\n」代表換行,「\t」代表tab鍵的間隔
4543
			#$conf["stringProcess::correctCharacter"]["changeTo"]=array("","","","","","","","","","","","","");#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
4544
			$correctCharacter=stringProcess::correctCharacter($conf["stringProcess::correctCharacter"]);
4545
			unset($conf["stringProcess::correctCharacter"]);
4546
 
4547
			#如果過濾字串失敗
4548
			if($correctCharacter["status"]=="false"){
4549
 
4550
				#設置執行失敗
4551
				$result["status"]="false";
4552
 
4553
				#設置執行錯誤訊息
4554
				$result["error"]=$correctCharacter;
4555
 
4556
				#回傳結果
4557
				return $result;
4558
 
4559
				}#if end
4560
 
4561
			#就設定預設的內容
4562
			$conf["value"] =" value= \"".$correctCharacter["content"]."\" ";
4563
 
4564
			}#else end
4565
 
4566
		#如果$conf["readOnly"]爲"true"
4567
		if($conf["readOnly"]=="true"){
4568
 
4569
			#則$conf["readOnly"] 爲 readonly
4570
			$conf["readOnly"]="readonly=true disabled=true";
4571
 
4572
			}#if end
4573
 
4574
		#反之
4575
		else{
4576
 
4577
			#$conf["readOnly"]爲空
4578
			$conf["readOnly"]="";
4579
 
4580
			}#if end
4581
 
4582
		#判斷 $conf["autoFocus"] 的數值
4583
		switch($conf["autoFocus"]){
4584
 
4585
			#如果是 "true"
4586
			case "true":
4587
 
4588
				#設置為 "autofocus"
4589
				$conf["autoFocus"]=" autofocus=true ";
4590
 
4591
				#跳出 switch
4592
				break;
4593
 
4594
			#如果是其他內容
4595
			default:
4596
 
4597
				#則設置為 ""
4598
				$conf["autoFocus"]="";
4599
 
4600
			}#switch end
4601
 
4602
		#如果有設置 $conf["class"]
4603
		if(isset($conf["class"])){
4604
 
4605
			#套用css設定
4606
			$conf["class"]=" class = \"".$conf["class"]."\"";
4607
 
4608
			}#if end
4609
 
4610
		#反之
4611
		else{
4612
			#設置為空字串
4613
			$conf["class"]="";
4614
 
4615
			}#else end
4616
 
4617
		#如果有 $conf["classList"]
4618
		if(isset($conf["classList"])){
4619
 
4620
			#傳接 class 開始
4621
			$conf["class"]=" class = \"";
4622
 
4623
			#針對 $conf["classList"] 的每個元素
4624
			foreach($conf["classList"] as $index => $cssClassName){
4625
 
4626
				#串接 class 名稱
4627
				$conf["class"]=$conf["class"].$cssClassName;
4628
 
4629
				#若後面還有未串接的 class 名稱
4630
				if(isset($conf["classList"][$index+1])){
4631
 
4632
					#串接空格
4633
					$conf["class"]=$conf["class"]." ";
4634
 
4635
					}#if end
4636
 
4637
				}#foreach end
4638
 
4639
			#串接 class 結束
4640
			$conf["class"]=$conf["class"]."\"";
4641
 
4642
			}#if end
4643
 
4644
		#如果 $conf["jsActivitor"] 與 $conf["jsAction"] 皆有設定
4645
		if( isset($conf["jsActivitor"]) && isset($conf["jsAction"]) ){
4646
 
4647
			#則將設定值組合
4648
			$conf["jsCustom"]=" ".$conf["jsActivitor"]."=".$conf["jsAction"]." ";
4649
 
4650
			}#if end
4651
 
4652
		#如果 $conf["jsCustom"] 沒有設定
4653
		if(!isset($conf["jsCustom"])){
4654
 
4655
			#將其設爲空值
4656
			$conf["jsCustom"]="";
4657
 
4658
			}#if end
4659
 
4660
		#過濾 $conf["name"] 避免錯誤
4661
		#函式說明:
4662
		#處理字串避免網頁出錯
4663
		#回傳結果:
4664
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
4665
		#$result["function"],當前執行的函數.
4666
		#$result["content"],爲處理好的字串.
4667
		#$result["error"],錯誤訊息陣列.
4668
		#必填參數:
4669
		$conf["stringProcess::correctCharacter"]["stringIn"]=$conf["name"];#爲要處理的字串
4670
		#可省略的參數:
4671
		$conf["stringProcess::correctCharacter"]["selectedCharacter"]=array("<",">","=","//","'","$","%","&","|","/*","*\/","#","\""," ");#爲被選擇要處理的字串/字元,須爲陣列值。
4672
			#若不設定則預設爲要將這些字串作替換("<",">","=","//","'","$","%","&","|","/*","*\/","#","\"")。
4673
			#特殊字元,「\n」代表換行,「\t」代表tab鍵的間隔
4674
		#$conf["stringProcess::correctCharacter"]["changeTo"]=array("","","","","","","","","","","","","");#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
4675
		$correctCharacter=stringProcess::correctCharacter($conf["stringProcess::correctCharacter"]);
4676
		unset($conf["stringProcess::correctCharacter"]);
4677
 
4678
		#如果過濾字串失敗
4679
		if($correctCharacter["status"]=="false"){
4680
 
4681
			#設置執行失敗
4682
			$result["status"]="false";
4683
 
4684
			#設置執行錯誤訊息
4685
			$result["error"]=$correctCharacter;
4686
 
4687
			#回傳結果
4688
			return $result;
4689
 
4690
			}#if end
4691
 
4692
		#置換過濾好了的$conf["name"]
4693
		$conf["name"]=$correctCharacter["content"];
4694
 
4695
		#如果有設定 $conf["placeholder"]
4696
		if(isset($conf["placeholder"])){
4697
 
4698
			#串接 placeholder 的內容
4699
			$conf["placeholder"]=" placeholder=\"".$conf["placeholder"]."\" ";
4700
 
4701
			}#if end
4702
 
4703
		#反之沒有設定 $conf["placeholder"]
4704
		else{
4705
 
4706
			#設為 ""
4707
			$conf["placeholder"]="";
4708
 
4709
			}#else end
4710
 
4711
		#如果 $conf["required"] 為"true"
4712
		if($conf["required"]=="true"){
4713
 
4714
			#設置 "required" 屬性
4715
			$conf["required"]="required=true";
4716
 
4717
			}#if end
4718
 
4719
		#反之
4720
		else{
4721
 
4722
			#設為空值
4723
			$conf["required"]="";
4724
 
4725
			}#else end
4726
 
4727
		#如果有設置id
4728
		if(isset($conf["id"])){
4729
 
4730
			#設置id屬性
4731
			$conf["id"]="id=\"".$conf["id"]."\"";
4732
 
4733
			}#if end
4734
 
4735
		#反之
4736
		else{
4737
 
4738
			#設為空值
4739
			$conf["id"]="";
4740
 
4741
			}#else end
4742
 
4743
		#如果有設置 $conf["dataFormId"]
4744
		if(isset($conf["dataFormId"])){
4745
 
4746
			#設置 data-id 屬性
4747
			$conf["dataFormId"]="data-form-id=\"".$conf["dataFormId"]."\"";
4748
 
4749
			}#if end
4750
 
4751
		#反之設置為空數值	
4752
		else{
4753
 
4754
			$conf["dataFormId"]="";
4755
 
4756
			}#else end	
4757
 
4758
		#如果要 autocomplete
4759
		if($conf["autocomplete"]==="on")
4760
		{
4761
			#設置為 "autocomplete"
4762
			$conf["autocomplete"]="autocomplete";
4763
 
4764
		}#if end
4765
 
4766
		#反之
4767
		else
4768
		{
4769
			#設置為空字串
4770
			$conf["autocomplete"]="";
4771
 
4772
		}#else end
4773
 
4774
		#放置可以輸入文字的表單
4775
		$result["content"]=$result["content"]."<input ".$conf["id"]." type = \"text\" ".$conf["width"]." ".$conf["maxInputLength"]." name = ".$conf["name"]." id = ".$conf["name"]." ".$conf["value"]." ".$conf["readOnly"]." ".$conf["autoFocus"]." ".$conf["class"]." ".$conf["jsCustom"]." ".$conf["placeholder"]." ".$conf["autocomplete"]." ".$conf["required"]." ".$conf["dataFormId"]." >";
4776
 
4777
		#如果 $conf["formEnd"] 等於 "true"
4778
		if($conf["formEnd"]=="true"){
4779
 
4780
			#函式說明:
4781
			#表單結束
4782
			#回傳結果:
4783
			#$result,表單結束的語法
4784
			#必填參數:
4785
			#則設定其數值
4786
			$conf["form"]["end"]["tableEnd"]="false";#爲該表單是否要以</table>結尾。"true"爲是;"false"爲否。
4787
			$formEnd=form::end($conf["form"]["end"]);
4788
			unset($conf["form"]["end"]);
4789
 
4790
			#串接表單結束的語法
4791
			$result["content"]=$result["content"].$formEnd["content"];
4792
 
4793
			}#if end
4794
 
4795
		#如果其值爲 true
4796
		if($conf["tdEnd"]=="true"){
4797
 
4798
			#串接欄位結束的語法
4799
			$result["content"]=$result["content"]."</td>";
4800
 
4801
			}#if end
4802
 
4803
		#如果其值爲 true
4804
		if($conf["trEnd"]=="true"){
4805
 
4806
			#串接列結束的語法
4807
			$result["content"]=$result["content"]."</tr>";
4808
 
4809
			}#if end
4810
 
4811
		#如果 $conf["br"] 等於 "true"
4812
		if($conf["br"]=="true"){
4813
 
4814
			#結尾加上<br>
4815
			$result["content"]=$result["content"]."<br>";
4816
 
4817
			}#if end
4818
 
4819
		#如果 $conf["p"] 等於 "true"
4820
		if($conf["p"]=="true"){
4821
 
4822
			#結尾加上<p>
4823
			$result["content"]=$result["content"]."<p>";
4824
 
4825
			}#if end
4826
 
4827
		#執行到這邊代表執行成功
4828
		$result["status"]="true";
4829
 
4830
		#回傳結果
4831
		return $result;
4832
 
4833
		}#function inputText end
4834
 
4835
	/*
4836
	#函式說明:
4837
	#可以輸入文字的區塊
4838
	#回傳結果:
4839
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
4840
	#$result["function"],當前執行的函數.
4841
	#$result["error"],錯誤訊息陣列.
4842
	#$result["content"],按鈕語法.
4843
	#必填參數:
4844
	$conf["name"]="";#爲文字輸入框的名稱,供接收端辨識用。
4845
	$conf["readOnly"]="false";#爲是否要爲唯讀,如果爲"true",則爲唯讀。反之則爲"false"。
4846
	#可省略參數:
4847
	#$conf["id"],字串,文字區塊的id,供javaScript呼叫用.
4848
	#$conf["id"]="";
4849
	#$conf["width"]="";#為輸入框的寬度,預設不指定.
4850
	#$conf["cols"]="";#爲文字輸入框的欄位數(寬),預設爲按照瀏覽器設定值。
4851
	#$conf["rows"]="";#爲文字輸入框的列數(高),預設爲按照瀏覽器設定值。
4852
	#$conf["maxInputLength"]="";#爲文字輸入的長度限制,預設無限制。
4853
	#$conf["defaultText"]="";#爲文字輸入框裏面的預設文字內容,預設是空的。
4854
	#$conf["class"]=;#爲要套用的css樣式。如果沒有指定 ,則採用預設的css樣式,"__qbpwcf_inputTextAreaCssStyle",其屬性爲 "width:100%","height:120px","font-size:30px"
4855
	#$conf["jsActivitor"]="";#爲觸發js的條件,可以是"onChange"(已改變內容時)...,須搭配$conf["jsSubmitActionTarget"]參數。
4856
	#$conf["jsAction"]="";#爲該js是要做什麼,可以是"document.testForm.submit()"(傳送名爲testForm的表單內容)...,須搭配$conf["jsActivitor"]參數。
4857
	#$conf["formStart"]="true";#爲是否要以<form>開頭,"true"表示"是",也可以看成表單的開始,預設為"false".
4858
	#$conf["formAction"]="";#表單遞交的目的地,若$conf["formStart"]為"true",則該參數不能省略.
4859
	#$conf["formName"]="";#爲該表單的名稱
4860
	#$conf["formMethod"]="";#爲傳輸的方法,若沒設定則預設爲post,其他可用的參數爲get。
4861
	#$conf["formTarget"]="";#為顯示的方式,若沒設定則預設爲"_self",其他可用的參數爲 "_blank"、"_parent"、"_top",也可以是iframe的名稱。
4862
	#$conf["formEnd"]="true";#爲是否要以<form>結尾,"true"表示"是",也可以看成表單的結束,預設為"false".
4863
	#$conf["comment"],字串,輸入方框上面要放哪些註解文字,亦即用label來呈現,同時指定"for"屬性的數值為當前"input"標籤的id,意即參數"name"的內容.
4864
	#$conf["comment"]="";
4865
	#$conf["required"],字串,該欄位是否必填,"true"為必填,"false"為可留空,預設為"false".
4866
	#$conf["required"]="true";
4867
	#$conf["placeholder"],字串,當沒有內容時要顯示的內容.
4868
	#$conf["placeholder"]="";
4869
	#$conf["trStart"]="true";#爲是否要以<tr>開頭,"true"表示"是",也可以看作新的一列開始,預設為"false".
4870
	#$conf["tdStart"]="true";#爲是否要以<td>開頭,"true"表示"是",也可以看成列裏面的元素開始,預設為"false".
4871
	#$conf["tdEnd"]="true";#爲是否要以</td>結尾,"true"表示"是",也可以看成列裏面的元素結束,預設為"false".
4872
	#$conf["trEnd"]="true";#爲是否要以</tr>結尾,"true"表示"是",也可以看作該列結束,預設為"false".
4873
	#$conf["dataFormId"],字串,提供用於識別哪一張表單的data屬性名稱.
4874
	#$conf["dataFormId"]="";
4875
	#參考資料:
4876
	#input=>http://www.w3schools.com/tags/tag_input.asp
4877
	#備註:
4878
	#無.
4879
	*/
4880
	public static function inputTextArea(&$conf){
4881
 
4882
		#初始化要回傳的內容
4883
		$result=array();
4884
 
4885
		#設置當前執行的函數
4886
		$result["function"]=__FUNCTION__;
4887
 
4888
		#初始化content樣式內容
4889
		$result["content"]="";
4890
 
4891
		#如果 $conf 不為陣列
4892
		if(gettype($conf)!="array"){
4893
 
4894
			#設置執行失敗
4895
			$result["status"]="false";
4896
 
4897
			#設置執行錯誤訊息
4898
			$result["error"][]="\$conf變數須為陣列形態";
4899
 
4900
			#如果傳入的參數為 null
4901
			if($conf==null){
4902
 
4903
				#設置執行錯誤訊息
4904
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
4905
 
4906
				}#if end
4907
 
4908
			#回傳結果
4909
			return $result;
4910
 
4911
			}#if end
4912
 
4913
		#檢查參數
4914
		#函式說明:
4915
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
4916
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
4917
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
4918
		#$result["function"],當前執行的函式名稱.
4919
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
4920
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
4921
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
4922
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
4923
		#必填參數:
4924
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
4925
		$conf["variableCheck.checkArguments"]["varInput"]=&$conf;
4926
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
4927
		$conf["variableCheck.checkArguments"]["mustBeFilledVariableName"]=array("name","readOnly");
4928
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double");
4929
		$conf["variableCheck.checkArguments"]["mustBeFilledVariableType"]=array("string","string");
4930
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
4931
		$conf["variableCheck.checkArguments"]["referenceVarKey"]="variableCheck.checkArguments";
4932
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
4933
		$conf["variableCheck.checkArguments"]["canBeEmptyString"]="false";
4934
		#可省略參數:
4935
		#$conf["variableCheck.checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"false"。
4936
		#$conf["variableCheck.checkArguments"]["canBeEmptyString"]="true";
4937
		#$conf["variableCheck.checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
4938
		$conf["variableCheck.checkArguments"]["skipableVariableName"]=array("id","width","cols","rows","maxInputLength","defaultText","class","jsActivitor","jsAction","comment","trStart","tdStart","tdEnd","trEnd","placeholder","required","formStart","formAction","formName","formMethod","formTarget","formEnd","dataFormId");
4939
		#$conf["variableCheck.checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
4940
		$conf["variableCheck.checkArguments"]["skipableVariableType"]=array("string","string","string","string","string","string","string","string","string","string","string","string","string","string","string","string","string","string","string","string","string","string","string");
4941
		#$conf["variableCheck.checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,"null"代表不指定.
4942
		$conf["variableCheck.checkArguments"]["skipableVarDefaultValue"]=array(null,null,null,null,null,"","__qbpwcf_inputTextAreaCssStyle",null,null,null,"false","false","false","false",null,"false","false","false","false","false","false","false",null);
4943
		$checkResult=variableCheck::checkArguments($conf["variableCheck.checkArguments"]);
4944
		unset($conf["variableCheck.checkArguments"]);
4945
 
4946
		#如果檢查失敗
4947
		if($checkResult["status"]=="false"){
4948
 
4949
			#設置執行不正常
4950
			$result["status"]="false";
4951
 
4952
			#程式停止執行
4953
			$result["error"]=$checkResult;
4954
 
4955
			#回傳結果
4956
			return $result;
4957
 
4958
			}#if end
4959
 
4960
		#如果檢查不通過
4961
		if($checkResult["passed"]=="false"){
4962
 
4963
			#設置執行不正常
4964
			$result["status"]="false";
4965
 
4966
			#程式停止執行
4967
			$result["error"]=$checkResult;
4968
 
4969
			#回傳結果
4970
			return $result;
4971
 
4972
			}#if end
4973
 
4974
		#如果其值爲 true
4975
		if($conf["trStart"]=="true"){
4976
 
4977
			#串接列開始
4978
			$result["content"]=$result["content"]."<tr>";
4979
 
4980
			}#if end
4981
 
4982
		#如果其值爲 true
4983
		if($conf["tdStart"]=="true"){
4984
 
4985
			#串接欄開始
4986
			$result["content"]=$result["content"]."<td>";
4987
 
4988
			}#if end
4989
 
4990
		#如果 $conf["formStart"] 等於 "true"
4991
		if($conf["formStart"]=="true"){
4992
 
4993
			#函式說明:
4994
			#表單開始
4995
			#回傳結果:
4996
			#$result,表單開始的語法
4997
			#必填參數:
4998
			$conf["form"]["start"]["action"]=$conf["formAction"];#爲要交給那個檔案處理該表單傳送的內容
4999
			#可省略參數:
5000
 
5001
			#如果 $conf["formName"] 有設置
5002
			if(isset($conf["formName"])){
5003
 
5004
				#過濾 $conf["formName"] 避免錯誤
5005
				#函式說明:
5006
				#處理字串避免網頁出錯
5007
				#回傳結果:
5008
				#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
5009
				#$result["function"],當前執行的函數.
5010
				#$result["content"],爲處理好的字串.
5011
				#$result["error"],錯誤訊息陣列.
5012
				#必填參數:
5013
				$conf["stringProcess::correctCharacter"]["stringIn"]=$conf["formName"];#爲要處理的字串
5014
				#可省略的參數:
5015
				$conf["stringProcess::correctCharacter"]["selectedCharacter"]=array("<",">","=","//","'","$","%","&","|","/*","*\/","#","\""," ");#爲被選擇要處理的字串/字元,須爲陣列值。
5016
					#若不設定則預設爲要將這些字串作替換("<",">","=","//","'","$","%","&","|","/*","*\/","#","\"")。
5017
					#特殊字元,「\n」代表換行,「\t」代表tab鍵的間隔
5018
				#$conf["changeTo"]=array();#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
5019
				$correctCharacter=stringProcess::correctCharacter($conf["stringProcess::correctCharacter"]);
5020
				unset($conf["stringProcess::correctCharacter"]);
5021
 
5022
				#如果過濾 $conf["formName"] 失敗
5023
				if($correctCharacter["status"]=="false"){
5024
 
5025
					#設置執行失敗
5026
					$result["status"]="false";
5027
 
5028
					#設置執行錯誤訊息
5029
					$result["error"]=$correctCharacter;
5030
 
5031
					#回傳結果
5032
					return $result;
5033
 
5034
					}#if end
5035
 
5036
				#則設定其數值
5037
				$conf["form"]["start"]["name"]=$correctCharacter["content"];#爲該表單的名稱
5038
 
5039
				}#if end
5040
 
5041
			#如果 $conf["formMethod"] 有設置
5042
			if(isset($conf["formMethod"])){
5043
 
5044
				#則設定其數值
5045
				$conf["form"]["start"]["method"]=$conf["formMethod"];#爲傳輸的方法,若沒設定則預設爲post,其他可用的參數爲get。
5046
 
5047
				}#if end
5048
 
5049
			#如果 $conf["formTarget"] 有設定
5050
			if(isset($conf["formTarget"])){
5051
 
5052
				#則設定其數值
5053
				$conf["form"]["start"]["target"]=$conf["formTarget"];#為顯示的方式,若沒設定則預設爲"_self",其他可用的參數爲 "_blank"、"_parent"、"_top",也可以是iframe的名稱。
5054
 
5055
				}#if end
5056
 
5057
			#則設定其參數數值
5058
			$conf["form"]["start"]["tableStart"]="false";#爲該表單是否要以<table>開始。"true"爲是;
5059
 
5060
			#則設定其數值
5061
			#$conf["form"]["start"]["tableClass"]=$conf["tableClass"];#表格要套用的css樣式,若爲"__withoutBorder"的話則套用無框線的預設樣式;若爲"__withBorder"的話,則爲有框線的預設樣式。
5062
			$formStart=form::start($conf["form"]["start"]);
5063
			unset($conf["form"]["start"]);
5064
 
5065
			#如果表單開始失敗
5066
			if($formStart["status"]=="false"){
5067
 
5068
				#設置執行失敗
5069
				$result["status"]="false";
5070
 
5071
				#設置執行錯誤訊息
5072
				$result["error"]=$formStart;
5073
 
5074
				#回傳結果
5075
				return $result;
5076
 
5077
				}#if end
5078
 
5079
			#串接表單開始的語法
5080
			$result["content"]=$result["content"].$formStart["content"];
5081
 
5082
			}#if end
5083
 
5084
		#如果$conf["readOnly"]沒有設定
5085
		if($conf["readOnly"]=="false"){
5086
 
5087
			#$conf["readOnly"]就爲空值
5088
			$conf["readOnly"]="";
5089
 
5090
			}#if end
5091
 
5092
		#如果$conf["readOnly"]有設定
5093
		if($conf["readOnly"]=="true"){
5094
 
5095
			#就設置 readonly 屬性
5096
			$conf["readOnly"]=" readonly = readonly ";
5097
 
5098
			}#if end
5099
 
5100
		#如果$conf["cols"]沒設定
5101
		if(!isset($conf["cols"])){
5102
 
5103
			#則$conf["cols"]爲空
5104
			$conf["cols"]="";
5105
 
5106
			}#if end
5107
 
5108
		#如果$conf["cols"]有設定
5109
		else{
5110
 
5111
			#則套用設定值
5112
			$conf["cols"]=" cols=".$conf["cols"];
5113
 
5114
			}#else end
5115
 
5116
		#如果$conf["rows"]沒設定
5117
		if(!isset($conf["rows"])){
5118
 
5119
			#則$conf["rows"]爲空
5120
			$conf["rows"]="";
5121
 
5122
			}#if end
5123
 
5124
		#如果$conf["rows"]有設定
5125
		else{
5126
 
5127
			#就套用設定值
5128
			$conf["rows"]=" rows=".$conf["rows"];
5129
 
5130
			}#else end
5131
 
5132
		#如果$conf["width"]沒設定
5133
		if(!isset($conf["width"])){
5134
 
5135
			#則$conf["width"]爲空值
5136
			$conf["width"]="";
5137
 
5138
			}#if end
5139
 
5140
		#如果$conf["width"]有設定
5141
		else{
5142
 
5143
			#則套用寬度的css設定值
5144
			$conf["width"]=" style=\"width:100%;\" ";
5145
 
5146
			}#else end
5147
 
5148
		#如果$conf["maxInputLength"]沒設定
5149
		if(!isset($conf["maxInputLength"])){
5150
 
5151
			#則$conf["maxInputLength"]爲空
5152
			$conf["maxInputLength"]="";
5153
 
5154
			}#if end
5155
 
5156
		#如果$conf["maxInputLength"]有設定
5157
		else{
5158
 
5159
			$conf["maxInputLength"]=" maxlength=".$conf["maxInputLength"];
5160
 
5161
			}#else end
5162
 
5163
		#初始化僅儲存css類別名稱的變數
5164
		$className=$conf["class"];
5165
 
5166
		#採用自定的css樣式
5167
		$conf["class"] = " class=".$conf["class"];
5168
 
5169
		#如果 $conf["jsActivitor"] 與 $conf["jsAction"] 皆有設定
5170
		if( isset($conf["jsActivitor"]) && isset($conf["jsAction"]) ){
5171
 
5172
			#則將設定值組合
5173
			$conf["jsCustom"]=" ".$conf["jsActivitor"]."=".$conf["jsAction"]." ";
5174
 
5175
			}#if end
5176
 
5177
		#如果 $conf["jsCustom"] 沒有設定
5178
		if(!isset($conf["jsCustom"])){
5179
 
5180
			#將其設爲空值
5181
			$conf["jsCustom"]="";
5182
 
5183
			}#if end
5184
 
5185
		#如果有設置 $conf["comment"]
5186
		if(isset($conf["comment"])){
5187
 
5188
			#函式說明:
5189
			#<div>標籤的開始到結束的區段
5190
			#回傳結果:
5191
			#$result["status"],字串,執行否正常,"true"代表正常,"false"代表不正常.
5192
			#$result["functin"],字串,當前函數的名稱.
5193
			#$result["error"],陣列,錯訊訊息.
5194
			#$result["content"],字串,<div>標籤的開始與設定語法.
5195
			#必填參數:
5196
			#$conf["contentArray"],字串陣列,要放入的內容陣列.
5197
			$conf["css.divSection"]["contentArray"]=array($conf["comment"]);
5198
			#可省略參數
5199
			#$conf["class"],字串,div區段要套用的css樣式.
5200
			$conf["css.divSection"]["class"]=$className;
5201
			$spanSection=css::spanSection($conf["css.divSection"]);
5202
			unset($conf["css.divSection"]);
5203
 
5204
			#如果 spanSection 建立失敗
5205
			if($spanSection["status"]=="false"){
5206
 
5207
				#設置執行失敗
5208
				$result["status"]="false";
5209
 
5210
				#設置執行錯誤訊息
5211
				$result["error"]=$spanSection;
5212
 
5213
				#回傳結果
5214
				return $result;
5215
 
5216
				}#if end
5217
 
5218
			#新增label,且套用css樣式.
5219
			$result["content"]=$result["content"]."<label for=\"".$conf["name"]."\" class=\"".$className."\" >".$conf["comment"]."</label>";
5220
 
5221
			}#if end
5222
 
5223
		#如果有設定 $conf["placeholder"]
5224
		if(isset($conf["placeholder"])){
5225
 
5226
			#設定 "placeholder" 屬性
5227
			$conf["placeholder"]=" placeholder=".$conf["placeholder"]." ";
5228
 
5229
			}#if end
5230
 
5231
		#反之
5232
		else{
5233
 
5234
			#設為 ""
5235
			$conf["placeholder"]="";
5236
 
5237
			}#else end
5238
 
5239
		#過濾 $conf["name"] 避免錯誤
5240
		#函式說明:
5241
		#處理字串避免網頁出錯
5242
		#回傳結果:
5243
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
5244
		#$result["function"],當前執行的函數.
5245
		#$result["content"],爲處理好的字串.
5246
		#$result["error"],錯誤訊息陣列.
5247
		#必填參數:
5248
		$conf["stringProcess::correctCharacter"]["stringIn"]=$conf["name"];#爲要處理的字串
5249
		#可省略的參數:
5250
		$conf["stringProcess::correctCharacter"]["selectedCharacter"]=array("<",">","=","//","'","$","%","&","|","/*","*\/","#","\""," ");#爲被選擇要處理的字串/字元,須爲陣列值。
5251
			#若不設定則預設爲要將這些字串作替換("<",">","=","//","'","$","%","&","|","/*","*\/","#","\"")。
5252
			#特殊字元,「\n」代表換行,「\t」代表tab鍵的間隔
5253
		#$conf["stringProcess::correctCharacter"]["changeTo"]=array("","","","","","","","","","","","","");#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
5254
		$correctCharacter=stringProcess::correctCharacter($conf["stringProcess::correctCharacter"]);
5255
		unset($conf["stringProcess::correctCharacter"]);
5256
 
5257
		#如果過濾字串失敗
5258
		if($correctCharacter["status"]=="false"){
5259
 
5260
			#設置執行失敗
5261
			$result["status"]="false";
5262
 
5263
			#設置執行錯誤訊息
5264
			$result["error"]=$correctCharacter;
5265
 
5266
			#回傳結果
5267
			return $result;
5268
 
5269
			}#if end
5270
 
5271
		#置換過濾好了的$conf["name"]
5272
		$conf["name"]=$correctCharacter["content"];
5273
 
5274
		#如果 $conf["required"] 為 "true"
5275
		if($conf["required"]=="true"){
5276
 
5277
			#設置 "required" 屬性
5278
			$conf["required"]=" required=true ";
5279
 
5280
			}#if end
5281
 
5282
		#反之
5283
		else{
5284
 
5285
			#設置為空值
5286
			$conf["required"]="";
5287
 
5288
			}#else end
5289
 
5290
		#如果有設置 $conf["id"]
5291
		if(isset($conf["id"])){
5292
 
5293
			#產生id字串
5294
			$conf["id"]="id=\"".$conf["id"]."\"";
5295
 
5296
			}#if end
5297
 
5298
		#反之
5299
		else{
5300
 
5301
			#設為空字串
5302
			$conf["id"]="";
5303
 
5304
			}#else end
5305
 
5306
		#如果有設置 $conf["dataFormId"]
5307
		if(isset($conf["dataFormId"])){
5308
 
5309
			#設置 data-id 屬性
5310
			$conf["dataFormId"]="data-form-id=\"".$conf["dataFormId"]."\"";
5311
 
5312
			}#if end
5313
 
5314
		#反之設置為空數值	
5315
		else{
5316
 
5317
			$conf["dataFormId"]="";
5318
 
5319
			}#else end
5320
 
5321
		#放置可以文字的區塊
5322
		$result["content"]=$result["content"]."<textarea ".$conf["width"]." ".$conf["cols"]." ".$conf["rows"]." ".$conf["maxInputLength"]." name=".$conf["name"]." ".$conf["readOnly"]." ".$conf["class"]." ".$conf["jsCustom"]." ".$conf["placeholder"]." ".$conf["required"]."  ".$conf["id"]." ".$conf["dataFormId"]." >".$conf["defaultText"]."</textarea>";
5323
 
5324
		#如果 $conf["formEnd"] 等於 "true"
5325
		if($conf["formEnd"]=="true"){
5326
 
5327
			#函式說明:
5328
			#表單結束
5329
			#回傳結果:
5330
			#$result,表單結束的語法
5331
			#必填參數:
5332
			#則設定其數值
5333
			$conf["form"]["end"]["tableEnd"]="false";#爲該表單是否要以</table>結尾。"true"爲是;"false"爲否。
5334
			$formEnd=form::end($conf["form"]["end"]);
5335
			unset($conf["form"]["end"]);
5336
 
5337
			#串接表單結束的語法
5338
			$result["content"]=$result["content"].$formEnd["content"];
5339
 
5340
			}#if end
5341
 
5342
		#如果其值爲 true
5343
		if($conf["tdEnd"]=="true"){
5344
 
5345
			#串接欄結束
5346
			$result["content"]=$result["content"]."</td>";
5347
 
5348
			}#if end
5349
 
5350
		#如果其值爲 true
5351
		if($conf["trEnd"]=="true"){
5352
 
5353
			#串接列結束
5354
			$result["content"]=$result["content"]."</tr>";
5355
 
5356
			}#if end
5357
 
5358
		#設置執行正常
5359
		$result["status"]="true";
5360
 
5361
		#印出表格的設定以及表單的目的、呈現的方式、傳送的方式。
5362
		return $result;
5363
 
5364
		}#function inputTextArea end
5365
 
5366
	/*
5367
	#函式說明:
5368
	#可以輸入密碼的表單
5369
	#回傳結果:
5370
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
5371
	#$result["function"],當前執行的函數.
5372
	#$result["error"],錯誤訊息陣列.
5373
	#$result["content"],按鈕語法.
5374
	#必填參數:
5375
	$conf["name"]="";#爲密碼輸入框的名稱,供接收端進行處理時的獨立名稱,也提供id.
5376
	#可省略參數:
5377
	#$conf["width"]="";#爲密碼輸入框的長度,預設無限制。
5378
	#$conf["maxInputLength"]="";#爲密碼輸入的長度限制,預設無限制。
5379
	#$conf["defaultValue"]="";#預設的密碼,不得為空
5380
	#$conf["class"]="";#爲要套用的css樣式,若省略,則會套用預設的 __qbpwcf_inputPasswordCssStyle 樣式,其屬性爲 "width:100%","font-size:30px","margin-left:auto;","margin-right:auto;"
5381
	#$conf["jsActivitor"]="";#爲觸發js的條件,可以是"onChange"(已改變內容時)...,須搭配$conf["jsSubmitActionTarget"]參數。
5382
	#$conf["jsAction"]="";#爲該js是要做什麼,可以是"document.testForm.submit()"(傳送名爲testForm的表單內容)...,須搭配$conf["jsActivitor"]參數。
5383
	#$conf["autoFocus"],字串,是否為將填寫的指標移到該表單,"true"代表要,預設為"false".
5384
	#$conf["autoFocus"]="true";
5385
	#$conf["autocomplete"],字串,是否依據使用者過往輸入的記錄來提示可能要的輸入內容,"on"為啟用,"off"為停用,預設為"on".
5386
	#$conf["autocomplete"]="off";
5387
	#$conf["required"],字串,該欄位是否必填,"true"為必填,"false"為可留空,預設為"false".
5388
	#$conf["required"]="true";
5389
	#$conf["comment"],字串,輸入方框上面要放哪些註解文字,亦即用label來呈現,同時指定"for"屬性的數值為當前"input"標籤的id,意即參數"name"的內容.
5390
	#$conf["comment"]="";
5391
	#$conf["placeholder"],字串,當沒有內容時要顯示的內容.
5392
	#$conf["placeholder"]="";
5393
	#$conf["trStart"]="true";#爲是否要以<tr>開頭,"true"表示"是",也可以看作新的一列開始,預設為"false".
5394
	#$conf["tdStart"]="true";#爲是否要以<td>開頭,"true"表示"是",也可以看成列裏面的元素開始,預設為"false".
5395
	#$conf["tdEnd"]="true";#爲是否要以</td>結尾,"true"表示"是",也可以看成列裏面的元素結束,預設為"false".
5396
	#$conf["trEnd"]="true";#爲是否要以</tr>結尾,"true"表示"是",也可以看作該列結束,預設為"false".
5397
	#$conf["formStart"]="true";#爲是否要以<form>開頭,"true"表示"是",也可以看成表單的開始,預設為"false".
5398
	#$conf["formAction"]="";#表單遞交的目的地,若$conf["formStart"]為"true",則該參數不能省略.
5399
	#$conf["formName"]="";#爲該表單的名稱
5400
	#$conf["formMethod"]="";#爲傳輸的方法,若沒設定則預設爲post,其他可用的參數爲get。
5401
	#$conf["formTarget"]="";#為顯示的方式,若沒設定則預設爲"_self",其他可用的參數爲 "_blank"、"_parent"、"_top",也可以是iframe的名稱。
5402
	#$conf["formEnd"]="true";#爲是否要以<form>結尾,"true"表示"是",也可以看成表單的結束,預設為"false".
5403
	#$conf["dataFormId"],字串,提供用於識別哪一張表單的data屬性名稱.
5404
	#$conf["dataFormId"]="";
5405
	#參考資料:
5406
	#無.
5407
	#備註:
5408
	#無.
5409
	*/
5410
	public static function inputPassword($conf){
5411
 
5412
		#初始化要回傳的內容
5413
		$result=array();
5414
 
5415
		#設置當前執行的函數
5416
		$result["function"]=__FUNCTION__;
5417
 
5418
		#初始化content樣式內容
5419
		$result["content"]="";
5420
 
5421
		#如果 $conf 不為陣列
5422
		if(gettype($conf)!="array"){
5423
 
5424
			#設置執行失敗
5425
			$result["status"]="false";
5426
 
5427
			#設置執行錯誤訊息
5428
			$result["error"][]="\$conf變數須為陣列形態";
5429
 
5430
			#如果傳入的參數為 null
5431
			if($conf==null){
5432
 
5433
				#設置執行錯誤訊息
5434
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
5435
 
5436
				}#if end
5437
 
5438
			#回傳結果
5439
			return $result;
5440
 
5441
			}#if end
5442
 
5443
		#檢查參數
5444
		#函式說明:
5445
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
5446
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
5447
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
5448
		#$result["function"],當前執行的函式名稱.
5449
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
5450
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
5451
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
5452
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
5453
		#必填參數:
5454
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
5455
		$conf["variableCheck.checkArguments"]["varInput"]=&$conf;
5456
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
5457
		$conf["variableCheck.checkArguments"]["mustBeFilledVariableName"]=array("name");
5458
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double");
5459
		$conf["variableCheck.checkArguments"]["mustBeFilledVariableType"]=array("string");
5460
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
5461
		$conf["variableCheck.checkArguments"]["referenceVarKey"]="variableCheck.checkArguments";
5462
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
5463
		$conf["variableCheck.checkArguments"]["canBeEmptyString"]="false";
5464
		#可省略參數:
5465
		#$conf["variableCheck.checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"false"。
5466
		#$conf["variableCheck.checkArguments"]["canBeEmptyString"]="true";
5467
		#$conf["variableCheck.checkArguments"]["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或集合.
5468
		$conf["variableCheck.checkArguments"]["skipableVariableCanNotBeEmpty"]=array("defaultValue");
5469
		#$conf["variableCheck.checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
5470
		$conf["variableCheck.checkArguments"]["skipableVariableName"]=array("autoFocus","autocomplete","required","width","maxInputLength","defaultValue","class","jsActivitor","jsAction","trStart","tdStart","tdEnd","trEnd","comment","placeholder","formStart","formAction","formName","formMethod","formTarget","formEnd","dataFormId");
5471
		#$conf["variableCheck.checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
5472
		$conf["variableCheck.checkArguments"]["skipableVariableType"]=array("string","string","string","string","string","string","string","string","string","string","string","string","string","string","string","string","string","string","string","string","string","string");
5473
		#$conf["variableCheck.checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,"null"代表不指定.
5474
		$conf["variableCheck.checkArguments"]["skipableVarDefaultValue"]=array("false","on","false",null,null,null,"__qbpwcf_inputPasswordCssStyle",null,null,"false","false","false","false",null,null,"false",null,null,"post","_self","false",null);
5475
		$checkResult=variableCheck::checkArguments($conf["variableCheck.checkArguments"]);
5476
		unset($conf["variableCheck.checkArguments"]);
5477
 
5478
		#如果檢查失敗
5479
		if($checkResult["status"]=="false"){
5480
 
5481
			#設置執行不正常
5482
			$result["status"]="false";
5483
 
5484
			#程式停止執行
5485
			$result["error"]=$checkResult;
5486
 
5487
			#回傳結果
5488
			return $result;
5489
 
5490
			}#if end
5491
 
5492
		#如果檢查不通過
5493
		if($checkResult["passed"]=="false"){
5494
 
5495
			#設置執行不正常
5496
			$result["status"]="false";
5497
 
5498
			#程式停止執行
5499
			$result["error"]=$checkResult;
5500
 
5501
			#回傳結果
5502
			return $result;
5503
 
5504
			}#if end
5505
 
5506
		#如果其值爲 true
5507
		if($conf["trStart"]=="true"){
5508
 
5509
			#串接列開始
5510
			$result["content"]=$result["content"]."<tr>";
5511
 
5512
			}#if end
5513
 
5514
		#如果其值爲 true
5515
		if($conf["tdStart"]=="true"){
5516
 
5517
			#串接欄開始
5518
			$result["content"]=$result["content"]."<td>";
5519
 
5520
			}#if end
5521
 
5522
		#如果 $conf["formStart"] 有設置
5523
		if(isset($conf["formStart"])){
5524
 
5525
			#如果 $conf["formStart"] 等於 "true"
5526
			if($conf["formStart"]=="true"){
5527
 
5528
				#函式說明:
5529
				#表單開始
5530
				#回傳結果:
5531
				#$result,表單開始的語法
5532
				#必填參數:
5533
				$conf["form"]["start"]["action"]=$conf["formAction"];#爲要交給那個檔案處理該表單傳送的內容
5534
				#可省略參數:
5535
 
5536
				#如果 $conf["formName"] 有設置
5537
				if(isset($conf["formName"])){
5538
 
5539
					#過濾 $conf["formName"] 避免錯誤
5540
					#函式說明:
5541
					#處理字串避免網頁出錯
5542
					#回傳結果:
5543
					#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
5544
					#$result["function"],當前執行的函數.
5545
					#$result["content"],爲處理好的字串.
5546
					#$result["error"],錯誤訊息陣列.
5547
					#必填參數:
5548
					$conf["stringProcess::correctCharacter"]["stringIn"]=$conf["formName"];#爲要處理的字串
5549
					#可省略的參數:
5550
					$conf["stringProcess::correctCharacter"]["selectedCharacter"]=array("<",">","=","//","'","$","%","&","|","/*","*\/","#","\""," ");#爲被選擇要處理的字串/字元,須爲陣列值。
5551
						#若不設定則預設爲要將這些字串作替換("<",">","=","//","'","$","%","&","|","/*","*\/","#","\"")。
5552
						#特殊字元,「\n」代表換行,「\t」代表tab鍵的間隔
5553
					#$conf["changeTo"]=array();#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
5554
					$correctCharacter=stringProcess::correctCharacter($conf["stringProcess::correctCharacter"]);
5555
					unset($conf["stringProcess::correctCharacter"]);
5556
 
5557
					#如果過濾 $conf["formName"] 失敗
5558
					if($correctCharacter["status"]=="false"){
5559
 
5560
						#設置執行失敗
5561
						$result["status"]="false";
5562
 
5563
						#設置執行錯誤訊息
5564
						$result["error"]=$correctCharacter;
5565
 
5566
						#回傳結果
5567
						return $result;
5568
 
5569
						}#if end
5570
 
5571
					#則設定其數值
5572
					$conf["form"]["start"]["name"]=$correctCharacter["content"];#爲該表單的名稱
5573
 
5574
					}#if end
5575
 
5576
				#如果 $conf["formMethod"] 有設置
5577
				if(isset($conf["formMethod"])){
5578
 
5579
					#則設定其數值
5580
					$conf["form"]["start"]["method"]=$conf["formMethod"];#爲傳輸的方法,若沒設定則預設爲post,其他可用的參數爲get。
5581
 
5582
					}#if end
5583
 
5584
				#如果 $conf["formTarget"] 有設定
5585
				if(isset($conf["formTarget"])){
5586
 
5587
					#則設定其數值
5588
					$conf["form"]["start"]["target"]=$conf["formTarget"];#為顯示的方式,若沒設定則預設爲"_self",其他可用的參數爲 "_blank"、"_parent"、"_top",也可以是iframe的名稱。
5589
 
5590
					}#if end
5591
 
5592
				#則設定其參數數值
5593
				$conf["form"]["start"]["tableStart"]="false";#爲該表單是否要以<table>開始。"true"爲是;
5594
 
5595
				#則設定其數值
5596
				#$conf["form"]["start"]["tableClass"]=$conf["tableClass"];#表格要套用的css樣式,若爲"__withoutBorder"的話則套用無框線的預設樣式;若爲"__withBorder"的話,則爲有框線的預設樣式。
5597
				$formStart=form::start($conf["form"]["start"]);
5598
				unset($conf["form"]["start"]);
5599
 
5600
				#如果表單開始失敗
5601
				if($formStart["status"]=="false"){
5602
 
5603
					#設置執行失敗
5604
					$result["status"]="false";
5605
 
5606
					#設置執行錯誤訊息
5607
					$result["error"]=$formStart;
5608
 
5609
					#回傳結果
5610
					return $result;
5611
 
5612
					}#if end
5613
 
5614
				#串接表單開始的語法
5615
				$result["content"]=$result["content"].$formStart["content"];
5616
 
5617
				}#if end
5618
 
5619
			}#if end
5620
 
5621
		#如果 $conf["comment"] 有設置
5622
		if(isset($conf["comment"])){
5623
 
5624
			#新增註解,且套用css樣式.結尾換行.ok
5625
			$result["content"]=$result["content"]."<label name=\"".$conf["name"]."\" class=\"".$conf["class"]."\">".$conf["comment"]."</label>";
5626
 
5627
			}#if end
5628
 
5629
		#如果$conf["maxInputLength"]沒設定
5630
		if(!isset($conf["maxInputLength"])){
5631
 
5632
			#$conf["maxInputLength"]就爲空
5633
			$conf["maxInputLength"]="";
5634
 
5635
			}#if end
5636
 
5637
		#如果$conf["maxInputLength"]有設定
5638
		else{
5639
 
5640
			#就按照設定值
5641
			$conf["maxInputLength"]=" maxlength=".$conf["maxInputLength"];
5642
 
5643
			}#else end
5644
 
5645
		#如果$conf["width"]沒設定
5646
		if(!isset($conf["width"])){
5647
 
5648
			#則$conf["width"]爲空值
5649
			$conf["width"]="";
5650
 
5651
			}#if end
5652
 
5653
		#如果$conf["width"]有設定
5654
		else{
5655
 
5656
			#則套用寬度的css設定值
5657
			$conf["width"]=" style=\"width:100%;\" ";
5658
 
5659
			}#else end
5660
 
5661
		#如果$conf["defaultValue"]沒設定
5662
		if(!isset($conf["defaultValue"])){
5663
 
5664
			#則$conf["defaultValue"]爲空
5665
			$conf["defaultValue"]="";
5666
 
5667
			}#else end
5668
 
5669
		#反之則設定該屬性
5670
		else{
5671
 
5672
			$conf["defaultValue"]=" value = ".$conf["defaultValue"];
5673
 
5674
			}#else end
5675
 
5676
		#如果$conf["class"]沒設定
5677
		if(!isset($conf["class"])){
5678
 
5679
			#則套用預設的css樣式
5680
			$conf["class"]=" class = __inputPasswordCssStyle ";
5681
 
5682
			}#if end
5683
 
5684
		#如果$conf["class"]有設定
5685
		else{
5686
 
5687
			#則套用樣式
5688
			$conf["class"]=" class = \"".$conf["class"]."\"";
5689
 
5690
			}#else end
5691
 
5692
		#如果 $conf["jsActivitor"] 與 $conf["jsAction"] 皆有設定
5693
		if( isset($conf["jsActivitor"]) && isset($conf["jsAction"]) ){
5694
 
5695
			#則將設定值組合
5696
			$conf["jsCustom"]=" ".$conf["jsActivitor"]."=".$conf["jsAction"]." ";
5697
 
5698
			}#if end
5699
 
5700
		#如果 $conf["jsCustom"] 沒有設定
5701
		if(!isset($conf["jsCustom"])){
5702
 
5703
			#將其設爲空值
5704
			$conf["jsCustom"]="";
5705
 
5706
			}#if end
5707
 
5708
		#如果 $conf["placeholder"] 有設定
5709
		if(isset($conf["placeholder"])){
5710
 
5711
			#設定 "placeholder" 屬性
5712
			$conf["placeholder"]=" placeholder=".$conf["placeholder"]." ";
5713
 
5714
			}#if end
5715
 
5716
		#反之設為 ""
5717
		else{
5718
 
5719
			$conf["placeholder"]="";
5720
 
5721
			}#else end
5722
 
5723
		#如果 $conf["required"] 為"true"
5724
		if($conf["required"]=="true"){
5725
 
5726
			#設置 "required" 屬性
5727
			$conf["required"]="required=true";
5728
 
5729
			}#if end
5730
 
5731
		#反之
5732
		else{
5733
 
5734
			#設為空值
5735
			$conf["required"]="";
5736
 
5737
			}#else end
5738
 
5739
		#過濾 $conf["name"] 避免錯誤
5740
		#函式說明:
5741
		#處理字串避免網頁出錯
5742
		#回傳結果:
5743
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
5744
		#$result["function"],當前執行的函數.
5745
		#$result["content"],爲處理好的字串.
5746
		#$result["error"],錯誤訊息陣列.
5747
		#必填參數:
5748
		$conf["stringProcess::correctCharacter"]["stringIn"]=$conf["name"];#爲要處理的字串
5749
		#可省略的參數:
5750
		$conf["stringProcess::correctCharacter"]["selectedCharacter"]=array("<",">","=","//","'","$","%","&","|","/*","*\/","#","\""," ");#爲被選擇要處理的字串/字元,須爲陣列值。
5751
			#若不設定則預設爲要將這些字串作替換("<",">","=","//","'","$","%","&","|","/*","*\/","#","\"")。
5752
			#特殊字元,「\n」代表換行,「\t」代表tab鍵的間隔
5753
		#$conf["stringProcess::correctCharacter"]["changeTo"]=array("","","","","","","","","","","","","");#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
5754
		$correctCharacter=stringProcess::correctCharacter($conf["stringProcess::correctCharacter"]);
5755
		unset($conf["stringProcess::correctCharacter"]);
5756
 
5757
		#如果過濾字串失敗
5758
		if($correctCharacter["status"]=="false"){
5759
 
5760
			#設置執行失敗
5761
			$result["status"]="false";
5762
 
5763
			#設置執行錯誤訊息
5764
			$result["error"]=$correctCharacter;
5765
 
5766
			#回傳結果
5767
			return $result;
5768
 
5769
			}#if end
5770
 
5771
		#置換過濾好了的$conf["name"]
5772
		$conf["name"]=$correctCharacter["content"];
5773
 
5774
		#如果 $conf["autoFocus"] 為 "true"
5775
		if($conf["autoFocus"]=="true"){
5776
 
5777
			#設置自動選取
5778
			$conf["autoFocus"]=" autofocus='ture' ";
5779
 
5780
			}#if end
5781
 
5782
		#反之
5783
		else{
5784
 
5785
			#設為 ""
5786
			$conf["autoFocus"]="";
5787
 
5788
			}#else end
5789
 
5790
		#如果有設置 $conf["dataFormId"]
5791
		if(isset($conf["dataFormId"])){
5792
 
5793
			#設置 data-id 屬性
5794
			$conf["dataFormId"]="data-form-id=\"".$conf["dataFormId"]."\"";
5795
 
5796
			}#if end
5797
 
5798
		#反之設置為空數值	
5799
		else{
5800
 
5801
			$conf["dataFormId"]="";
5802
 
5803
			}#else end
5804
 
5805
		#放置可以輸入密碼的表單
5806
		$result["content"]=$result["content"]."<input type = password ".$conf["autoFocus"]." ".$conf["width"]." ".$conf["maxInputLength"]." name = ".$conf["name"]." id = ".$conf["name"]." ".$conf["defaultValue"]." ".$conf["class"]." ".$conf["jsCustom"]." ".$conf["placeholder"]." ".$conf["required"]." autocomplete=".$conf["autocomplete"]." ".$conf["dataFormId"].">";
5807
 
5808
		#如果 $conf["formEnd"] 等於 "true"
5809
		if($conf["formEnd"]=="true"){
5810
 
5811
			#函式說明:
5812
			#表單結束
5813
			#回傳結果:
5814
			#$result,表單結束的語法
5815
			#必填參數:
5816
			#則設定其數值
5817
			$conf["form"]["end"]["tableEnd"]="false";#爲該表單是否要以</table>結尾。"true"爲是;"false"爲否。
5818
			$formEnd=form::end($conf["form"]["end"]);
5819
			unset($conf["form"]["end"]);
5820
 
5821
			#串接表單結束的語法
5822
			$result["content"]=$result["content"].$formEnd["content"];
5823
 
5824
			}#if end
5825
 
5826
		#如果其值爲 true
5827
		if($conf["tdEnd"]=="true"){
5828
 
5829
			#串接欄結束
5830
			$result["content"]=$result["content"]."</td>";
5831
 
5832
			}#if end
5833
 
5834
		#如果其值爲 true
5835
		if($conf["trEnd"]=="true"){
5836
 
5837
			#串接列結束
5838
			$result["content"]=$result["content"]."</tr>";
5839
 
5840
			}#if end
5841
 
5842
		#設置執行成功
5843
		$result["status"]="true";
5844
 
5845
		#回傳語法
5846
		return $result;
5847
 
5848
		}#function inputPassword end
5849
 
5850
	/*
5851
	#函式說明:
5852
	#建立下拉式表單
5853
	#回傳結果:
5854
	#$result["status"],執行是否正常,"true"代表正常,"false"代表失敗.
5855
	#$result["error"],錯誤訊息陣列.
5856
	#$result["content"],語法內容.
5857
	#$result["function"],設置當前執行的函式
5858
	#必填參數:
5859
	#$conf["name"],字串,爲該下拉式選單的名稱
5860
	$conf["name"]="";
5861
	#$conf["sendValue"],陣列值,爲每個選項的實際傳送的數值,e.g. $sendValue = array("a","b","c","d","e");
5862
	$conf["sendValue"]=array();
5863
	#可省略參數:
5864
	#$conf["formName"]="";#該表單的名稱
5865
	#$conf["outputValue"]=array();#爲陣列值,爲每個選項的實際顯示的數值, e.g. $outputValue = array("p","o","i","t","e");,如果沒有設定,則其值同$conf["sendValue"]。
5866
	#$conf["viewCount"]="";#為一次要顯示幾個選項,預設爲顯示一個。
5867
	#$conf["defaultValue"]="";#為預設選取那個選項,須爲$conf["sendValue"]其中的一個值。
5868
	#$conf["class"]="";#爲要套用的class樣式,預設為 "__qbpwcf_inputSelect".
5869
	#$conf["readOnly"],字串,內容是否唯獨,預設為"false",不唯獨,"true"為唯獨.
5870
	#$conf["readOnly"]="true";
5871
	#$conf["comment"],字串,輸入方框上面要放哪些註解文字,亦即用label來呈現,同時指定"for"屬性的數值為當前"input"標籤的id,意即參數"name"的內容.
5872
	#$conf["comment"]="";
5873
	#$conf["formAction"]="";#爲該下拉式表單要傳送到的位置
5874
	#$conf["actionTarget"]="_self";#要如何接收網頁的迴應,預設爲_self
5875
	#$conf["jsActivitor"]="";#爲觸發js的條件,可以是"onChange"(已改變內容時)...,須搭配$conf["jsAction"]參數。
5876
	#$conf["jsAction"]="";#爲該js是要做什麼,可以是"document.forms.formName.submit()"(傳送名爲testForm的表單內容)...,須搭配$conf["jsActivitor"]參數。
5877
	#$conf["independentForm"]="false";#是否該下拉式選單就是一個完整的表單,"true"代表是,"false"代表不是,預設為"true"
5878
	#$conf["hiddenVar"],字串陣列,隱藏的變數名稱陣列.
5879
	#$conf["hiddenVar"]=array("");
5880
	#$conf["hiddanVarValue"],字串陣列,隱藏變數的數值內容.
5881
	#$conf["hiddenVarValue"]=array("");
5882
	#$conf["fixedPosition"],字串,該下拉式選單是否要隨着滾軸滾動時固定在畫面上特定的位置,於設為"false",代表不固定,"true"代表要固定.
5883
	#$conf["fixedPosition"]="true";
5884
	#$conf["fixedPosition.fixedTop"],字串,該選單距離畫面頂部的固定距離,預設為0px.
5885
	#$conf["fixedPosition.fixedTop"]="0px";
5886
	#$conf["fixedPosition.fixedLeft"],字串,該選單距離畫面左方的固定距離.預設為0px.
5887
	#$conf["fixedPosition.fixedLeft"]="0px";
5888
	#$conf["fixedPosition.emptySpaceSize"],字串,表單位置要放置多寬的空白,於設為40px.
5889
	#$conf["fixedPosition.emptySpaceSize"]="40px";
5890
	#$conf["tableStartClass"]="__withoutBorder";#表格要採用的css樣式,預設為__withoutBorder,__withoutBorder為沒有框線的樣式,__withBorder為有樣式的表格.
5891
	#$conf["tableStart"]="true";#爲是否要以<table>結尾,"true"表示"是"。也可以看作表格結束。
5892
	#$conf["trStart"]="true";#爲是否要以<tr>開頭,"true"表示"是"。也可以看作新的一列開始。
5893
	#$conf["tdStart"]="true";#爲是否要以<td>開頭,"true"表示"是"。也可以看成列裏面的元素開始
5894
	#$conf["tdEnd"]="true";#爲是否要以</td>結尾,"true"表示"是"。也可以看成列裏面的元素結束
5895
	#$conf["trEnd"]="true";#爲是否要以</tr>結尾,"true"表示"是"。也可以看作該列結束。
5896
	#$conf["tableEnd"]="true";#爲是否要以</table>結尾,"true"表示"是"。也可以看作表格結束。
5897
	#$conf["dataFormId"],字串,提供用於識別哪一張表單的data屬性名稱.
5898
	#$conf["dataFormId"]="";
5899
	#參考資料:
5900
	#無.
5901
	#備註:
5902
	#$_SERVER["PHP_SELF"]為php檔案自己
5903
	#http://stackoverflow.com/questions/833032/submit-is-not-a-function-in-javascript => form的id重複會導致"document.testForm.submit()"的javaScript語法出錯。
5904
	#http://stackoverflow.com/questions/14622124/all-of-commands-for-submit-in-onchange-select-not-work => documents.forms.formName.submit() 才會將正確的表單送出。
5905
	#http://stackoverflow.com/questions/368813/html-form-readonly-select-tag-input => 禁止改變選項,且也不會傳送該名稱表單
5906
	#tableStart & tableEnd 要補上
5907
	*/
5908
	public static function inputSelect(&$conf){
5909
 
5910
		#預設要回傳的數值
5911
		$result=array();
5912
 
5913
		#初始化要回傳的語法
5914
		$result["content"]="";
5915
 
5916
		#設置當前執行的函式
5917
		$result["function"]=__FUNCTION__;
5918
 
5919
		#如果 $conf 不為陣列
5920
		if(gettype($conf)!="array"){
5921
 
5922
			#設置執行失敗
5923
			$result["status"]="false";
5924
 
5925
			#設置執行錯誤訊息
5926
			$result["error"][]="\$conf變數須為陣列形態";
5927
 
5928
			#如果傳入的參數為 null
5929
			if($conf==null){
5930
 
5931
				#設置執行錯誤訊息
5932
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
5933
 
5934
				}#if end
5935
 
5936
			#回傳結果
5937
			return $result;
5938
 
5939
			}#if end
5940
 
5941
		#檢查參數
5942
		#函式說明:
5943
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
5944
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
5945
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
5946
		#$result["function"],當前執行的函式名稱.
5947
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
5948
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
5949
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
5950
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
5951
		#必填參數:
5952
		#$conf["form.checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
5953
		$conf["form.checkArguments"]["varInput"]=&$conf;
5954
		#$conf["form.checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
5955
		$conf["form.checkArguments"]["mustBeFilledVariableName"][]="name";
5956
		$conf["form.checkArguments"]["mustBeFilledVariableName"][]="sendValue";
5957
		#$conf["form.checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double");
5958
		$conf["form.checkArguments"]["mustBeFilledVariableType"][]="string";
5959
		$conf["form.checkArguments"]["mustBeFilledVariableType"][]="array";
5960
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
5961
		$conf["form.checkArguments"]["referenceVarKey"]="form.checkArguments";
5962
		#可省略參數:
5963
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"false"。
5964
		#$conf["canBeEmptyString"]="false";
5965
		#$conf["form.checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
5966
		$conf["form.checkArguments"]["skipableVariableName"][]="tableStart";
5967
		$conf["form.checkArguments"]["skipableVariableName"][]="formAction";
5968
		$conf["form.checkArguments"]["skipableVariableName"][]="formName";
5969
		$conf["form.checkArguments"]["skipableVariableName"][]="hiddenVar";
5970
		$conf["form.checkArguments"]["skipableVariableName"][]="hiddenVarValue";
5971
		$conf["form.checkArguments"]["skipableVariableName"][]="fixedPosition";
5972
		$conf["form.checkArguments"]["skipableVariableName"][]="fixedPosition.top";
5973
		$conf["form.checkArguments"]["skipableVariableName"][]="fixedPosition.left";
5974
		$conf["form.checkArguments"]["skipableVariableName"][]="trStart";
5975
		$conf["form.checkArguments"]["skipableVariableName"][]="tdStart";
5976
		$conf["form.checkArguments"]["skipableVariableName"][]="defaultValue";
5977
		$conf["form.checkArguments"]["skipableVariableName"][]="viewCount";
5978
		$conf["form.checkArguments"]["skipableVariableName"][]="outputValue";
5979
		$conf["form.checkArguments"]["skipableVariableName"][]="jsActivitor";
5980
		$conf["form.checkArguments"]["skipableVariableName"][]="jsAction";
5981
		$conf["form.checkArguments"]["skipableVariableName"][]="jsCustom";
5982
		$conf["form.checkArguments"]["skipableVariableName"][]="readOnly";
5983
		$conf["form.checkArguments"]["skipableVariableName"][]="comment";
5984
		$conf["form.checkArguments"]["skipableVariableName"][]="class";
5985
		$conf["form.checkArguments"]["skipableVariableName"][]="tdEnd";
5986
		$conf["form.checkArguments"]["skipableVariableName"][]="trtdEnd";
5987
		$conf["form.checkArguments"]["skipableVariableName"][]="formAction";
5988
		$conf["form.checkArguments"]["skipableVariableName"][]="independentForm";
5989
		$conf["form.checkArguments"]["skipableVariableName"][]="tableEnd";
5990
		$conf["form.checkArguments"]["skipableVariableName"][]="actionTarget";
5991
		$conf["form.checkArguments"]["skipableVariableName"][]="dataFormId";
5992
		#$conf["form.checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
5993
		$conf["form.checkArguments"]["skipableVariableType"][]="string";
5994
		$conf["form.checkArguments"]["skipableVariableType"][]="string";
5995
		$conf["form.checkArguments"]["skipableVariableType"][]="string";
5996
		$conf["form.checkArguments"]["skipableVariableType"][]="array";
5997
		$conf["form.checkArguments"]["skipableVariableType"][]="array";
5998
		$conf["form.checkArguments"]["skipableVariableType"][]="string";
5999
		$conf["form.checkArguments"]["skipableVariableType"][]="string";
6000
		$conf["form.checkArguments"]["skipableVariableType"][]="string";
6001
		$conf["form.checkArguments"]["skipableVariableType"][]="string";
6002
		$conf["form.checkArguments"]["skipableVariableType"][]="string";
6003
		$conf["form.checkArguments"]["skipableVariableType"][]="string";
6004
		$conf["form.checkArguments"]["skipableVariableType"][]="string";
6005
		$conf["form.checkArguments"]["skipableVariableType"][]="array";
6006
		$conf["form.checkArguments"]["skipableVariableType"][]="string";
6007
		$conf["form.checkArguments"]["skipableVariableType"][]="string";
6008
		$conf["form.checkArguments"]["skipableVariableType"][]="string";
6009
		$conf["form.checkArguments"]["skipableVariableType"][]="string";
6010
		$conf["form.checkArguments"]["skipableVariableType"][]="string";
6011
		$conf["form.checkArguments"]["skipableVariableType"][]="string";
6012
		$conf["form.checkArguments"]["skipableVariableType"][]="string";
6013
		$conf["form.checkArguments"]["skipableVariableType"][]="string";
6014
		$conf["form.checkArguments"]["skipableVariableType"][]="string";
6015
		$conf["form.checkArguments"]["skipableVariableType"][]="string";
6016
		$conf["form.checkArguments"]["skipableVariableType"][]="string";
6017
		$conf["form.checkArguments"]["skipableVariableType"][]="string";
6018
		$conf["form.checkArguments"]["skipableVariableType"][]="string";
6019
		#$conf["form.checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,"null"代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
6020
		$conf["form.checkArguments"]["skipableVarDefaultValue"][]=null;
6021
		$conf["form.checkArguments"]["skipableVarDefaultValue"][]=null;
6022
		$conf["form.checkArguments"]["skipableVarDefaultValue"][]="  ";
6023
		$conf["form.checkArguments"]["skipableVarDefaultValue"][]=null;
6024
		$conf["form.checkArguments"]["skipableVarDefaultValue"][]=null;
6025
		$conf["form.checkArguments"]["skipableVarDefaultValue"][]=null;
6026
		$conf["form.checkArguments"]["skipableVarDefaultValue"][]=null;
6027
		$conf["form.checkArguments"]["skipableVarDefaultValue"][]=null;
6028
		$conf["form.checkArguments"]["skipableVarDefaultValue"][]=null;
6029
		$conf["form.checkArguments"]["skipableVarDefaultValue"][]=null;
6030
		$conf["form.checkArguments"]["skipableVarDefaultValue"][]=" ";
6031
		$conf["form.checkArguments"]["skipableVarDefaultValue"][]="1";
6032
		$conf["form.checkArguments"]["skipableVarDefaultValue"][]="\$conf[\"sendValue\"]";
6033
		$conf["form.checkArguments"]["skipableVarDefaultValue"][]=null;
6034
		$conf["form.checkArguments"]["skipableVarDefaultValue"][]=null;
6035
		$conf["form.checkArguments"]["skipableVarDefaultValue"][]=" ";
6036
		$conf["form.checkArguments"]["skipableVarDefaultValue"][]=" ";
6037
		$conf["form.checkArguments"]["skipableVarDefaultValue"][]=" ";
6038
		$conf["form.checkArguments"]["skipableVarDefaultValue"][]="__qbpwcf_inputSelect";
6039
		$conf["form.checkArguments"]["skipableVarDefaultValue"][]=null;
6040
		$conf["form.checkArguments"]["skipableVarDefaultValue"][]=null;
6041
		$conf["form.checkArguments"]["skipableVarDefaultValue"][]=null;
6042
		$conf["form.checkArguments"]["skipableVarDefaultValue"][]="true";
6043
		$conf["form.checkArguments"]["skipableVarDefaultValue"][]=null;
6044
		$conf["form.checkArguments"]["skipableVarDefaultValue"][]="_self";
6045
		$conf["form.checkArguments"]["skipableVarDefaultValue"][]=null;
6046
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
6047
		$conf["form.checkArguments"]["canBeEmptyString"]="false";
6048
		$checkResult=variableCheck::checkArguments($conf["form.checkArguments"]);
6049
		unset($conf["form.checkArguments"]);
6050
 
6051
		#如果$checkResult["status"] 等於 "false"
6052
		#意即如果檢查出錯
6053
		if($checkResult["status"]=="false"){
6054
 
6055
			#設置錯誤識別
6056
			$result["status"]="false";
6057
 
6058
			#設置錯誤訊息
6059
			$result["error"]=$checkResult;
6060
 
6061
			#回傳結果
6062
			return $result;
6063
 
6064
			}#if end
6065
 
6066
		#如果$checkResult["passed"] 等於 "false"
6067
		#意即如果檢查出錯
6068
		if($checkResult["passed"]=="false"){
6069
 
6070
			#設置錯誤識別
6071
			$result["status"]="false";
6072
 
6073
			#設置錯誤訊息
6074
			$result["error"]=$checkResult;
6075
 
6076
			#回傳結果
6077
			return $result;
6078
 
6079
			}#if end
6080
 
6081
		#如果 $conf["tableStart"] 有設置
6082
		if(isset($conf["tableStart"])){
6083
 
6084
			#如果 $conf["tableStart"] 等於 "true"
6085
			if($conf["tableStart"]=="true"){
6086
 
6087
				#函式說明:
6088
				#表格開始,可以設定表格的厚度和位置
6089
				#回傳結果:
6090
				#$result,表格開始的語法
6091
				#必填寫的參數:
6092
				$conf["table.start"]["class"]=$conf["tableStartClass"];#爲表格的css樣式,若為"",則代表不套用css樣式;若爲"__withoutBorder"的話則套用無框線的預設樣式;若爲"__withBorder"的話,則爲有框線的預設樣式。
6093
				$tableStart=table::start($conf["table.start"]);
6094
				unset($conf["table.start"]);
6095
 
6096
				#如果表格開始失敗
6097
				if($tableStart["status"]=="false"){
6098
 
6099
					#設置錯誤識別
6100
					$result["status"]="false";
6101
 
6102
					#設置錯誤訊息
6103
					$result["error"]=$tableStart;
6104
 
6105
					#回傳結果
6106
					return $result;
6107
 
6108
					}#if end
6109
 
6110
				#串接表格開始的字串
6111
				$result["content"]=$result["content"].$tableStart["content"];
6112
 
6113
				}#if end
6114
 
6115
			}#if end
6116
 
6117
		#如果 $conf["formAction"] 有設定
6118
		if(isset($conf["formAction"])){
6119
 
6120
			#如果 $conf["actionTarget"] 有設定
6121
			if(isset($conf["actionTarget"])){
6122
 
6123
				#指派設定值
6124
				$conf["form.start"]["target"]=$conf["actionTarget"];
6125
 
6126
				}#if end
6127
 
6128
			#如果 $conf["formName"] 沒有設置
6129
			if(!isset($conf["formName"])){
6130
 
6131
				#預設爲空數值
6132
				$conf["formName"]="  ";
6133
 
6134
				}#if end
6135
 
6136
			#反之 $conf["formName"] 有設置
6137
			else{
6138
 
6139
				#過濾 $conf["formName"] 避免錯誤
6140
				#函式說明:
6141
				#處理字串避免網頁出錯
6142
				#回傳結果:
6143
				#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
6144
				#$result["function"],當前執行的函數.
6145
				#$result["content"],爲處理好的字串.
6146
				#$result["error"],錯誤訊息陣列.
6147
				#必填參數:
6148
				$conf["stringProcess::correctCharacter"]["stringIn"]=$conf["formName"];#爲要處理的字串
6149
				#可省略的參數:
6150
				$conf["stringProcess::correctCharacter"]["selectedCharacter"]=array("<",">","=","//","'","$","%","&","|","/*","*\/","#","\""," ");#爲被選擇要處理的字串/字元,須爲陣列值。
6151
					#若不設定則預設爲要將這些字串作替換("<",">","=","//","'","$","%","&","|","/*","*\/","#","\"")。
6152
					#特殊字元,「\n」代表換行,「\t」代表tab鍵的間隔
6153
				#$conf["changeTo"]=array();#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
6154
				$correctCharacter=stringProcess::correctCharacter($conf["stringProcess::correctCharacter"]);
6155
				unset($conf["stringProcess::correctCharacter"]);
6156
 
6157
				#如果過濾 $conf["formName"] 失敗
6158
				if($correctCharacter["status"]=="false"){
6159
 
6160
					#設置執行失敗
6161
					$result["status"]="false";
6162
 
6163
					#設置執行錯誤訊息
6164
					$result["error"]=$correctCharacter;
6165
 
6166
					#回傳結果
6167
					return $result;
6168
 
6169
					}#if end
6170
 
6171
				#則設定其數值
6172
				$conf["formName"]=$correctCharacter["content"];#爲該表單的名稱
6173
 
6174
				}#if end
6175
 
6176
			#函式說明:
6177
			#表單開始
6178
			#回傳結果:
6179
			#$result,表單開始的語法
6180
			#必填參數:
6181
			$conf["form.start"]["action"]=$conf["formAction"];#爲要交給那個檔案處理該表單傳送的內容
6182
			#可省略參數:
6183
			$conf["form.start"]["name"]=$conf["formName"];#爲該表單的名稱
6184
			#$conf["method"]="";#爲傳輸的方法,若沒設定則預設爲post,其他可用的參數爲get。
6185
			#$conf["target"]="";#為顯示的方式,若沒設定則預設爲"_self",其他可用的參數爲 "_blank"、"_parent"、"_top",也可以是iframe的名稱。
6186
			#$conf["tableStart"]="true";#爲該表單是否要以<table>開始。"true"爲是;
6187
			#$conf["tableClass"]="";#表格要套用的css樣式,若省略的話,則預設爲 __defaultTbaleCsssStyle 其屬性爲 table-layout:fixed word-break:break-all width:100%
6188
			$formStart=form::start($conf["form.start"]);
6189
			unset($conf["form.start"]);
6190
 
6191
			#如果表單開始失敗
6192
			if($formStart["status"]=="false"){
6193
 
6194
				#設置錯誤識別
6195
				$result["status"]="false";
6196
 
6197
				#設置錯誤訊息
6198
				$result["error"]=$formStart;
6199
 
6200
				#回傳結果
6201
				return $result;
6202
 
6203
				}#if end
6204
 
6205
			#串接表單開始
6206
			$result["content"]=$result["content"].$formStart["content"];
6207
 
6208
			}#if end
6209
 
6210
		#如果 $conf["hiddenVar"]與$conf["hiddenVarValue"]皆有設置
6211
		if(isset($conf["hiddenVar"]) && isset($conf["hiddenVarValue"])){
6212
 
6213
			#且陣列元素數目相同
6214
			if(count($conf["hiddenVar"])==count($conf["hiddenVarValue"])){
6215
 
6216
				#建立隱藏的表單
6217
				#傳送多個隱藏表單的資訊
6218
				#回傳的數值:
6219
				#$result,語法
6220
				#$result["sendedArrayName"],
6221
				#$result["sendedArrayValue"],
6222
				#$result["sendedArrayCount"],
6223
				#必填參數:
6224
				$conf["form"]["inputMutiHidden"]["nameArray"]=$conf["hiddenVar"];#欲傳送的隱藏陣列變數名稱
6225
				$conf["form"]["inputMutiHidden"]["valueArray"]=$conf["hiddenVarValue"];#欲傳送的隱藏陣列變數數值
6226
				$hiddenVar=form::inputMultiHidden($conf["form"]["inputMutiHidden"]);
6227
				unset($conf["form"]);
6228
 
6229
				#如果隱藏的表單變數設置失敗
6230
				if($hiddenVar["status"]=="false"){
6231
 
6232
					#設置錯誤識別
6233
					$result["status"]="false";
6234
 
6235
					#設置錯誤訊息
6236
					$result["error"]=$hiddenVar;
6237
 
6238
					#回傳結果
6239
					return $result;
6240
 
6241
					}#if end
6242
 
6243
				#接上語法
6244
				$result["content"]=$result["content"].$hiddenVar["content"];
6245
 
6246
				}#if end
6247
 
6248
			}#if end
6249
 
6250
		#如果有設定 $conf["fixedPosition"]
6251
		if(isset($conf["fixedPosition"])){
6252
 
6253
			#如果 $conf["fixedPosition"] 等於 "true"
6254
			if($conf["fixedPosition"]=="true"){
6255
 
6256
				#如果 $conf["fixedPosition.fixedTop"] 沒有設置
6257
				if(!isset($conf["fixedPosition.fixedTop"])){
6258
 
6259
					#於設為0px
6260
					$conf["fixedPosition.fixedTop"]="0px";
6261
 
6262
					}#if end
6263
 
6264
				#如果 $conf["fixedPosition.fixedLeft"] 沒有設置
6265
				if(!isset($conf["fixedPosition.fixedLeft"])){
6266
 
6267
					#預設為0px
6268
					$conf["fixedPosition.fixedLeft"]="0px";
6269
 
6270
					}#if end
6271
 
6272
				#如果 $conf["fixedPosition.emptySpaceSize"] 沒有設置
6273
				if(!isset($conf["fixedPosition.emptySpaceSize"])){
6274
 
6275
					#預設為40px
6276
					$conf["fixedPosition.emptySpaceSize"]="40px";
6277
 
6278
					}#if end
6279
 
6280
				#建立按鈕的預設css樣式
6281
				#函式說明:
6282
				#創建 css 樣式
6283
				#必填參數:
6284
				$conf_createCssStyle["cssStyleName"]="__simpleButtonLinkDefaultButtonFixedPositionCssStyle";#為該 css 樣式的名稱,不能以數字開頭。
6285
				$conf_createCssStyle["attributes"]=array("width","height","font-size","text-align","position","top","left");#為屬性名稱,須為陣列值
6286
				$conf_createCssStyle["content"]=array("100%",(50*$conf["viewCount"])."px","30","center","fixed",$conf["fixedPosition.fixedTop"],$conf["fixedPosition.fixedLeft"]);#為屬性值,須為陣列值
6287
				$css=css::createCssStyle($conf_createCssStyle);
6288
				unset($conf_createCssStyle);
6289
 
6290
				#如果建立css樣式失敗
6291
				if($css["status"]=="false"){
6292
 
6293
					#設置錯誤識別
6294
					$result["status"]="false";
6295
 
6296
					#設置錯誤訊息
6297
					$result["error"]=$css;
6298
 
6299
					#回傳結果
6300
					return $result;
6301
 
6302
					}#if end
6303
 
6304
				#串接css樣式
6305
				$result["content"]=$result["content"].$css["content"];
6306
 
6307
				#函式說明:
6308
				#創建 css 樣式
6309
				#回傳結果:
6310
				#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
6311
				#$result["css"],css設定內容
6312
				#$result["function"],當前執行的函數
6313
				#$result["error"],函式錯誤訊息,若爲""則表示沒有錯誤
6314
				#必填參數:
6315
				$conf["css.createCssStyle"]["cssStyleName"]="emptyStyle";#為該 css 樣式的名稱,不能以數字開頭。
6316
				$conf["css.createCssStyle"]["attributes"]=array("font-size");#為屬性名稱,須為陣列值
6317
				$conf["css.createCssStyle"]["content"]=array("40px");#為屬性值,須為陣列值
6318
				$css=css::createCssStyle($conf["css.createCssStyle"]);
6319
				unset($conf["css.createCssStyle"]);
6320
 
6321
				#如果建立css樣式失敗
6322
				if($css["status"]=="false"){
6323
 
6324
					#設置錯誤識別
6325
					$result["status"]="false";
6326
 
6327
					#設置錯誤訊息
6328
					$result["error"]=$css;
6329
 
6330
					#回傳結果
6331
					return $result;
6332
 
6333
					}#if end
6334
 
6335
				#串接css樣式
6336
				$result["content"]=$result["content"].$css["content"];
6337
 
6338
				}#if end
6339
 
6340
			}#if end
6341
 
6342
		#如果 $conf["trStart"] 存在
6343
		if(isset($conf["trStart"])){
6344
 
6345
			#如果其值爲 true
6346
			if($conf["trStart"]=="true"){
6347
 
6348
				#串接列開始
6349
				$result["content"]=$result["content"]."<tr>";
6350
 
6351
				}#if end
6352
 
6353
			}#if end
6354
 
6355
		#如果 $conf["tdStart"] 存在
6356
		if(isset($conf["tdStart"])){
6357
 
6358
			#如果其值爲 true
6359
			if($conf["tdStart"]=="true"){
6360
 
6361
				#串接欄開始
6362
				$result["content"]=$result["content"]."<td>";
6363
 
6364
				}#if end
6365
 
6366
			}#if end
6367
 
6368
		#如果 $conf["viewCount"] 有設定
6369
		if(isset($conf["viewCount"])){
6370
 
6371
			#就按照設定值
6372
			$conf["viewCount"]=" size = ".$conf["viewCount"]." ";
6373
 
6374
			}#if end
6375
 
6376
		#反之
6377
		else{
6378
 
6379
			#設為""
6380
			$conf["viewCount"]="";
6381
 
6382
			}#else end
6383
 
6384
		#如果有設定 $conf["fixedPosition"]
6385
		if(isset($conf["fixedPosition"])){
6386
 
6387
			#如果 $conf["fixedPosition"] 等於 "true"
6388
			if($conf["fixedPosition"]=="true"){
6389
 
6390
				#用固定位置的樣式
6391
				$conf["class"]="__simpleButtonLinkDefaultButtonFixedPositionCssStyle";
6392
 
6393
				}#if end
6394
 
6395
			}#if end
6396
 
6397
		#設定要套用的css類別樣式
6398
		$conf["class"] = " class='".$conf["class"]."' ";
6399
 
6400
		#如果 $conf["jsActivitor"] 與 $conf["jsAction"] 皆有設定
6401
		if( isset($conf["jsActivitor"]) && isset($conf["jsAction"]) ){
6402
 
6403
			#處理jsAction裏面不能有空格
6404
			#函式說明:
6405
			#處理字串避免網頁出錯
6406
			#回傳結果:
6407
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
6408
			#$result["function"],當前執行的函數.
6409
			#$result["content"],爲處理好的字串.
6410
			#$result["error"],錯誤訊息陣列.
6411
			#$result["argu"],使用的參數. 
6412
			#必填參數:
6413
			$conf["stringProcess::correctCharacter"]["stringIn"]=$conf["jsAction"];#爲要處理的字串
6414
			#可省略的參數:
6415
			$conf["stringProcess::correctCharacter"]["selectedCharacter"]=array(" ");#爲被選擇要處理的字串/字元,須爲陣列值。
6416
				#若不設定則預設爲要將這些字串作替換 ("<",">","=","//","'","$","%","&","|","/*","*","#","\"").
6417
				#特殊字元,「\n」代表換行,「\t」代表tab鍵的間隔
6418
			#$conf["changeTo"]=array();#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
6419
			$correctCharacter=stringProcess::correctCharacter($conf["stringProcess::correctCharacter"]);
6420
			unset($conf["stringProcess::correctCharacter"]);
6421
 
6422
			#如果處理失敗
6423
			if($correctCharacter["status"]==="false"){
6424
 
6425
				#設置執行失敗
6426
				$result["status"]="false";
6427
 
6428
				#設置執行錯誤
6429
				$result["error"]=$correctCharacter;
6430
 
6431
				#回傳結果
6432
				return $result;
6433
 
6434
				}#if end	
6435
 
6436
			#get new jsAction
6437
			$conf["jsAction"]=$correctCharacter["content"];#爲該表單的名稱
6438
 
6439
			#則將設定值組合
6440
			$conf["jsCustom"]=" ".$conf["jsActivitor"]."=".$conf["jsAction"]." ";
6441
 
6442
			}#if end
6443
 
6444
		#如果 $conf["readOnly"] 為 "true"
6445
		if($conf["readOnly"]=="true"){
6446
 
6447
			#設置為 " readonly "
6448
			$conf["readOnly"]=" disabled ";
6449
 
6450
			}#if end
6451
 
6452
		#反之
6453
		else{
6454
 
6455
			#設置為 ""
6456
			$conf["readOnly"]="";
6457
 
6458
			}#else end
6459
 
6460
		#過濾 $conf["name"] 避免錯誤
6461
		#函式說明:
6462
		#處理字串避免網頁出錯
6463
		#回傳結果:
6464
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
6465
		#$result["function"],當前執行的函數.
6466
		#$result["content"],爲處理好的字串.
6467
		#$result["error"],錯誤訊息陣列.
6468
		#必填參數:
6469
		$conf["stringProcess::correctCharacter"]["stringIn"]=$conf["name"];#爲要處理的字串
6470
		#可省略的參數:
6471
		$conf["stringProcess::correctCharacter"]["selectedCharacter"]=array("<",">","=","//","'","$","%","&","|","/*","*\/","#","\""," ");#爲被選擇要處理的字串/字元,須爲陣列值。
6472
			#若不設定則預設爲要將這些字串作替換("<",">","=","//","'","$","%","&","|","/*","*\/","#","\"")。
6473
			#特殊字元,「\n」代表換行,「\t」代表tab鍵的間隔
6474
		#$conf["stringProcess::correctCharacter"]["changeTo"]=array("","","","","","","","","","","","","");#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
6475
		$correctCharacter=stringProcess::correctCharacter($conf["stringProcess::correctCharacter"]);
6476
		unset($conf["stringProcess::correctCharacter"]);
6477
 
6478
		#如果過濾字串失敗
6479
		if($correctCharacter["status"]=="false"){
6480
 
6481
			#設置執行失敗
6482
			$result["status"]="false";
6483
 
6484
			#設置執行錯誤訊息
6485
			$result["error"]=$correctCharacter;
6486
 
6487
			#回傳結果
6488
			return $result;
6489
 
6490
			}#if end
6491
 
6492
		#置換過濾好了的$conf["name"]
6493
		$conf["name"]=$correctCharacter["content"];
6494
 
6495
		#建立註解文字用的預設css樣式
6496
		#函式說明:
6497
		#創建 css 樣式
6498
		#必填參數:
6499
		$conf_createCssStyle["cssStyleName"]="__commentDefaultCssStyle";#為該 css 樣式的名稱,不能以數字開頭。
6500
		$conf_createCssStyle["attributes"]=array("font-size","text-align");#為屬性名稱,須為陣列值
6501
		$conf_createCssStyle["content"]=array("30","center");#為屬性值,須為陣列值
6502
		$css=css::createCssStyle($conf_createCssStyle);
6503
		unset($conf_createCssStyle);
6504
 
6505
		#如果建立css樣式失敗
6506
		if($css["status"]=="false"){
6507
 
6508
			#設置錯誤識別
6509
			$result["status"]="false";
6510
 
6511
			#設置錯誤訊息
6512
			$result["error"]=$css;
6513
 
6514
			#回傳結果
6515
			return $result;
6516
 
6517
			}#if end
6518
 
6519
		#串接css樣式
6520
		$result["content"]=$result["content"].$css["content"];
6521
 
6522
		#如果有設置 $conf["dataFormId"]
6523
		if(isset($conf["dataFormId"])){
6524
 
6525
			#設置 data-id 屬性
6526
			$conf["dataFormId"]="data-form-id=\"".$conf["dataFormId"]."\"";
6527
 
6528
			}#if end
6529
 
6530
		#反之設置為空數值	
6531
		else{
6532
 
6533
			$conf["dataFormId"]="";
6534
 
6535
			}#else end
6536
 
6537
		#下拉式表單的名稱
6538
		$result["content"]=$result["content"]." <label class=\"__commentDefaultCssStyle\" for=\"".$conf["name"]."\">".$conf["comment"]."</label><select  id=\"".$conf["name"]."\" name = \"".$conf["name"]."\" ".$conf["viewCount"]." ".$conf["class"]." ".$conf["jsCustom"]." ".$conf["readOnly"]." ".$conf["dataFormId"].">";
6539
 
6540
		#將有幾個選項的數目放進 $count
6541
		$count=count($conf["sendValue"]);
6542
 
6543
		#n個選項跑n次
6544
		for($i=0;$i<$count;$i++){
6545
 
6546
			#如果選項的內容等於預設的數值,
6547
			if($conf["defaultValue"]==$conf["sendValue"][$i]){
6548
 
6549
				#增加可用的選項,且設為預設選項。
6550
				$result["content"]=$result["content"]."<option value = \"".$conf["sendValue"][$i]."\" selected='selected'>".$conf["outputValue"][$i]."</option>";
6551
 
6552
				}#if end
6553
 
6554
			#反之則照常處理
6555
			else{
6556
 
6557
				#謹增加可用的選項
6558
				$result["content"]=$result["content"]."<option value = \"".$conf["sendValue"][$i]."\">".$conf["outputValue"][$i]."</option>";
6559
 
6560
				}#else end
6561
 
6562
			}#回圈結束
6563
 
6564
		#選項結束
6565
		$result["content"]=$result["content"]."</select>";
6566
 
6567
		#如果有設定 $conf["fixedPosition"]
6568
		if(isset($conf["fixedPosition"])){
6569
 
6570
			#如果 $conf["fixedPosition"] 等於 "true"
6571
			if($conf["fixedPosition"]=="true"){
6572
 
6573
				#空白區塊
6574
				#函式說明:
6575
				#<span>區塊:
6576
				#$result["status"],字串,執行否正常,"true"代表正常,"false"代表不正常.
6577
				#$result["functin"],字串,當前函數的名稱.
6578
				#$result["error"],陣列,錯訊訊息.
6579
				#$result["content"],字串,<div>標籤的開始與設定語法.
6580
				#必填參數:
6581
				#$conf["css.spanSection"]["contentArray"],字串陣列,要放入的內容陣列.
6582
				$conf["css.spanSection"]["contentArray"]=array("&nbsp;");
6583
				#可省略參數
6584
				#$conf["css.spanSection"]["class"],字串,div區段要套用的css樣式.
6585
				$conf["css.spanSection"]["class"]="emptyStyle";
6586
				$spanSection=css::spanSection($conf["css.spanSection"]);
6587
				unset($conf["css.spanSection"]);
6588
 
6589
				#如果 spanSection 建立失敗
6590
				if($spanSection["status"]==="false"){
6591
 
6592
					#設置錯誤識別
6593
					$result["status"]="false";
6594
 
6595
					#設置錯誤訊息
6596
					$result["error"]=$spanSection;
6597
 
6598
					#回傳結果
6599
					return $result;
6600
 
6601
					}#if end
6602
 
6603
				#串接 spanSection
6604
				$result["content"]=$result["content"].$spanSection["content"];
6605
 
6606
				}#if end
6607
 
6608
			}#if end
6609
 
6610
		#如果 $conf["tdEnd"] 存在
6611
		if(isset($conf["tdEnd"])){
6612
 
6613
			#如果其值爲 true
6614
			if($conf["tdEnd"]==="true"){
6615
 
6616
				#欄結束
6617
				$result["content"]=$result["content"]."</td>";
6618
 
6619
				}#if end
6620
 
6621
			}#if end
6622
 
6623
		#如果 $conf["trtdEnd"] 存在
6624
		if(isset($conf["trEnd"])){
6625
 
6626
			#如果其值爲 true
6627
			if($conf["trEnd"]==="true"){
6628
 
6629
				#列結束
6630
				$result["content"]=$result["content"]."</tr>";
6631
 
6632
				}#if end
6633
 
6634
			}#if end
6635
 
6636
		#如果 $conf["formAction"] 有設定
6637
		if(isset($conf["formAction"])){
6638
 
6639
			#如果 $conf["independentForm"] 等於 "true"
6640
			if($conf["independentForm"]=="true"){
6641
 
6642
				#函式說明:
6643
				#表單結束
6644
				#回傳結果:
6645
				#$result,表單結束的語法
6646
				#必填參數:
6647
				$conf["form.end"]["tableEnd"]="false";#爲該表單是否要以</table>結尾。"true"爲是;"false"爲否。
6648
				$formEnd=form::end($conf["form.end"]);
6649
				unset($conf["form.end"]);
6650
 
6651
				#如果表單結束失敗
6652
				if($formEnd["status"]==="false"){
6653
 
6654
					#設置錯誤識別
6655
					$result["status"]="false";
6656
 
6657
					#設置錯誤訊息
6658
					$result["error"]=$formEnd;
6659
 
6660
					#回傳結果
6661
					return $result;
6662
 
6663
					}#if end
6664
 
6665
				#串接表單結束
6666
				$result["content"]=$result["content"].$formEnd["content"];
6667
 
6668
				}#if end
6669
 
6670
			}#if end
6671
 
6672
		#如果 $conf["tableEnd"] 有設置
6673
		if(isset($conf["tableEnd"])){
6674
 
6675
			#如果 $conf["tableEnd"] 等於 "true"
6676
			if($conf["tableEnd"]=="true"){
6677
 
6678
				#函式說明:
6679
				#表格結束
6680
				#回傳結果:
6681
				#表格結束的語法
6682
				$result["content"]=$result["content"].table::end();
6683
 
6684
				}#if end
6685
 
6686
			}#if end
6687
 
6688
		#設置執行正常
6689
		$result["status"]="true";
6690
 
6691
		#印出表格的設定以及表單的目的、呈現的方式、傳送的方式。
6692
		return $result;
6693
 
6694
		}#function inputSelect end
6695
 
6696
	/*
6697
	#函式說明:
6698
	#建立下拉式表單,選項會用全螢幕的div區塊呈現.
6699
	#回傳結果:
6700
	#$result["status"],執行是否正常,"true"代表正常,"false"代表失敗.
6701
	#$result["error"],錯誤訊息陣列.
6702
	#$result["content"],語法內容.
6703
	#$result["function"],設置當前執行的函式
6704
	#必填參數:
6705
	#$conf["name"],字串,爲該下拉式選單的名稱
6706
	$conf["name"]="";
6707
	#$conf["sendValue"],陣列值,爲每個選項的實際傳送的數值,e.g. $sendValue = array("a","b","c","d","e");
6708
	$conf["sendValue"]=array();
6709
	#可省略參數:
6710
	#$conf["formName"]="";#該表單的名稱,不能跟 "name" 一樣,會造成關閉選單後,選單也跟着消失的問題.
6711
	#$conf["outputValue"]=array();#爲陣列值,爲每個選項的實際顯示的數值, e.g. $outputValue = array("p","o","i","t","e");,如果沒有設定,則其值同$conf["sendValue"]。
6712
	#$conf["viewCount"]="";#為一次要顯示幾個選項,預設爲顯示一個。
6713
	#$conf["defaultValue"]="";#為預設選取那個選項,須爲$conf["sendValue"]其中的一個值。
6714
	#$conf["class"]="";#爲要套用的class樣式,預設為 "__qbpwcf_inputSelect".
6715
	#$conf["readOnly"],字串,內容是否唯獨,預設為"false",不唯獨,"true"為唯獨.
6716
	#$conf["readOnly"]="true";
6717
	#$conf["comment"],字串,輸入方框上面要放哪些註解文字,亦即用label來呈現,同時指定"for"屬性的數值為當前"input"標籤的id,意即參數"name"的內容.
6718
	#$conf["comment"]="";
6719
	#$conf["formAction"]="";#爲該下拉式表單要傳送到的位置
6720
	#$conf["actionTarget"]="_self";#要如何接收網頁的迴應,預設爲_self
6721
	#$conf["independentForm"]="false";#是否該下拉式選單就是一個完整的表單,"true"代表是,"false"代表不是,預設為"true"
6722
	#$conf["hiddenVar"],字串陣列,隱藏的變數名稱陣列.
6723
	#$conf["hiddenVar"]=array("");
6724
	#$conf["hiddanVarValue"],字串陣列,隱藏變數的數值內容.
6725
	#$conf["hiddenVarValue"]=array("");
6726
	#$conf["fixedPosition"],字串,該下拉式選單是否要隨着滾軸滾動時固定在畫面上特定的位置,於設為"false",代表不固定,"true"代表要固定.
6727
	#$conf["fixedPosition"]="true";
6728
	#$conf["fixedPosition.fixedTop"],字串,該選單距離畫面頂部的固定距離,預設為0px.
6729
	#$conf["fixedPosition.fixedTop"]="0px";
6730
	#$conf["fixedPosition.fixedLeft"],字串,該選單距離畫面左方的固定距離.預設為0px.
6731
	#$conf["fixedPosition.fixedLeft"]="0px";
6732
	#$conf["fixedPosition.emptySpaceSize"],字串,表單位置要放置多寬的空白,於設為40px.
6733
	#$conf["fixedPosition.emptySpaceSize"]="40px";
6734
	#$conf["tableStartClass"]="__withoutBorder";#表格要採用的css樣式,預設為__withoutBorder,__withoutBorder為沒有框線的樣式,__withBorder為有樣式的表格.
6735
	#$conf["tableStart"]="true";#爲是否要以<table>結尾,"true"表示"是"。也可以看作表格結束。
6736
	#$conf["trStart"]="true";#爲是否要以<tr>開頭,"true"表示"是"。也可以看作新的一列開始。
6737
	#$conf["tdStart"]="true";#爲是否要以<td>開頭,"true"表示"是"。也可以看成列裏面的元素開始
6738
	#$conf["tdEnd"]="true";#爲是否要以</td>結尾,"true"表示"是"。也可以看成列裏面的元素結束
6739
	#$conf["trEnd"]="true";#爲是否要以</tr>結尾,"true"表示"是"。也可以看作該列結束。
6740
	#$conf["tableEnd"]="true";#爲是否要以</table>結尾,"true"表示"是"。也可以看作表格結束。
6741
	#$conf["closeIcon"],字串,關閉滾軸選單的按鈕圖示,預設為"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpvc2I9Imh0dHA6Ly93d3cub3BlbnN3YXRjaGJvb2sub3JnL3VyaS8yMDA5L29zYiIKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgd2lkdGg9IjEwNS43ODE3Mm1tIgogICBoZWlnaHQ9IjEwNS4zNDM0NG1tIgogICB2aWV3Qm94PSIwIDAgMTA1Ljc4MTcyIDEwNS4zNDM0NCIKICAgdmVyc2lvbj0iMS4xIgogICBpZD0ic3ZnOCIKICAgaW5rc2NhcGU6dmVyc2lvbj0iMC45MitkZXZlbCB1bmtub3duIgogICBzb2RpcG9kaTpkb2NuYW1lPSJjbG9zZUljb24uc3ZnIj4KICA8ZGVmcwogICAgIGlkPSJkZWZzMiI+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDQzMTUiCiAgICAgICBvc2I6cGFpbnQ9InNvbGlkIj4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzAwMDAwMDtzdG9wLW9wYWNpdHk6MTsiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgaWQ9InN0b3A0MzEzIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxmaWx0ZXIKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHN0eWxlPSJjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM6c1JHQiIKICAgICAgIGlkPSJmaWx0ZXI0MzkxIgogICAgICAgeD0iLTAuMDY4OTc3MTAzIgogICAgICAgd2lkdGg9IjEuMTM3OTU0MiIKICAgICAgIHk9Ii0wLjA3NTI5OTk5MyIKICAgICAgIGhlaWdodD0iMS4xNTA2Ij4KICAgICAgPGZlR2F1c3NpYW5CbHVyCiAgICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgICAgc3RkRGV2aWF0aW9uPSIxLjAwNjI1NDMiCiAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjQzOTMiIC8+CiAgICA8L2ZpbHRlcj4KICAgIDxmaWx0ZXIKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHN0eWxlPSJjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM6c1JHQiIKICAgICAgIGlkPSJmaWx0ZXI0NDM4IgogICAgICAgeD0iLTAuMDIyNjIyOTA0IgogICAgICAgd2lkdGg9IjEuMDQ1MjQ1OCIKICAgICAgIHk9Ii0wLjAyNTU1NTYxNCIKICAgICAgIGhlaWdodD0iMS4wNTExMTEyIj4KICAgICAgPGZlR2F1c3NpYW5CbHVyCiAgICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgICAgc3RkRGV2aWF0aW9uPSIwLjIyMTcwNjAxIgogICAgICAgICBpZD0iZmVHYXVzc2lhbkJsdXI0NDQwIiAvPgogICAgPC9maWx0ZXI+CiAgICA8ZmlsdGVyCiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICBzdHlsZT0iY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzOnNSR0IiCiAgICAgICBpZD0iZmlsdGVyNDQ0NiIKICAgICAgIHg9Ii0wLjAyMzIzMjg0NyIKICAgICAgIHdpZHRoPSIxLjA0NjQ2NTgiCiAgICAgICB5PSItMC4wMjQ4MTk1NDUiCiAgICAgICBoZWlnaHQ9IjEuMDQ5NjM5MSI+CiAgICAgIDxmZUdhdXNzaWFuQmx1cgogICAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICAgIHN0ZERldmlhdGlvbj0iMC4yMjIwOTQyOCIKICAgICAgICAgaWQ9ImZlR2F1c3NpYW5CbHVyNDQ0OCIgLz4KICAgIDwvZmlsdGVyPgogIDwvZGVmcz4KICA8c29kaXBvZGk6bmFtZWR2aWV3CiAgICAgaWQ9ImJhc2UiCiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIgogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgogICAgIGJvcmRlcm9wYWNpdHk9IjEuMCIKICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMC4wIgogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCiAgICAgaW5rc2NhcGU6em9vbT0iMS40IgogICAgIGlua3NjYXBlOmN4PSIxMzAuNTY4NjgiCiAgICAgaW5rc2NhcGU6Y3k9IjIwMS4zNDg0NSIKICAgICBpbmtzY2FwZTpkb2N1bWVudC11bml0cz0ibW0iCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0iZzQ0ODgiCiAgICAgaW5rc2NhcGU6ZG9jdW1lbnQtcm90YXRpb249IjAiCiAgICAgc2hvd2dyaWQ9ImZhbHNlIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTYwMCIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSI4MzYiCiAgICAgaW5rc2NhcGU6d2luZG93LXg9IjAiCiAgICAgaW5rc2NhcGU6d2luZG93LXk9IjI3IgogICAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjEiIC8+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhNSI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgICA8ZGM6dGl0bGUgLz4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGcKICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSIKICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIgogICAgIGlkPSJsYXllcjEiCiAgICAgc3R5bGU9ImRpc3BsYXk6aW5saW5lIgogICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKC01MC4wNTQwMzQsLTg5LjA0MzUyMikiPgogICAgPGcKICAgICAgIGlkPSJnNDQ4OCIKICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDIuNjU1MDQ0MywwLDAsMi44NTQ2OTA3LC0xMTAuOTk1MTgsLTMyNi45MjY1MikiPgogICAgICA8ZWxsaXBzZQogICAgICAgICByeT0iMTYuMDM1OTI3IgogICAgICAgICByeD0iMTcuNTA1ODg0IgogICAgICAgICBjeT0iMTY0LjE2NTUxIgogICAgICAgICBjeD0iODAuNTc4NzIiCiAgICAgICAgIGlkPSJwYXRoMzQ3NCIKICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MC4zO2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MC4yNjQ5OTk5OTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxO2ZpbHRlcjp1cmwoI2ZpbHRlcjQzOTEpO2ltYWdlLXJlbmRlcmluZzphdXRvIiAvPgogICAgICA8cmVjdAogICAgICAgICB0cmFuc2Zvcm09InJvdGF0ZSgtNDIuODA4OTU1KSIKICAgICAgICAgcnk9IjAiCiAgICAgICAgIHk9IjE3NC41NTY0OSIKICAgICAgICAgeD0iLTY3LjM5ODc1OCIKICAgICAgICAgaGVpZ2h0PSIyLjE1MjIwNjQiCiAgICAgICAgIHdpZHRoPSIyOS4yNzk2NDgiCiAgICAgICAgIGlkPSJyZWN0NDQxMyIKICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOiNmZmZmMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjA7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MTtmaWx0ZXI6dXJsKCNmaWx0ZXI0NDQ2KSIgLz4KICAgICAgPHJlY3QKICAgICAgICAgdHJhbnNmb3JtPSJyb3RhdGUoLTEzOS4wMzQ0MikiCiAgICAgICAgIHJ5PSIwIgogICAgICAgICB5PSItNzMuMDUwOTQ5IgogICAgICAgICB4PSItMTgyLjk2MjUyIgogICAgICAgICBoZWlnaHQ9IjIuMTUyMjA2NCIKICAgICAgICAgd2lkdGg9IjI5LjI3OTY0OCIKICAgICAgICAgaWQ9InJlY3Q0NDEzLTMiCiAgICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDojZmZmZjAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDowO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjE7ZmlsdGVyOnVybCgjZmlsdGVyNDQzOCkiIC8+CiAgICA8L2c+CiAgPC9nPgo8L3N2Zz4K".
6742
	#$conf["closeIcon"]="";
6743
	#$conf["valNotSend"],字串,如果選擇的選項數值為何,就不傳送表單.
6744
	#$conf["valNotSend"]="";
6745
	#$conf["dataFormId"],字串,提供用於識別哪一張表單的data屬性名稱.
6746
	#$conf["dataFormId"]="";
6747
	#參考資料:
6748
	#http://stackoverflow.com/questions/833032/submit-is-not-a-function-in-javascript => form的id重複會導致"document.testForm.submit()"的javaScript語法出錯。
6749
	#http://stackoverflow.com/questions/14622124/all-of-commands-for-submit-in-onchange-select-not-work => documents.forms.formName.submit() 才會將正確的表單送出。
6750
	#http://stackoverflow.com/questions/368813/html-form-readonly-select-tag-input => 禁止改變選項,且也不會傳送該名稱表單
6751
	#備註:
6752
	#$_SERVER["PHP_SELF"]為php檔案自己
6753
	#在手機網頁瀏覽器不支援.
6754
	#tableStart & tableEnd 要補上
6755
	*/
6756
	public static function scrollingList(&$conf){
6757
 
6758
		#初始化要回傳的結果
6759
		$result=array();
6760
 
6761
		#取得當前執行的函數名稱
6762
		$result["function"]=__FUNCTION__;
6763
 
6764
		#如果沒有參數
6765
		if(func_num_args()==0){
6766
 
6767
			#設置執行失敗
6768
			$result["status"]="false";
6769
 
6770
			#設置執行錯誤訊息
6771
			$result["error"]="函數".$result["function"]."需要參數";
6772
 
6773
			#回傳結果
6774
			return $result;
6775
 
6776
			}#if end
6777
 
6778
		#取得參數
6779
		$result["argu"]=$conf;
6780
 
6781
		#如果 $conf 不為陣列
6782
		if(gettype($conf)!=="array"){
6783
 
6784
			#設置執行失敗
6785
			$result["status"]="false";
6786
 
6787
			#設置執行錯誤訊息
6788
			$result["error"][]="\$conf變數須為陣列形態";
6789
 
6790
			#如果傳入的參數為 null
6791
			if($conf===null){
6792
 
6793
				#設置執行錯誤訊息
6794
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
6795
 
6796
				}#if end
6797
 
6798
			#回傳結果
6799
			return $result;
6800
 
6801
			}#if end
6802
 
6803
		#如果有設置close icon
6804
		if(isset($conf["closeIcon"])){
6805
 
6806
			#另存路徑
6807
			$closeIcon=$conf["closeIcon"];
6808
 
6809
			#卸除不被 form::inputSelect 接受的參數
6810
			unset($conf["closeIcon"]);
6811
 
6812
			}#if end
6813
 
6814
		#反之
6815
		else{
6816
 
6817
			#用預設的 close icon
6818
			$closeIcon="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpvc2I9Imh0dHA6Ly93d3cub3BlbnN3YXRjaGJvb2sub3JnL3VyaS8yMDA5L29zYiIKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgd2lkdGg9IjEwNS43ODE3Mm1tIgogICBoZWlnaHQ9IjEwNS4zNDM0NG1tIgogICB2aWV3Qm94PSIwIDAgMTA1Ljc4MTcyIDEwNS4zNDM0NCIKICAgdmVyc2lvbj0iMS4xIgogICBpZD0ic3ZnOCIKICAgaW5rc2NhcGU6dmVyc2lvbj0iMC45MitkZXZlbCB1bmtub3duIgogICBzb2RpcG9kaTpkb2NuYW1lPSJjbG9zZUljb24uc3ZnIj4KICA8ZGVmcwogICAgIGlkPSJkZWZzMiI+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDQzMTUiCiAgICAgICBvc2I6cGFpbnQ9InNvbGlkIj4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzAwMDAwMDtzdG9wLW9wYWNpdHk6MTsiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgaWQ9InN0b3A0MzEzIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxmaWx0ZXIKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHN0eWxlPSJjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM6c1JHQiIKICAgICAgIGlkPSJmaWx0ZXI0MzkxIgogICAgICAgeD0iLTAuMDY4OTc3MTAzIgogICAgICAgd2lkdGg9IjEuMTM3OTU0MiIKICAgICAgIHk9Ii0wLjA3NTI5OTk5MyIKICAgICAgIGhlaWdodD0iMS4xNTA2Ij4KICAgICAgPGZlR2F1c3NpYW5CbHVyCiAgICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgICAgc3RkRGV2aWF0aW9uPSIxLjAwNjI1NDMiCiAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjQzOTMiIC8+CiAgICA8L2ZpbHRlcj4KICAgIDxmaWx0ZXIKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHN0eWxlPSJjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM6c1JHQiIKICAgICAgIGlkPSJmaWx0ZXI0NDM4IgogICAgICAgeD0iLTAuMDIyNjIyOTA0IgogICAgICAgd2lkdGg9IjEuMDQ1MjQ1OCIKICAgICAgIHk9Ii0wLjAyNTU1NTYxNCIKICAgICAgIGhlaWdodD0iMS4wNTExMTEyIj4KICAgICAgPGZlR2F1c3NpYW5CbHVyCiAgICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgICAgc3RkRGV2aWF0aW9uPSIwLjIyMTcwNjAxIgogICAgICAgICBpZD0iZmVHYXVzc2lhbkJsdXI0NDQwIiAvPgogICAgPC9maWx0ZXI+CiAgICA8ZmlsdGVyCiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICBzdHlsZT0iY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzOnNSR0IiCiAgICAgICBpZD0iZmlsdGVyNDQ0NiIKICAgICAgIHg9Ii0wLjAyMzIzMjg0NyIKICAgICAgIHdpZHRoPSIxLjA0NjQ2NTgiCiAgICAgICB5PSItMC4wMjQ4MTk1NDUiCiAgICAgICBoZWlnaHQ9IjEuMDQ5NjM5MSI+CiAgICAgIDxmZUdhdXNzaWFuQmx1cgogICAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICAgIHN0ZERldmlhdGlvbj0iMC4yMjIwOTQyOCIKICAgICAgICAgaWQ9ImZlR2F1c3NpYW5CbHVyNDQ0OCIgLz4KICAgIDwvZmlsdGVyPgogIDwvZGVmcz4KICA8c29kaXBvZGk6bmFtZWR2aWV3CiAgICAgaWQ9ImJhc2UiCiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIgogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgogICAgIGJvcmRlcm9wYWNpdHk9IjEuMCIKICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMC4wIgogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCiAgICAgaW5rc2NhcGU6em9vbT0iMS40IgogICAgIGlua3NjYXBlOmN4PSIxMzAuNTY4NjgiCiAgICAgaW5rc2NhcGU6Y3k9IjIwMS4zNDg0NSIKICAgICBpbmtzY2FwZTpkb2N1bWVudC11bml0cz0ibW0iCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0iZzQ0ODgiCiAgICAgaW5rc2NhcGU6ZG9jdW1lbnQtcm90YXRpb249IjAiCiAgICAgc2hvd2dyaWQ9ImZhbHNlIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTYwMCIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSI4MzYiCiAgICAgaW5rc2NhcGU6d2luZG93LXg9IjAiCiAgICAgaW5rc2NhcGU6d2luZG93LXk9IjI3IgogICAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjEiIC8+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhNSI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgICA8ZGM6dGl0bGUgLz4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGcKICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSIKICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIgogICAgIGlkPSJsYXllcjEiCiAgICAgc3R5bGU9ImRpc3BsYXk6aW5saW5lIgogICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKC01MC4wNTQwMzQsLTg5LjA0MzUyMikiPgogICAgPGcKICAgICAgIGlkPSJnNDQ4OCIKICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDIuNjU1MDQ0MywwLDAsMi44NTQ2OTA3LC0xMTAuOTk1MTgsLTMyNi45MjY1MikiPgogICAgICA8ZWxsaXBzZQogICAgICAgICByeT0iMTYuMDM1OTI3IgogICAgICAgICByeD0iMTcuNTA1ODg0IgogICAgICAgICBjeT0iMTY0LjE2NTUxIgogICAgICAgICBjeD0iODAuNTc4NzIiCiAgICAgICAgIGlkPSJwYXRoMzQ3NCIKICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MC4zO2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MC4yNjQ5OTk5OTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxO2ZpbHRlcjp1cmwoI2ZpbHRlcjQzOTEpO2ltYWdlLXJlbmRlcmluZzphdXRvIiAvPgogICAgICA8cmVjdAogICAgICAgICB0cmFuc2Zvcm09InJvdGF0ZSgtNDIuODA4OTU1KSIKICAgICAgICAgcnk9IjAiCiAgICAgICAgIHk9IjE3NC41NTY0OSIKICAgICAgICAgeD0iLTY3LjM5ODc1OCIKICAgICAgICAgaGVpZ2h0PSIyLjE1MjIwNjQiCiAgICAgICAgIHdpZHRoPSIyOS4yNzk2NDgiCiAgICAgICAgIGlkPSJyZWN0NDQxMyIKICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOiNmZmZmMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjA7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MTtmaWx0ZXI6dXJsKCNmaWx0ZXI0NDQ2KSIgLz4KICAgICAgPHJlY3QKICAgICAgICAgdHJhbnNmb3JtPSJyb3RhdGUoLTEzOS4wMzQ0MikiCiAgICAgICAgIHJ5PSIwIgogICAgICAgICB5PSItNzMuMDUwOTQ5IgogICAgICAgICB4PSItMTgyLjk2MjUyIgogICAgICAgICBoZWlnaHQ9IjIuMTUyMjA2NCIKICAgICAgICAgd2lkdGg9IjI5LjI3OTY0OCIKICAgICAgICAgaWQ9InJlY3Q0NDEzLTMiCiAgICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDojZmZmZjAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDowO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjE7ZmlsdGVyOnVybCgjZmlsdGVyNDQzOCkiIC8+CiAgICA8L2c+CiAgPC9nPgo8L3N2Zz4K";
6819
 
6820
			}#else end
6821
 
6822
		#如果有設置 $conf["valNotSend"]
6823
		if(isset($conf["valNotSend"])){
6824
 
6825
			#設置不傳送表單的js語法
6826
			$valNotSend=
6827
			"
6828
				//如果表單的數值為 ".$conf["valNotSend"]."
6829
				if(clickedValue==='".$conf["valNotSend"]."'){
6830
 
6831
					//結束動作
6832
					return true;
6833
 
6834
					}//if end
6835
			";
6836
 
6837
			}#if end
6838
 
6839
		#反之
6840
		else{
6841
 
6842
			#設為空值
6843
			$valNotSend="";
6844
 
6845
			}#else end
6846
 
6847
		#卸除不被 form::inputSelect 接受的參數
6848
		unset($conf["valNotSend"]);
6849
 
6850
		#如果有設置 formName
6851
		if(isset($conf["formName"])){
6852
 
6853
			#如果 formName 跟 name 一樣
6854
			if($conf["formName"]===$conf["name"]){
6855
 
6856
				#增加 formName 的名稱
6857
				$conf["formName"]=$conf["formName"]."FormName";
6858
 
6859
				}#if end
6860
 
6861
			}#if end
6862
 
6863
		#函式說明:
6864
		#建立下拉式表單
6865
		#回傳結果:
6866
		#$result["status"],執行是否正常,"true"代表正常,"false"代表失敗.
6867
		#$result["error"],錯誤訊息陣列.
6868
		#$result["content"],語法內容.
6869
		#$result["function"],設置當前執行的函式
6870
		#必填參數:
6871
		#$conf["name"],字串,爲該下拉式選單的名稱
6872
		#$conf["name"]="";
6873
		#$conf["sendValue"],陣列值,爲每個選項的實際傳送的數值,e.g. $sendValue = array("a","b","c","d","e");
6874
		#$conf["sendValue"]=array();
6875
		#可省略參數:
6876
		#$conf["formName"]="";#該表單的名稱
6877
		#$conf["outputValue"]=array();#爲陣列值,爲每個選項的實際顯示的數值, e.g. $outputValue = array("p","o","i","t","e");,如果沒有設定,則其值同$conf["sendValue"]。
6878
		#$conf["viewCount"]="";#為一次要顯示幾個選項,預設爲顯示一個。
6879
		#$conf["defaultValue"]="";#為預設選取那個選項,須爲$conf["sendValue"]其中的一個值。
6880
		#$conf["class"]="";#爲要套用的class樣式,預設為 "__qbpwcf_inputSelect".
6881
		#$conf["readOnly"],字串,內容是否唯獨,預設為"false",不唯獨,"true"為唯獨.
6882
		#$conf["readOnly"]="true";
6883
		#$conf["comment"],字串,輸入方框上面要放哪些註解文字,亦即用label來呈現,同時指定"for"屬性的數值為當前"input"標籤的id,意即參數"name"的內容.
6884
		#$conf["comment"]="";
6885
		#$conf["formAction"]="";#爲該下拉式表單要傳送到的位置
6886
		#$conf["actionTarget"]="_self";#要如何接收網頁的迴應,預設爲_self
6887
		#$conf["jsActivitor"]="";#爲觸發js的條件,可以是"onChange"(已改變內容時)...,須搭配$conf["jsAction"]參數。
6888
		#$conf["jsAction"]="";#爲該js是要做什麼,可以是"document.forms.formName.submit()"(傳送名爲testForm的表單內容)...,須搭配$conf["jsActivitor"]參數。
6889
		#$conf["independentForm"]="true";#是否該下拉式選單就是一個完整的表單,"true"代表是,"false"代表不是,預設為"true"
6890
		#$conf["hiddenVar"],字串陣列,隱藏的變數名稱陣列.
6891
		#$conf["hiddenVar"]=array("");
6892
		#$conf["hiddanVarValue"],字串陣列,隱藏變數的數值內容.
6893
		#$conf["hiddenVarValue"]=array("");
6894
		#$conf["fixedPosition"],字串,該下拉式選單是否要隨着滾軸滾動時固定在畫面上特定的位置,於設為"false",代表不固定,"true"代表要固定.
6895
		#$conf["fixedPosition"]="true";
6896
		#$conf["fixedPosition.fixedTop"],字串,該選單距離畫面頂部的固定距離,預設為0px.
6897
		#$conf["fixedPosition.fixedTop"]="0px";
6898
		#$conf["fixedPosition.fixedLeft"],字串,該選單距離畫面左方的固定距離.預設為0px.
6899
		#$conf["fixedPosition.fixedLeft"]="0px";
6900
		#$conf["fixedPosition.emptySpaceSize"],字串,表單位置要放置多寬的空白,於設為40px.
6901
		#$conf["fixedPosition.emptySpaceSize"]="40px";
6902
		#$conf["tableStartClass"]="__withoutBorder";#表格要採用的css樣式,預設為__withoutBorder,__withoutBorder為沒有框線的樣式,__withBorder為有樣式的表格.
6903
		#$conf["tableStart"]="true";#爲是否要以<table>結尾,"true"表示"是"。也可以看作表格結束。
6904
		#$conf["trStart"]="true";#爲是否要以<tr>開頭,"true"表示"是"。也可以看作新的一列開始。
6905
		#$conf["tdStart"]="true";#爲是否要以<td>開頭,"true"表示"是"。也可以看成列裏面的元素開始
6906
		#$conf["tdEnd"]="true";#爲是否要以</td>結尾,"true"表示"是"。也可以看成列裏面的元素結束
6907
		#$conf["trEnd"]="true";#爲是否要以</tr>結尾,"true"表示"是"。也可以看作該列結束。
6908
		#$conf["tableEnd"]="true";#爲是否要以</table>結尾,"true"表示"是"。也可以看作表格結束。
6909
 
6910
		#如果有設置 $conf["dataFormId"]
6911
		if(isset($conf["dataFormId"])){
6912
 
6913
			#設置 data-id 屬性
6914
			$conf["dataFormId"]=$conf["dataFormId"];
6915
 
6916
			}#if end
6917
 
6918
		#備註:
6919
		#$_SERVER["PHP_SELF"]為php檔案自己
6920
		#參考資料來源:
6921
		#http://stackoverflow.com/questions/833032/submit-is-not-a-function-in-javascript => form的id重複會導致"document.testForm.submit()"的javaScript語法出錯。
6922
		#http://stackoverflow.com/questions/14622124/all-of-commands-for-submit-in-onchange-select-not-work => documents.forms.formName.submit() 才會將正確的表單送出。
6923
		#http://stackoverflow.com/questions/368813/html-form-readonly-select-tag-input => 禁止改變選項,且也不會傳送該名稱表單
6924
		#tableStart & tableEnd 要補上
6925
		$inputSelect=form::inputSelect($conf);
6926
 
6927
		#如果建立失敗
6928
		if($inputSelect["content"]==="false"){
6929
 
6930
			#設置執行失敗
6931
			$result["status"]="false";
6932
 
6933
			#設置錯誤訊息
6934
			$result["error"]=$inputSelect;
6935
 
6936
			#回傳結果
6937
			return $result;
6938
 
6939
			}#if end
6940
 
6941
		#將$conf["name"]進行處理,避免js錯誤
6942
		#函式說明:
6943
		#處理字串避免網頁出錯
6944
		#回傳結果:
6945
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
6946
		#$result["function"],當前執行的函數.
6947
		#$result["content"],爲處理好的字串.
6948
		#$result["error"],錯誤訊息陣列.
6949
		#必填參數:
6950
		$conf["stringProcess::correctCharacter"]["stringIn"]=$conf["name"];#爲要處理的字串
6951
		#可省略的參數:
6952
		$conf["stringProcess::correctCharacter"]["selectedCharacter"]=array("<",">","=","//","'","$","%","&","|","/*","*","#","\"","-");#爲被選擇要處理的字串/字元,須爲陣列值。
6953
			#若不設定則預設爲要將這些字串作替換 ("<",">","=","//","'","$","%","&","|","/*","*","#","\"").
6954
			#特殊字元,「\n」代表換行,「\t」代表tab鍵的間隔
6955
		#$conf["changeTo"]=array();#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
6956
		$correctCharacter=stringProcess::correctCharacter($conf["stringProcess::correctCharacter"]);
6957
		unset($conf["stringProcess::correctCharacter"]);
6958
 
6959
		#如果處理失敗
6960
		if($correctCharacter["status"]==="false"){
6961
 
6962
			#設置執行失敗
6963
			$result["status"]="false";
6964
 
6965
			#設置錯誤訊息
6966
			$result["error"]=$correctCharacter;
6967
 
6968
			#回傳結果
6969
			return $result;
6970
 
6971
			}#if end
6972
 
6973
		#比對名稱是否符合規則
6974
		if($conf["name"]!==$correctCharacter["content"]){
6975
 
6976
			#設置執行失敗
6977
			$result["status"]="false";
6978
 
6979
			#設置錯誤訊息
6980
			$result["error"]=$correctCharacter;
6981
 
6982
			#設置額外錯誤訊息
6983
			$result["error"][]=$conf["name"]." 不是合法的參數";
6984
 
6985
			#回傳結果
6986
			return $result;
6987
 
6988
			}#if end
6989
 
6990
		#另存表單的名稱
6991
		$name=$conf["name"];
6992
 
6993
		#設置用js傳送表單的動作
6994
		$sendForm=
6995
		"
6996
			return false;
6997
		";
6998
		if(isset($conf["independentForm"])){
6999
			$independentForm=$conf["independentForm"];
7000
			if($independentForm==="true"){
7001
				if(isset($conf["formName"]) && isset($conf["formAction"])){
7002
					$sendForm=
7003
						"
7004
						document.forms.".$conf["formName"].".submit();
7005
						";
7006
					}#if end
7007
				}#if end
7008
			}#if end
7009
		unset($conf);
7010
 
7011
		#如果建立失敗
7012
		if($inputSelect["status"]==="false"){
7013
 
7014
			#設置執行失敗
7015
			$result["status"]="false";
7016
 
7017
			#設置錯誤訊息
7018
			$result["error"]=$inputSelect;
7019
 
7020
			#回傳結果
7021
			return $result;
7022
 
7023
			}#if end
7024
 
7025
		#取得下拉式選單的語法
7026
		$result["content"]=$inputSelect["content"];
7027
 
7028
		#建立 scrollingList() 用的js
7029
		#函式說明:
7030
		#將要執行的script語法透過該函式執行(會在程式外層用<script></script>包起來).
7031
		#回傳結果:
7032
		#$result["status"],執行是否正常,"true"為正常,"false"為不正常.
7033
		#$result["error"],錯誤訊息陣列
7034
		#$result["function"],當前執行的函數名稱
7035
		#$result["content"],要執行的javaScript語法
7036
		#必填參數:
7037
		#$conf["script"],字串,要執行的javaScript語法.
7038
		$conf["javaScript::toScript"]["script"]=
7039
		"
7040
		//取得下拉式選單元素
7041
		var ".$name."=document.getElementById('".$name."');
7042
 
7043
		//將下拉式選單綁定'mousedown'事件,
7044
		var scrollingListMousedownEvent = ".$name.".addEventListener('mousedown',function(event){
7045
 
7046
			//debug
7047
			console.log('mousedown event start');
7048
 
7049
			//取消預設按下滑鼠的效果
7050
			event.preventDefault();
7051
 
7052
			//停止擴散事件
7053
			event.stopPropagation();
7054
 
7055
			//debug
7056
			console.log('mousedown event end');
7057
 
7058
			});
7059
 
7060
		//將下拉式選單綁定'mouseup'事件,
7061
		var scrollingListMouseupEvent = ".$name.".addEventListener('mouseup',function(event){
7062
 
7063
			//debug
7064
			console.log('mouseup event start');
7065
 
7066
			//取消預設滑鼠放開的效果
7067
			event.preventDefault();
7068
 
7069
			//停止擴散事件
7070
			event.stopPropagation();
7071
 
7072
			//debug
7073
			console.log('mouseup event end');
7074
 
7075
			});
7076
 
7077
		//將下拉式選單綁定'ontouchstart'事件,
7078
		var scrollingListTouchStartEvent = ".$name.".addEventListener('ontouchstart',function(event){
7079
 
7080
			//debug
7081
			console.log('ontouch event start');
7082
 
7083
			//取消預設觸碰的效果
7084
			event.preventDefault();
7085
 
7086
			//停止擴散事件
7087
			event.stopPropagation();
7088
 
7089
			//debug
7090
			console.log('ontouch event end');
7091
 
7092
			});
7093
 
7094
		//將下拉式選單綁定'ontouchend'事件,
7095
		var scrollingListTouchEndEvent = ".$name.".addEventListener('ontouchend',function(event){
7096
 
7097
			//debug
7098
			console.log('ontouch event start');
7099
 
7100
			//取消預設觸碰的效果
7101
			event.preventDefault();
7102
 
7103
			//停止擴散事件
7104
			event.stopPropagation();
7105
 
7106
			//debug
7107
			console.log('ontouch event end');
7108
 
7109
			});
7110
 
7111
		//將下拉式選單綁定'click'事件,觸發時要執行物件__qbpwcf_scrollingList的函數
7112
		var scrollingListClickEvent = ".$name.".addEventListener('click',function(event){
7113
 
7114
			//debug
7115
			console.log(event);
7116
 
7117
			//取消預設點擊的效果
7118
			event.preventDefault();
7119
 
7120
			//取得下拉式選單內容
7121
			var inputSelect=event.target;
7122
 
7123
			//debug
7124
			//console.log(inputSelect);
7125
 
7126
			//讓下拉式選單趕緊隱藏
7127
			inputSelect.style.opacity='0';
7128
 
7129
			//取得選項的數目
7130
			var opLen=inputSelect.options.length;
7131
 
7132
			//debug
7133
			//console.log(opLen);
7134
 
7135
			//新增覆蓋全螢幕的div
7136
			var root=document.createElement('div');
7137
 
7138
			//設置最外層div的id
7139
			root.setAttribute('id','scrollingListRootDiv');
7140
 
7141
			//設置最外層div的樣式
7142
			root.setAttribute('class','__qbpwcf_scrollingListRootDiv');
7143
 
7144
			//新增為了將不足divForMiddle可見高度的選項們置中的div
7145
			var divForMiddle=document.createElement('div');
7146
 
7147
			//設置為了上下置中的div樣式
7148
			divForMiddle.setAttribute('class','__qbpwcf_scrollingListOutterDiv');
7149
 
7150
			//初始化記錄選擇的選項index
7151
			var selectedOptionIndex=-1;
7152
 
7153
			//針對每個選項
7154
			for(var i=0;i< opLen;i++){
7155
 
7156
				//debug
7157
				//console.log(i);
7158
 
7159
				//debug
7160
				//console.log(inputSelect.options[i].value);
7161
 
7162
				//取得選項實際數值
7163
				var opVal=inputSelect.options[i].value;
7164
 
7165
				//debug
7166
				//console.log(inputSelect.options[i].innerHTML);
7167
 
7168
				//取得選項顯示名稱
7169
				var opShow=inputSelect.options[i].innerHTML;
7170
 
7171
				//debug
7172
				//console.log(opVal+'=>'+opShow);
7173
 
7174
				//建立選項的div
7175
				var opDiv=document.createElement('div');
7176
 
7177
				//設置選項div的class
7178
				opDiv.setAttribute('class','__qbpwcf_inputSelect __qbpwcf_inputSelect_hover');
7179
 
7180
				//設置選項div的數值內容
7181
				opDiv.setAttribute('data-val',opVal);
7182
 
7183
				//設置選項div的編號(從0開始)
7184
				opDiv.setAttribute('data-no',i);
7185
 
7186
				//若該選項有 'selected' 屬性
7187
				if(inputSelect.options[i].attributes['selected']!==undefined){
7188
 
7189
					//debug
7190
					//console.log('第'+opDiv.attributes['data-no'].value+'個選項為現有選擇的項目');
7191
 
7192
					//標記該選項為原先所選擇的項目
7193
					opDiv.setAttribute('data-selected','true');
7194
 
7195
					//記錄原先所選擇的項目的index
7196
					var selectedOptionIndex=parseInt(opDiv.attributes['data-no'].value);
7197
 
7198
					}//if end
7199
 
7200
				//建立選項名稱文字節點
7201
				var textnode = document.createTextNode(opShow);
7202
 
7203
				//將文字放進選項的div
7204
				opDiv.appendChild(textnode);
7205
 
7206
				//將選項放進為了上下左右置中的div
7207
				divForMiddle.appendChild(opDiv);
7208
 
7209
				}//for end
7210
 
7211
			//新增為了上下左右置中的div
7212
			var divForCenterMiddle=document.createElement('div');
7213
 
7214
			//設置為了內部元素都上下左右置中的div樣式
7215
			//divForCenterMiddle.setAttribute('style','background-color:white;position:fixed;top:15%;left:15%;height:70%;width:70%;overflow-y:auto;border:1px solid black;');
7216
			divForCenterMiddle.setAttribute('class','__qbpwcf_scrollingListInnerDiv');
7217
 
7218
			//將上下置中的選項們放進可以上下左右置中的div
7219
			divForCenterMiddle.appendChild(divForMiddle);
7220
 
7221
			//將選項放進最外層的div
7222
			root.appendChild(divForCenterMiddle);
7223
 
7224
			//將整個div放到body裡面
7225
			document.body.appendChild(root);
7226
 
7227
			//調整滾軸表單的置中效果
7228
			scrollingListMiddleFunction();
7229
 
7230
			//取得所有選項
7231
			var allOptions=document.getElementsByClassName('__qbpwcf_inputSelect_hover');
7232
 
7233
			//debug
7234
			//console.log(allOptions);
7235
 
7236
			//移動滾軸讓原本選擇的選項盡量置中
7237
 
7238
			//原先選擇的項目索引
7239
			//console.log(selectedOptionIndex);
7240
 
7241
			//opLen 選項的數目
7242
			//console.log(opLen);
7243
 
7244
			//取得選單的滾軸上端位置
7245
			//var scrollingListScrollTop=document.getElementById('scrollingListRootDiv').children[0].scrollTop;
7246
 
7247
			//debug
7248
			//console.log(scrollingListScrollTop);
7249
 
7250
			//取得選單的滾軸上端位置最大值
7251
			var scrollingListScrollTopMax=document.getElementById('scrollingListRootDiv').children[0].scrollTopMax;
7252
 
7253
			//debug
7254
			//console.log(scrollingListScrollTopMax);
7255
 
7256
			//取得選單的可見高度
7257
			//var scrollingListViewHeight=document.getElementById('scrollingListRootDiv').children[0].clientHeight;
7258
 
7259
			//debug
7260
			//console.log(scrollingListViewHeight);
7261
 
7262
			//取得選單含滾軸的總高度
7263
			//var scrollingListScrollHeight=document.getElementById('scrollingListRootDiv').children[0].scrollHeight;
7264
 
7265
			//debug
7266
			//console.log(scrollingListScrollHeight);
7267
 
7268
			//debug
7269
			//console.log(selectedOptionIndex);
7270
 
7271
			//如果有滾軸
7272
			if(scrollingListScrollTopMax!==0){
7273
 
7274
				//如果是第一個選項
7275
				if(selectedOptionIndex===0){
7276
 
7277
					//滾軸拉到最上面
7278
					document.getElementById('scrollingListRootDiv').children[0].scrollTop=0;
7279
 
7280
					//debug
7281
					//console.log('scrollingListScrollTop=0');
7282
 
7283
					}//if end
7284
 
7285
				//如果之前選擇的選項索引剛好等於 opLen/2
7286
				else if(((selectedOptionIndex+1)===(opLen/2))){
7287
 
7288
					//debug
7289
					//console.log('之前選擇的選項索引剛好等於一半');
7290
 
7291
					//取得新的滾軸高度
7292
					var newScrollTop=scrollingListScrollTopMax/2;
7293
 
7294
					//設置滾軸的上端位置
7295
					document.getElementById('scrollingListRootDiv').children[0].scrollTop=newScrollTop;
7296
 
7297
					//debug
7298
					//console.log('scrollingListScrollTop='+newScrollTop.toString());
7299
 
7300
					}//if end
7301
 
7302
				//如果之前選擇的選項索引小於半
7303
				else if((selectedOptionIndex+1)<(opLen/2)){
7304
 
7305
					//debug
7306
					//console.log('之前選擇的選項索引未過半,加幾個'+(selectedOptionIndex+1).toString());
7307
 
7308
					//取得新的滾軸高度
7309
					var newScrollTop=scrollingListScrollTopMax/opLen*selectedOptionIndex+1;
7310
 
7311
					//設置滾軸的上端位置
7312
					document.getElementById('scrollingListRootDiv').children[0].scrollTop=newScrollTop;
7313
 
7314
					//debug
7315
					//console.log('scrollingListScrollTop='+newScrollTop.toString());
7316
 
7317
					}//if end
7318
 
7319
				//如果之前選擇的選項索引過半
7320
				else if((selectedOptionIndex+1)>(opLen/2)){
7321
 
7322
					//debug
7323
					//console.log('之前選擇的選項索引過半,減幾個'+(opLen-selectedOptionIndex-1).toString());
7324
 
7325
					//取得新的滾軸高度
7326
					var newScrollTop=scrollingListScrollTopMax-scrollingListScrollTopMax/opLen*(opLen-selectedOptionIndex-1);
7327
 
7328
					//設置滾軸的上端位置
7329
					document.getElementById('scrollingListRootDiv').children[0].scrollTop=newScrollTop;
7330
 
7331
					//debug
7332
					//console.log('scrollingListScrollTop='+newScrollTop.toString());
7333
 
7334
					}//if end
7335
 
7336
				//如果是最後一個選項
7337
				else if(selectedOptionIndex===opLen){
7338
 
7339
					//如果是最後一個選項
7340
					document.getElementById('scrollingListRootDiv').children[0].scrollTop=scrollingListScrollTopMax;
7341
 
7342
					//debug
7343
					//console.log('scrollingListScrollTop='+scrollingListScrollTopMax);
7344
 
7345
					}//if end
7346
 
7347
				//不應該跑到的地方
7348
				else{
7349
 
7350
					//debug
7351
					console.log('error occur!');
7352
 
7353
					}//else end
7354
 
7355
				}//if end
7356
 
7357
			//針對每個選項
7358
			for(var i=0;i<allOptions.length;i++){
7359
 
7360
				//綁定所有選項的 'click' 事件
7361
				allOptions[i].addEventListener('click',function(event){
7362
 
7363
					//debug
7364
					//console.log(event);
7365
 
7366
					//取得點擊到的選項
7367
					var clickedOption=event.target;
7368
 
7369
					//debug
7370
					//console.log(clickedOption);
7371
 
7372
					//取得點擊到的選項數值
7373
					var clickedValue=clickedOption.attributes['data-val'].value;
7374
 
7375
					//debug
7376
					//console.log(clickedValue);
7377
 
7378
					//取得點擊到的選項編號
7379
					var clickedNo=clickedOption.attributes['data-no'].value;
7380
 
7381
					//debug
7382
					//console.log(clickedNo);
7383
 
7384
					//取得點擊到的選項名稱
7385
					var clickedName=clickedOption.innerHTML;
7386
 
7387
					//debug
7388
					//console.log(clickedName);
7389
 
7390
					//修改下拉式選單選則的數值
7391
 
7392
					//針對每個下拉式選單實際的選項
7393
					for(var j=0;j<allOptions.length;j++){
7394
 
7395
						//移除 selected 屬性
7396
						inputSelect.options[j].removeAttribute('selected');
7397
 
7398
						}//for end
7399
 
7400
					//debug
7401
					//console.log('設置 inputSelect.options['+clickedNo+'] 的 selected 屬性');
7402
 
7403
					//設置點選的選項的 selected 屬性
7404
					inputSelect.options[clickedNo].setAttribute('selected','');
7405
 
7406
					//取得要移除 scrolling list 的 div
7407
					var divToDel=document.getElementById('scrollingListRootDiv');
7408
 
7409
					//debug
7410
					//console.log(divTodel);
7411
 
7412
					//移除 scrolling list div
7413
					divToDel.remove();
7414
 
7415
					//復原下拉式選單
7416
					inputSelect.style.opacity='unset';
7417
 
7418
					".$valNotSend."
7419
 
7420
					//馬上傳送表單
7421
					sendForm();
7422
 
7423
					});//function end
7424
 
7425
				}//for end
7426
 
7427
				//建立 close icon
7428
				closeIcon();
7429
 
7430
			});
7431
 
7432
			//停止擴散事件
7433
			event.stopPropagation();
7434
		";
7435
		#可省略參數:
7436
		#$conf["onReady"],字串,是否要在網頁載入完再執行,"false"為不等載入完就先執行,預設為"true"要等載入完再執行.
7437
		#$conf["onReady"]="true";
7438
		#$conf["globalJs"],字串陣列,為要放入<script>標籤的js全域變數.
7439
		$conf["javaScript::toScript"]["globalJs"][]=
7440
		"
7441
		//取得下拉式選單元素
7442
		var ".$name."=document.getElementById('".$name."');
7443
		";
7444
		#$conf["jsFunciton"],字串陣列,為要放入<script>標籤的js函數.
7445
		$conf["javaScript::toScript"]["jsFunciton"][]=
7446
		"
7447
			//馬上傳送表單
7448
			function sendForm(){
7449
 
7450
				".$sendForm."
7451
 
7452
				}//function sendForm end
7453
 
7454
			//關閉 list 的按鈕與事件
7455
			function closeIcon(){
7456
 
7457
				//建立 close icon
7458
				var closeIcon = document.createElement('img');
7459
 
7460
				//設置 close icon 的樣式
7461
				closeIcon.style['position']='fixed';
7462
				closeIcon.style['top']='15%';
7463
				closeIcon.style['left']='85%';
7464
				closeIcon.style['width']='5%';
7465
				closeIcon.style['min-width']='30px';
7466
				closeIcon.style['max-width']='50px';
7467
				closeIcon.style['cursor']='pointer';
7468
 
7469
				//設置 close icon img 的屬性
7470
				closeIcon.src='".$closeIcon."';
7471
 
7472
				//設置 close icon img 的id
7473
				closeIcon.setAttribute('id','qbpwcfScrollingListCloseIcon');
7474
 
7475
				//取得 scrollingList 的 root div
7476
				var slrd=document.getElementById('scrollingListRootDiv');
7477
 
7478
				//將 close icon outer div 放到 scrollingList 的 root div 裡面
7479
				slrd.appendChild(closeIcon);
7480
 
7481
				//取得 close icon img
7482
				var closeIcon=document.getElementById('qbpwcfScrollingListCloseIcon');
7483
 
7484
				//新增 close icon img 的點擊事件
7485
				closeIcon.addEventListener('click',function(){
7486
 
7487
					//取得要移除 scrolling list 的 div
7488
					var divToDel=document.getElementById('scrollingListRootDiv');
7489
 
7490
					//debug
7491
					//console.log(divTodel);
7492
 
7493
					//移除 scrolling list div
7494
					divToDel.remove();
7495
 
7496
					//復原下拉式選單
7497
					".$name.".style.opacity='unset';
7498
 
7499
					});
7500
 
7501
				}//function closeIcon end
7502
		";
7503
		#參考資料:
7504
		#http://stackoverflow.com/questions/9899372/pure-javascript-equivalent-to-jquerys-ready-how-to-call-a-function-when-the
7505
		$toScript=javaScript::toScript($conf["javaScript::toScript"]);
7506
		unset($conf["javaScript::toScript"]);
7507
 
7508
		#如果建立js失敗
7509
		if($toScript["status"]==="false"){
7510
 
7511
			#設置執行失敗
7512
			$result["status"]="false";
7513
 
7514
			#設置錯誤訊息
7515
			$result["error"]=$toScript;
7516
 
7517
			#回傳結果
7518
			return $result;
7519
 
7520
			}#if end
7521
 
7522
		#串接scrollingList用的js
7523
		$result["content"]=$result["content"].$toScript["content"];
7524
 
7525
		#設置執行正常
7526
		$result["status"]="true";
7527
 
7528
		#回傳結果
7529
		return $result;
7530
 
7531
		}#function scrollingList end
7532
 
7533
	/*
7534
	#函式說明:
7535
	#建立滾軸式表單取代傳統下拉式選單,選項會用全螢幕的div區塊呈現.
7536
	#回傳結果:
7537
	#$result["status"],執行是否正常,"true"代表正常,"false"代表失敗.
7538
	#$result["error"],錯誤訊息陣列.
7539
	#$result["content"],語法內容.
7540
	#$result["function"],設置當前執行的函式
7541
	#必填參數:
7542
	#$conf["name"],字串,爲該下拉式選單的元素的id.
7543
	$conf["name"]="";
7544
	#$conf["sendValue"],陣列值,爲每個選項的實際傳送的數值,e.g. $sendValue = array("a","b","c","d","e");
7545
	$conf["sendValue"]=array();
7546
	#可省略參數:
7547
	#$conf["outputValue"],字串陣列,爲每個選項的實際顯示的數值, e.g. $outputValue = array("p","o","i","t","e");,如果沒有設定,則其值同$conf["sendValue"]。
7548
	#$conf["outputValue"]=array();
7549
	#$conf["defaultValue"],字串,為預設選取那個選項,須爲$conf["sendValue"]其中的一個值。
7550
	#$conf["defaultValue"]="";
7551
	#$conf["class"],字串,爲要套用的class樣式,預設為 "__qbpwcf_inputSelect".
7552
	#$conf["class"]="";
7553
	#$conf["readOnly"],字串,內容是否唯獨,預設為"false",不唯獨,"true"為唯獨.
7554
	#$conf["readOnly"]="true";
7555
	#$conf["comment"],字串,輸入方框上面要放哪些註解文字,亦即用label來呈現,同時指定"for"屬性的數值為當前"input"標籤的id,意即參數"name"的內容.
7556
	#$conf["comment"]="";
7557
	#$conf["formAction"],字串,爲該下拉式表單要傳送到的位置.
7558
	#$conf["formAction"]="";
7559
	#$conf["independentForm"],字串,是否該下拉式選單就是一個完整的表單,"true"代表是,"false"代表不是,預設為"true".
7560
	#$conf["independentForm"]="false";
7561
	#$conf["hiddenVar"],字串陣列,隱藏的變數名稱陣列.
7562
	#$conf["hiddenVar"]=array("");
7563
	#$conf["hiddanVarValue"],字串陣列,隱藏變數的數值內容.
7564
	#$conf["hiddenVarValue"]=array("");
7565
	#$conf["closeIcon"],字串,關閉滾軸選單的按鈕圖示,預設為"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpvc2I9Imh0dHA6Ly93d3cub3BlbnN3YXRjaGJvb2sub3JnL3VyaS8yMDA5L29zYiIKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgd2lkdGg9IjEwNS43ODE3Mm1tIgogICBoZWlnaHQ9IjEwNS4zNDM0NG1tIgogICB2aWV3Qm94PSIwIDAgMTA1Ljc4MTcyIDEwNS4zNDM0NCIKICAgdmVyc2lvbj0iMS4xIgogICBpZD0ic3ZnOCIKICAgaW5rc2NhcGU6dmVyc2lvbj0iMC45MitkZXZlbCB1bmtub3duIgogICBzb2RpcG9kaTpkb2NuYW1lPSJjbG9zZUljb24uc3ZnIj4KICA8ZGVmcwogICAgIGlkPSJkZWZzMiI+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDQzMTUiCiAgICAgICBvc2I6cGFpbnQ9InNvbGlkIj4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzAwMDAwMDtzdG9wLW9wYWNpdHk6MTsiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgaWQ9InN0b3A0MzEzIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxmaWx0ZXIKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHN0eWxlPSJjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM6c1JHQiIKICAgICAgIGlkPSJmaWx0ZXI0MzkxIgogICAgICAgeD0iLTAuMDY4OTc3MTAzIgogICAgICAgd2lkdGg9IjEuMTM3OTU0MiIKICAgICAgIHk9Ii0wLjA3NTI5OTk5MyIKICAgICAgIGhlaWdodD0iMS4xNTA2Ij4KICAgICAgPGZlR2F1c3NpYW5CbHVyCiAgICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgICAgc3RkRGV2aWF0aW9uPSIxLjAwNjI1NDMiCiAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjQzOTMiIC8+CiAgICA8L2ZpbHRlcj4KICAgIDxmaWx0ZXIKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHN0eWxlPSJjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM6c1JHQiIKICAgICAgIGlkPSJmaWx0ZXI0NDM4IgogICAgICAgeD0iLTAuMDIyNjIyOTA0IgogICAgICAgd2lkdGg9IjEuMDQ1MjQ1OCIKICAgICAgIHk9Ii0wLjAyNTU1NTYxNCIKICAgICAgIGhlaWdodD0iMS4wNTExMTEyIj4KICAgICAgPGZlR2F1c3NpYW5CbHVyCiAgICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgICAgc3RkRGV2aWF0aW9uPSIwLjIyMTcwNjAxIgogICAgICAgICBpZD0iZmVHYXVzc2lhbkJsdXI0NDQwIiAvPgogICAgPC9maWx0ZXI+CiAgICA8ZmlsdGVyCiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICBzdHlsZT0iY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzOnNSR0IiCiAgICAgICBpZD0iZmlsdGVyNDQ0NiIKICAgICAgIHg9Ii0wLjAyMzIzMjg0NyIKICAgICAgIHdpZHRoPSIxLjA0NjQ2NTgiCiAgICAgICB5PSItMC4wMjQ4MTk1NDUiCiAgICAgICBoZWlnaHQ9IjEuMDQ5NjM5MSI+CiAgICAgIDxmZUdhdXNzaWFuQmx1cgogICAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICAgIHN0ZERldmlhdGlvbj0iMC4yMjIwOTQyOCIKICAgICAgICAgaWQ9ImZlR2F1c3NpYW5CbHVyNDQ0OCIgLz4KICAgIDwvZmlsdGVyPgogIDwvZGVmcz4KICA8c29kaXBvZGk6bmFtZWR2aWV3CiAgICAgaWQ9ImJhc2UiCiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIgogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgogICAgIGJvcmRlcm9wYWNpdHk9IjEuMCIKICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMC4wIgogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCiAgICAgaW5rc2NhcGU6em9vbT0iMS40IgogICAgIGlua3NjYXBlOmN4PSIxMzAuNTY4NjgiCiAgICAgaW5rc2NhcGU6Y3k9IjIwMS4zNDg0NSIKICAgICBpbmtzY2FwZTpkb2N1bWVudC11bml0cz0ibW0iCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0iZzQ0ODgiCiAgICAgaW5rc2NhcGU6ZG9jdW1lbnQtcm90YXRpb249IjAiCiAgICAgc2hvd2dyaWQ9ImZhbHNlIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTYwMCIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSI4MzYiCiAgICAgaW5rc2NhcGU6d2luZG93LXg9IjAiCiAgICAgaW5rc2NhcGU6d2luZG93LXk9IjI3IgogICAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjEiIC8+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhNSI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgICA8ZGM6dGl0bGUgLz4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGcKICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSIKICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIgogICAgIGlkPSJsYXllcjEiCiAgICAgc3R5bGU9ImRpc3BsYXk6aW5saW5lIgogICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKC01MC4wNTQwMzQsLTg5LjA0MzUyMikiPgogICAgPGcKICAgICAgIGlkPSJnNDQ4OCIKICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDIuNjU1MDQ0MywwLDAsMi44NTQ2OTA3LC0xMTAuOTk1MTgsLTMyNi45MjY1MikiPgogICAgICA8ZWxsaXBzZQogICAgICAgICByeT0iMTYuMDM1OTI3IgogICAgICAgICByeD0iMTcuNTA1ODg0IgogICAgICAgICBjeT0iMTY0LjE2NTUxIgogICAgICAgICBjeD0iODAuNTc4NzIiCiAgICAgICAgIGlkPSJwYXRoMzQ3NCIKICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MC4zO2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MC4yNjQ5OTk5OTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxO2ZpbHRlcjp1cmwoI2ZpbHRlcjQzOTEpO2ltYWdlLXJlbmRlcmluZzphdXRvIiAvPgogICAgICA8cmVjdAogICAgICAgICB0cmFuc2Zvcm09InJvdGF0ZSgtNDIuODA4OTU1KSIKICAgICAgICAgcnk9IjAiCiAgICAgICAgIHk9IjE3NC41NTY0OSIKICAgICAgICAgeD0iLTY3LjM5ODc1OCIKICAgICAgICAgaGVpZ2h0PSIyLjE1MjIwNjQiCiAgICAgICAgIHdpZHRoPSIyOS4yNzk2NDgiCiAgICAgICAgIGlkPSJyZWN0NDQxMyIKICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOiNmZmZmMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjA7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MTtmaWx0ZXI6dXJsKCNmaWx0ZXI0NDQ2KSIgLz4KICAgICAgPHJlY3QKICAgICAgICAgdHJhbnNmb3JtPSJyb3RhdGUoLTEzOS4wMzQ0MikiCiAgICAgICAgIHJ5PSIwIgogICAgICAgICB5PSItNzMuMDUwOTQ5IgogICAgICAgICB4PSItMTgyLjk2MjUyIgogICAgICAgICBoZWlnaHQ9IjIuMTUyMjA2NCIKICAgICAgICAgd2lkdGg9IjI5LjI3OTY0OCIKICAgICAgICAgaWQ9InJlY3Q0NDEzLTMiCiAgICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDojZmZmZjAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDowO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjE7ZmlsdGVyOnVybCgjZmlsdGVyNDQzOCkiIC8+CiAgICA8L2c+CiAgPC9nPgo8L3N2Zz4K".
7566
	#$conf["closeIcon"]="";
7567
	#$conf["valNotSend"],字串,如果選擇的選項數值為何,就不傳送表單.
7568
	#$conf["valNotSend"]="";
7569
	#$conf["newLineOption"],字串,"true"代表要建立換行的div選單元素,"false"代表要建立不換行的 span 元素,與設為"false".
7570
	#$conf["newLineOption"]="false";
7571
	#$conf["dataFormId"],字串,提供用於識別哪一張表單的data屬性名稱.
7572
	#$conf["dataFormId"]="";
7573
	#參考資料:
7574
	#無.
7575
	#備註:
7576
	#無.
7577
	*/
7578
	public static function fakeScrollingList(&$conf){
7579
 
7580
		#初始化要回傳的結果
7581
		$result=array();
7582
 
7583
		#取得當前執行的函數名稱
7584
		$result["function"]=__FUNCTION__;
7585
 
7586
		#如果沒有參數
7587
		if(func_num_args()==0){
7588
 
7589
			#設置執行失敗
7590
			$result["status"]="false";
7591
 
7592
			#設置執行錯誤訊息
7593
			$result["error"]="函數".$result["function"]."需要參數";
7594
 
7595
			#回傳結果
7596
			return $result;
7597
 
7598
			}#if end
7599
 
7600
		#取得參數
7601
		$result["argu"]=$conf;
7602
 
7603
		#如果 $conf 不為陣列
7604
		if(gettype($conf)!=="array"){
7605
 
7606
			#設置執行失敗
7607
			$result["status"]="false";
7608
 
7609
			#設置執行錯誤訊息
7610
			$result["error"][]="\$conf變數須為陣列形態";
7611
 
7612
			#如果傳入的參數為 null
7613
			if($conf===null){
7614
 
7615
				#設置執行錯誤訊息
7616
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
7617
 
7618
				}#if end
7619
 
7620
			#回傳結果
7621
			return $result;
7622
 
7623
			}#if end
7624
 
7625
		#如果有設置close icon
7626
		if(isset($conf["closeIcon"])){
7627
 
7628
			#另存路徑
7629
			$closeIcon=$conf["closeIcon"];
7630
 
7631
			#卸除不被 form::inputSelect 接受的參數
7632
			unset($conf["closeIcon"]);
7633
 
7634
			}#if end
7635
 
7636
		#反之
7637
		else{
7638
 
7639
			#用預設的 close icon
7640
			$closeIcon="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpvc2I9Imh0dHA6Ly93d3cub3BlbnN3YXRjaGJvb2sub3JnL3VyaS8yMDA5L29zYiIKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgd2lkdGg9IjEwNS43ODE3Mm1tIgogICBoZWlnaHQ9IjEwNS4zNDM0NG1tIgogICB2aWV3Qm94PSIwIDAgMTA1Ljc4MTcyIDEwNS4zNDM0NCIKICAgdmVyc2lvbj0iMS4xIgogICBpZD0ic3ZnOCIKICAgaW5rc2NhcGU6dmVyc2lvbj0iMC45MitkZXZlbCB1bmtub3duIgogICBzb2RpcG9kaTpkb2NuYW1lPSJjbG9zZUljb24uc3ZnIj4KICA8ZGVmcwogICAgIGlkPSJkZWZzMiI+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDQzMTUiCiAgICAgICBvc2I6cGFpbnQ9InNvbGlkIj4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzAwMDAwMDtzdG9wLW9wYWNpdHk6MTsiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgaWQ9InN0b3A0MzEzIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxmaWx0ZXIKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHN0eWxlPSJjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM6c1JHQiIKICAgICAgIGlkPSJmaWx0ZXI0MzkxIgogICAgICAgeD0iLTAuMDY4OTc3MTAzIgogICAgICAgd2lkdGg9IjEuMTM3OTU0MiIKICAgICAgIHk9Ii0wLjA3NTI5OTk5MyIKICAgICAgIGhlaWdodD0iMS4xNTA2Ij4KICAgICAgPGZlR2F1c3NpYW5CbHVyCiAgICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgICAgc3RkRGV2aWF0aW9uPSIxLjAwNjI1NDMiCiAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjQzOTMiIC8+CiAgICA8L2ZpbHRlcj4KICAgIDxmaWx0ZXIKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHN0eWxlPSJjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM6c1JHQiIKICAgICAgIGlkPSJmaWx0ZXI0NDM4IgogICAgICAgeD0iLTAuMDIyNjIyOTA0IgogICAgICAgd2lkdGg9IjEuMDQ1MjQ1OCIKICAgICAgIHk9Ii0wLjAyNTU1NTYxNCIKICAgICAgIGhlaWdodD0iMS4wNTExMTEyIj4KICAgICAgPGZlR2F1c3NpYW5CbHVyCiAgICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgICAgc3RkRGV2aWF0aW9uPSIwLjIyMTcwNjAxIgogICAgICAgICBpZD0iZmVHYXVzc2lhbkJsdXI0NDQwIiAvPgogICAgPC9maWx0ZXI+CiAgICA8ZmlsdGVyCiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICBzdHlsZT0iY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzOnNSR0IiCiAgICAgICBpZD0iZmlsdGVyNDQ0NiIKICAgICAgIHg9Ii0wLjAyMzIzMjg0NyIKICAgICAgIHdpZHRoPSIxLjA0NjQ2NTgiCiAgICAgICB5PSItMC4wMjQ4MTk1NDUiCiAgICAgICBoZWlnaHQ9IjEuMDQ5NjM5MSI+CiAgICAgIDxmZUdhdXNzaWFuQmx1cgogICAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICAgIHN0ZERldmlhdGlvbj0iMC4yMjIwOTQyOCIKICAgICAgICAgaWQ9ImZlR2F1c3NpYW5CbHVyNDQ0OCIgLz4KICAgIDwvZmlsdGVyPgogIDwvZGVmcz4KICA8c29kaXBvZGk6bmFtZWR2aWV3CiAgICAgaWQ9ImJhc2UiCiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIgogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgogICAgIGJvcmRlcm9wYWNpdHk9IjEuMCIKICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMC4wIgogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCiAgICAgaW5rc2NhcGU6em9vbT0iMS40IgogICAgIGlua3NjYXBlOmN4PSIxMzAuNTY4NjgiCiAgICAgaW5rc2NhcGU6Y3k9IjIwMS4zNDg0NSIKICAgICBpbmtzY2FwZTpkb2N1bWVudC11bml0cz0ibW0iCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0iZzQ0ODgiCiAgICAgaW5rc2NhcGU6ZG9jdW1lbnQtcm90YXRpb249IjAiCiAgICAgc2hvd2dyaWQ9ImZhbHNlIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTYwMCIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSI4MzYiCiAgICAgaW5rc2NhcGU6d2luZG93LXg9IjAiCiAgICAgaW5rc2NhcGU6d2luZG93LXk9IjI3IgogICAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjEiIC8+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhNSI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgICA8ZGM6dGl0bGUgLz4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGcKICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSIKICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIgogICAgIGlkPSJsYXllcjEiCiAgICAgc3R5bGU9ImRpc3BsYXk6aW5saW5lIgogICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKC01MC4wNTQwMzQsLTg5LjA0MzUyMikiPgogICAgPGcKICAgICAgIGlkPSJnNDQ4OCIKICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDIuNjU1MDQ0MywwLDAsMi44NTQ2OTA3LC0xMTAuOTk1MTgsLTMyNi45MjY1MikiPgogICAgICA8ZWxsaXBzZQogICAgICAgICByeT0iMTYuMDM1OTI3IgogICAgICAgICByeD0iMTcuNTA1ODg0IgogICAgICAgICBjeT0iMTY0LjE2NTUxIgogICAgICAgICBjeD0iODAuNTc4NzIiCiAgICAgICAgIGlkPSJwYXRoMzQ3NCIKICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MC4zO2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MC4yNjQ5OTk5OTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxO2ZpbHRlcjp1cmwoI2ZpbHRlcjQzOTEpO2ltYWdlLXJlbmRlcmluZzphdXRvIiAvPgogICAgICA8cmVjdAogICAgICAgICB0cmFuc2Zvcm09InJvdGF0ZSgtNDIuODA4OTU1KSIKICAgICAgICAgcnk9IjAiCiAgICAgICAgIHk9IjE3NC41NTY0OSIKICAgICAgICAgeD0iLTY3LjM5ODc1OCIKICAgICAgICAgaGVpZ2h0PSIyLjE1MjIwNjQiCiAgICAgICAgIHdpZHRoPSIyOS4yNzk2NDgiCiAgICAgICAgIGlkPSJyZWN0NDQxMyIKICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOiNmZmZmMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjA7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MTtmaWx0ZXI6dXJsKCNmaWx0ZXI0NDQ2KSIgLz4KICAgICAgPHJlY3QKICAgICAgICAgdHJhbnNmb3JtPSJyb3RhdGUoLTEzOS4wMzQ0MikiCiAgICAgICAgIHJ5PSIwIgogICAgICAgICB5PSItNzMuMDUwOTQ5IgogICAgICAgICB4PSItMTgyLjk2MjUyIgogICAgICAgICBoZWlnaHQ9IjIuMTUyMjA2NCIKICAgICAgICAgd2lkdGg9IjI5LjI3OTY0OCIKICAgICAgICAgaWQ9InJlY3Q0NDEzLTMiCiAgICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDojZmZmZjAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDowO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjE7ZmlsdGVyOnVybCgjZmlsdGVyNDQzOCkiIC8+CiAgICA8L2c+CiAgPC9nPgo8L3N2Zz4K";
7641
 
7642
			}#else end
7643
 
7644
		#如果有設置 $conf["valNotSend"]
7645
		if(isset($conf["valNotSend"])){
7646
 
7647
			#設置不傳送表單的js語法
7648
			$valNotSend=
7649
			"
7650
				//如果表單的數值為 ".$conf["valNotSend"]."
7651
				if(clickedValue==='".$conf["valNotSend"]."'){
7652
 
7653
					//結束動作
7654
					return true;
7655
 
7656
					}//if end
7657
			";
7658
 
7659
			}#if end
7660
 
7661
		#反之
7662
		else{
7663
 
7664
			#設為空值
7665
			$valNotSend="";
7666
 
7667
			}#else end
7668
 
7669
		#卸除不被 form::inputSelect 接受的參數
7670
		unset($conf["valNotSend"]);
7671
 
7672
		#檢查參數
7673
		#函式說明:
7674
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
7675
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
7676
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
7677
		#$result["function"],當前執行的函式名稱.
7678
		#$result["argu"],設置給予的參數.
7679
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
7680
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
7681
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
7682
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
7683
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
7684
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
7685
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
7686
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
7687
		#必填寫的參數:
7688
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
7689
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
7690
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
7691
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
7692
		#可以省略的參數:
7693
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
7694
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("name","sendValue");
7695
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
7696
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","array");
7697
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
7698
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
7699
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
7700
		$conf["variableCheck::checkArguments"]["canNotBeEmpty"]=array("name","sendValue");
7701
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
7702
		#$conf["canBeEmpty"]=array();
7703
		#$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
7704
		$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("outputValue","defaultValue","newLineOption","formAction","hiddenVar","hiddenVarValue");
7705
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
7706
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("outputValue","defaultValue","newLineOption","formAction","hiddenVar","hiddenVarValue","comment","class","readOnly","dataFormId");
7707
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
7708
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("array","string","string","string","array","array","string","string","string","string");
7709
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
7710
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("\$conf[\"sendValue\"]",null,"false",null,null,null,null,"__qbpwcf_inputSelect","false",null);
7711
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
7712
		#$conf["disallowAllSkipableVarIsEmpty"]="";
7713
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
7714
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
7715
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
7716
		$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array("hiddenVar","hiddenVarValue");
7717
		#參考資料:
7718
		#array_keys=>http://php.net/manual/en/function.array-keys.php
7719
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
7720
		unset($conf["variableCheck::checkArguments"]);
7721
 
7722
		#如果檢查失敗
7723
		if($checkArguments["status"]==="false"){
7724
 
7725
			#設置執行失敗
7726
			$result["status"]="false";
7727
 
7728
			#設置執行錯誤訊息
7729
			$result["error"]=$checkArguments;
7730
 
7731
			#回傳結果
7732
			return $result;
7733
 
7734
			}#if end
7735
 
7736
		#如果檢查失敗
7737
		if($checkArguments["passed"]==="false"){
7738
 
7739
			#設置執行失敗
7740
			$result["status"]="false";
7741
 
7742
			#設置執行錯誤訊息
7743
			$result["error"]=$checkArguments;
7744
 
7745
			#回傳結果
7746
			return $result;
7747
 
7748
			}#if end
7749
 
7750
		#設置傳送表單的參數
7751
		$sendForm="";
7752
 
7753
		#如果有設置 $conf["formAction"]
7754
		if(isset($conf["formAction"])){
7755
 
7756
			#預設隱藏的變數為""
7757
			$hiddenVar="";
7758
 
7759
			#如果有設置隱藏的參數 hiddenVar 與 hiddenVarValue
7760
			if(isset($conf["hiddenVar"]) && isset($conf["hiddenVarValue"])){
7761
 
7762
				#加密要傳送的隱藏表單資料
7763
				$hiddenVar=base64_encode(json_encode(array("hiddenVar"=>$conf["hiddenVar"],"hiddenVarValue"=>$conf["hiddenVarValue"])));
7764
 
7765
				}#if end
7766
 
7767
			#設置傳送表單的參數
7768
			$sendForm=
7769
			"
7770
			//馬上傳送表單
7771
			window.form_fakeScrollingList_sendForm_".$conf["name"]."('".$conf["name"]."',oriOptionsInfo.sendValue[clickedNo],'".$conf["formAction"]."','".$hiddenVar."');
7772
			";
7773
 
7774
			}#if end
7775
 
7776
		#儲存選項呈現的元素變數
7777
		$optionOutEle="";
7778
 
7779
		#如果沒有指定預設的選項
7780
		if(!isset($conf["defaultValue"])){
7781
 
7782
			#預設為第一個選項的內容
7783
			$conf["defaultValue"]=$conf["sendValue"][0];
7784
 
7785
			}#if end
7786
 
7787
		#取得預設選項對應的顯示內容
7788
		#函式說明:
7789
		#檢查一個數值是否與陣列裏面的元素相同,找到一個相符合的元素後就會停止搜尋.
7790
		#回傳的結果:
7791
		#$result["status"],"true"表示執行正確,"false"表示執行錯誤.
7792
		#$result["founded"],"true"表示有找到相同的,"false"表示沒有找到相同的.
7793
		#$result["error"],錯誤訊息
7794
		#$result["function"],當前執行的函數名稱
7795
		#$result["argv"],使用的參數
7796
		#$result["equalVarName"],相等的變數名稱或key.
7797
		#$result["equalVarValue"],相等的變數數值內容.
7798
		#必填參數:
7799
		$conf["search::getEqualVar"]["conditionElement"]=$conf["defaultValue"];#條件元素,要等於的元素內容.
7800
		$conf["search::getEqualVar"]["compareElements"]=$conf["sendValue"];#要比對的陣列變數內容.
7801
		$getEqualVar=search::getEqualVar($conf["search::getEqualVar"]);
7802
		unset($conf["search::getEqualVar"]);
7803
 
7804
		#如果執失敗
7805
		if($getEqualVar["status"]==="false"){
7806
 
7807
			#設置執行失敗
7808
			$result["status"]="false";
7809
 
7810
			#設置執行錯誤訊息
7811
			$result["error"]=$getEqualVar;
7812
 
7813
			#回傳結果
7814
			return $result;
7815
 
7816
			}#if end
7817
 
7818
		#如果沒有對應的選項
7819
		if($getEqualVar["founded"]==="false"){
7820
 
7821
			#設置執行失敗
7822
			$result["status"]="false";
7823
 
7824
			#設置執行錯誤訊息
7825
			$result["error"]=$getEqualVar;
7826
 
7827
			#回傳結果
7828
			return $result;
7829
 
7830
			}#if end
7831
 
7832
		#取得預設選項的顯示內容
7833
		$defaultShowVal=$conf["outputValue"][$getEqualVar["equalVarName"]];
7834
 
7835
		#fake scrolling list data var name
7836
		$fakeScrollingListDataVar="qbpwcf-fakeScrollingList-options";
7837
 
7838
		#判斷 $conf["newLineOption"] 參數的內容
7839
		switch($conf["newLineOption"]){
7840
 
7841
			#如果要建立 div 選項
7842
			case "true":
7843
 
7844
				#函式說明:
7845
				#<div>區塊,裡面可以指定css的class樣式,可以指定提示文字.
7846
				#$result["status"],字串,執行否正常,"true"代表正常,"false"代表不正常.
7847
				#$result["functin"],字串,當前函數的名稱.
7848
				#$result["error"],陣列,錯訊訊息.
7849
				#$result["content"],字串,含有<div>標籤的內容.
7850
				#必填參數:
7851
				#$conf["contentArray"],字串陣列,要放入的內容陣列.
7852
				$conf["css::divSection"]["contentArray"]=array($defaultShowVal);
7853
				#可省略參數
7854
				#$conf["id"],字串,div區塊的id.
7855
				$conf["css::divSection"]["id"]=$conf["name"];
7856
				#$conf["styleAttr"],字串陣列,給div區段要套用的style樣式屬性.
7857
				#$conf["styleAttr"]=array();
7858
				#$conf["styleVal"],字串陣列,給div區段要套用的style樣式數值.
7859
				#$conf["styleVal"]=array();
7860
				#$conf["class"],字串,div區段要套用的css樣式.
7861
				$conf["css::divSection"]["class"]=$conf["class"];
7862
				#$conf["title"],陣列,滑鼠移到上面時要顯示的內容,每個元素代表一列內容.
7863
				#$conf["title"]=array();
7864
				#$conf["oneScreenSize"],字串,div區塊是否要占一個螢幕的大小,預設為"false"不設定,"true"為設定成一個螢幕的大小.
7865
				#$conf["oneScreenSize"]="false";
7866
				#$conf["textAlignCenter"],字串,div區塊是否要置中,預設為$conf["oneScreenSize"]的值,"false"為不置中,"true"代表要置中.
7867
				#$conf["textAlignCenter"]="";
7868
				#$conf["css::divSection"["data"],字串陣列,每個要設置的屬性data內容,例如array("option1"=>"A","option2"=>"B"),預設不使用.
7869
				$conf["css::divSection"]["data"]=array($fakeScrollingListDataVar=>base64_encode(json_encode(array("outputValue"=>$conf["outputValue"],"sendValue"=>$conf["sendValue"],"defaultValue"=>$conf["defaultValue"],"defaultShowVal"=>$defaultShowVal))));
7870
 
7871
				#如果有設置 $conf["dataFormId"]
7872
				if(isset($conf["dataFormId"])){
7873
 
7874
					#設置 data-form-id 屬性
7875
					$conf["css::divSection"]["data"]["form-id"]=$conf["dataFormId"];
7876
 
7877
					}#if end
7878
 
7879
				$divSection=css::divSection($conf["css::divSection"]);
7880
				unset($conf["css::divSection"]);
7881
 
7882
				#如果建立div區段失敗
7883
				if($divSection["status"]==="false"){
7884
 
7885
					#設置執行失敗
7886
					$result["status"]="false";
7887
 
7888
					#設置執行錯誤訊息
7889
					$result["error"]=$divSection;
7890
 
7891
					#回傳結果
7892
					return $result;
7893
 
7894
					}#if end
7895
 
7896
				#取得div的內容
7897
				$optionOutEle=$optionOutEle.$divSection["content"];
7898
 
7899
				#跳出switch
7900
				break;
7901
 
7902
			#如果要建立 span 選項
7903
			case "false":
7904
 
7905
				#函式說明:
7906
				#<span>區塊,裡面可以指定css的class樣式,可以指定提示文字,若要使用移動的css樣式,請改用divSection函數.
7907
				#$result["status"],字串,執行否正常,"true"代表正常,"false"代表不正常.
7908
				#$result["functin"],字串,當前函數的名稱.
7909
				#$result["error"],陣列,錯訊訊息.
7910
				#$result["content"],字串,含有<span>標籤的內容.
7911
				#必填參數:
7912
				#$conf["contentArray"],字串陣列,要放入的內容陣列.
7913
				$conf["css::spanSection"]["contentArray"]=array($defaultShowVal);
7914
				#可省略參數
7915
				#$conf["id"],字串,span區塊的id.
7916
				$conf["css::spanSection"]["id"]=$conf["name"];
7917
				#$conf["class"],字串,span區段要套用的css樣式.
7918
				$conf["css::spanSection"]["class"]=$conf["class"];
7919
				#$conf["title"],陣列,滑鼠移到上面時要顯示的內容,每個元素代表一列內容
7920
				#$conf["title"]=array();
7921
				#$conf["css::spanSection"]["data"],字串陣列,每個data屬性名稱為數值內容,例如array("a"=>"A","b"=>"B")
7922
				$conf["css::spanSection"]["data"]=array($fakeScrollingListDataVar=>base64_encode(json_encode(array("outputValue"=>$conf["outputValue"],"sendValue"=>$conf["sendValue"],"defaultValue"=>$conf["defaultValue"],"defaultShowVal"=>$defaultShowVal))));
7923
 
7924
				#如果有設置 $conf["dataFormId"]
7925
				if(isset($conf["dataFormId"])){
7926
 
7927
					#設置 data-form-id 屬性
7928
					$conf["css::spanSection"]["data"]["form-id"]=$conf["dataFormId"];
7929
 
7930
					}#if end
7931
 
7932
				$spanSection=css::spanSection($conf["css::spanSection"]);
7933
				unset($conf["css::spanSection"]);
7934
 
7935
				#如果建立span區段失敗
7936
				if($spanSection["status"]==="false"){
7937
 
7938
					#設置執行失敗
7939
					$result["status"]="false";
7940
 
7941
					#設置執行錯誤訊息
7942
					$result["error"]=$spanSection;
7943
 
7944
					#回傳結果
7945
					return $result;
7946
 
7947
					}#if end
7948
 
7949
				#取得span的內容
7950
				$optionOutEle=$optionOutEle.$spanSection["content"];
7951
 
7952
				#跳出switch
7953
				break;
7954
 
7955
			#其他數值的內容
7956
			default :
7957
 
7958
				#設置不換行
7959
				$conf["newLineOption"]="false";
7960
 
7961
				#跳出switch
7962
				break;
7963
 
7964
			}#switch end
7965
 
7966
			#如果有設置提示文字
7967
			if(isset($conf["comment"])){
7968
 
7969
				#設置提示文字
7970
				#函式說明:
7971
				#<div>區塊,裡面可以指定css的class樣式,可以指定提示文字.
7972
				#$result["status"],字串,執行否正常,"true"代表正常,"false"代表不正常.
7973
				#$result["functin"],字串,當前函數的名稱.
7974
				#$result["error"],陣列,錯訊訊息.
7975
				#$result["content"],字串,含有<div>標籤的內容.
7976
				#必填參數:
7977
				#$conf["contentArray"],字串陣列,要放入的內容陣列.
7978
				$conf["css::divSection"]["contentArray"]=array($conf["comment"]);
7979
				#可省略參數
7980
				#$conf["id"],字串,div區塊的id.
7981
				$conf["css::divSection"]["id"]=$conf["name"]."_comment";
7982
				#$conf["styleAttr"],字串陣列,給div區段要套用的style樣式屬性.
7983
				#$conf["styleAttr"]=array();
7984
				#$conf["styleVal"],字串陣列,給div區段要套用的style樣式數值.
7985
				#$conf["styleVal"]=array();
7986
				#$conf["class"],字串,div區段要套用的css樣式.
7987
				#$conf["class"]="";
7988
				#$conf["title"],陣列,滑鼠移到上面時要顯示的內容,每個元素代表一列內容.
7989
				#$conf["title"]=array();
7990
				#$conf["oneScreenSize"],字串,div區塊是否要占一個螢幕的大小,預設為"false"不設定,"true"為設定成一個螢幕的大小.
7991
				#$conf["oneScreenSize"]="false";
7992
				#$conf["textAlignCenter"],字串,div區塊是否要置中,預設為$conf["oneScreenSize"]的值,"false"為不置中,"true"代表要置中.
7993
				#$conf["textAlignCenter"]="";
7994
				#$conf["css::divSection"["data"],字串陣列,每個要設置的屬性data內容,例如array("option1"=>"A","option2"=>"B"),預設不使用.
7995
				#$conf["css::divSection"]["data"]=array($fakeScrollingListDataVar=>base64_encode(json_encode(array("outputValue"=>$conf["outputValue"],"sendValue"=>$conf["sendValue"],"defaultValue"=>$conf["defaultValue"],"defaultShowVal"=>$defaultShowVal))));
7996
				$divSection=css::divSection($conf["css::divSection"]);
7997
				unset($conf["css::divSection"]);
7998
 
7999
				#如果建立div區段失敗
8000
				if($divSection["status"]==="false"){
8001
 
8002
					#設置執行失敗
8003
					$result["status"]="false";
8004
 
8005
					#設置執行錯誤訊息
8006
					$result["error"]=$divSection;
8007
 
8008
					#回傳結果
8009
					return $result;
8010
 
8011
					}#if end
8012
 
8013
				#取得div的內容
8014
				$optionOutEle=$divSection["content"].$optionOutEle;
8015
 
8016
				}#if end
8017
 
8018
			#設置語法內容
8019
			$result["content"]=&$optionOutEle;
8020
 
8021
			#取得表單的名稱
8022
			$name=$conf["name"];
8023
 
8024
			#如果 readOnly
8025
			if($conf["readOnly"]==="true"){
8026
 
8027
				#設置執行正常
8028
				$result["status"]="true";
8029
 
8030
				#回傳結果
8031
				return $result;				
8032
 
8033
				}#if end
8034
 
8035
			#函式說明:
8036
			#將要執行的script語法透過該函式執行(會在程式外層用<script></script>包起來).
8037
			#回傳結果:
8038
			#$result["status"],執行是否正常,"true"為正常,"false"為不正常.
8039
			#$result["error"],錯誤訊息陣列
8040
			#$result["function"],當前執行的函數名稱
8041
			#$result["content"],要執行的javaScript語法
8042
			#必填參數:
8043
			#$conf["script"],字串,要執行的javaScript語法.
8044
			$conf["javaScript::toScript"]["script"]="";
8045
			#可省略參數:
8046
			#$conf["onReady"],字串,是否要在網頁完全載入後再執行,"false"為不等載入完就先執行,預設為"true"要等載入完再執行.
8047
			#$conf["onReady"]="true";
8048
			#$conf["globalJs"],字串陣列,為要放入<script>標籤的js全域變數.
8049
			$conf["javaScript::toScript"]["globalJs"][]=
8050
			"
8051
			var ".$name."=document.getElementById('".$name."');
8052
 
8053
			//將下拉式選單綁定'click'事件,觸發時要執行物件__qbpwcf_scrollingList的函數
8054
			".$name.".addEventListener('click',function(event){
8055
 
8056
				//debug
8057
				console.log(event);
8058
 
8059
				//取消預設點擊的效果
8060
				event.preventDefault();
8061
 
8062
				//取得下拉式選單內容
8063
				var inputSelect=event.target;
8064
 
8065
				//debug
8066
				//console.log(inputSelect);
8067
 
8068
				//讓下拉式選單趕緊隱藏
8069
				inputSelect.style.opacity='0';
8070
 
8071
				//解析選項的資訊
8072
				var optionsInfo=JSON.parse(atob(inputSelect.dataset.qbpwcfFakescrollinglistOptions));
8073
 
8074
				//取得選項的數目
8075
				var opLen=optionsInfo.sendValue.length;
8076
 
8077
				//新增覆蓋全螢幕的div
8078
				var root=document.createElement('div');
8079
 
8080
				//設置最外層div的id
8081
				root.setAttribute('id','scrollingListRootDiv');
8082
 
8083
				//設置最外層div的樣式
8084
				root.setAttribute('class','__qbpwcf_scrollingListRootDiv');
8085
 
8086
				//新增為了將不足divForMiddle可見高度的選項們置中的div
8087
				var divForMiddle=document.createElement('div');
8088
 
8089
				//設置為了上下置中的div樣式
8090
				divForMiddle.setAttribute('class','__qbpwcf_scrollingListOutterDiv');
8091
 
8092
				//初始化記錄選擇的選項index
8093
				var selectedOptionIndex=-1;
8094
 
8095
				//針對每個選項
8096
				for(var i=0;i<opLen;i++){
8097
 
8098
					//debug
8099
					//console.log(i);
8100
 
8101
					//debug
8102
					//console.log(optionsInfo.sendValue[i]);
8103
 
8104
					//取得選項實際數值
8105
					var opVal=optionsInfo.sendValue[i];
8106
 
8107
					//debug
8108
					//console.log(optionsInfo.showValue[i]);
8109
 
8110
					//取得選項顯示名稱
8111
					//var opShow=optionsInfo.sendValue[i];
8112
					var opShow=optionsInfo.outputValue[i];
8113
 
8114
					//debug
8115
					//console.log(opVal+'=>'+opShow);
8116
 
8117
					//建立選項的div
8118
					var opDiv=document.createElement('div');
8119
 
8120
					//讓選項上下置中
8121
					opDiv.style.paddingTop='15px';
8122
 
8123
					//設置選項div的class
8124
					opDiv.setAttribute('class','__qbpwcf_inputSelect __qbpwcf_inputSelect_hover');
8125
 
8126
					//設置選項div的數值內容
8127
					opDiv.setAttribute('data-val',opVal);
8128
 
8129
					//設置選項div的編號(從0開始)
8130
					opDiv.setAttribute('data-no',i);
8131
 
8132
					//設置裡面的文字要換行的時候改用...表示
8133
					opDiv.style.whiteSpace='nowrap';
8134
					opDiv.style.width='100%';					
8135
					opDiv.style.overflow='hidden';
8136
					opDiv.style.textOverflow='ellipsis';
8137
 
8138
					//偶數欄位
8139
					if(i%2===0)
8140
					{
8141
						//設置選項div底色為藍色
8142
						opDiv.style.backgroundColor='CCCCFF';
8143
					}
8144
					//反之為奇數欄位
8145
					else
8146
					{
8147
						//設置選項div底色為紅色
8148
						opDiv.style.backgroundColor='FFCCCC';
8149
					}
8150
 
8151
					//解析選項的資訊
8152
					var oriOptionsInfo=JSON.parse(atob(inputSelect.dataset.qbpwcfFakescrollinglistOptions));
8153
 
8154
					//若該選項為當前選擇的項目
8155
					if(oriOptionsInfo.sendValue[i]===inputSelect.innerText){
8156
 
8157
						//debug
8158
						//console.log('第'+opDiv.attributes['data-no'].value+'個選項為現有選擇的項目');
8159
 
8160
						//標記該選項為原先所選擇的項目
8161
						opDiv.setAttribute('data-selected','true');
8162
 
8163
						//記錄原先所選擇的項目的index
8164
						var selectedOptionIndex=parseInt(opDiv.attributes['data-no'].value);
8165
 
8166
						}//if end
8167
 
8168
					//建立選項名稱文字節點
8169
					var textnode = document.createTextNode(opShow);
8170
 
8171
					//將文字放進選項的div
8172
					opDiv.appendChild(textnode);
8173
 
8174
					//將選項放進為了上下左右置中的div
8175
					divForMiddle.appendChild(opDiv);
8176
 
8177
					}//for end
8178
 
8179
				//新增為了上下左右置中的div
8180
				var divForCenterMiddle=document.createElement('div');
8181
 
8182
				//設置為了內部元素都上下左右置中的div樣式
8183
				divForCenterMiddle.setAttribute('class','__qbpwcf_scrollingListInnerDiv');
8184
 
8185
				//將上下置中的選項們放進可以上下左右置中的div
8186
				divForCenterMiddle.appendChild(divForMiddle);
8187
 
8188
				//將選項放進最外層的div
8189
				root.appendChild(divForCenterMiddle);
8190
 
8191
				//將整個div放到body裡面
8192
				document.body.appendChild(root);
8193
 
8194
				//調整滾軸表單的置中效果
8195
				scrollingListMiddleFunction();
8196
 
8197
				//取得所有選項
8198
				var allOptions=document.getElementsByClassName('__qbpwcf_inputSelect_hover');
8199
 
8200
				//debug
8201
				//console.log(allOptions);
8202
 
8203
				//移動滾軸讓原本選擇的選項盡量置中
8204
 
8205
				//原先選擇的項目索引
8206
				//console.log(selectedOptionIndex);
8207
 
8208
				//opLen 選項的數目
8209
				//console.log(opLen);
8210
 
8211
				//取得選單的滾軸上端位置
8212
				//var scrollingListScrollTop=document.getElementById('scrollingListRootDiv').children[0].scrollTop;
8213
 
8214
				//debug
8215
				//console.log(scrollingListScrollTop);
8216
 
8217
				//取得選單的滾軸上端位置最大值
8218
				var scrollingListScrollTopMax=document.getElementById('scrollingListRootDiv').children[0].scrollTopMax;
8219
 
8220
				//debug
8221
				//console.log(scrollingListScrollTopMax);
8222
 
8223
				//取得選單的可見高度
8224
				//var scrollingListViewHeight=document.getElementById('scrollingListRootDiv').children[0].clientHeight;
8225
 
8226
				//debug
8227
				//console.log(scrollingListViewHeight);
8228
 
8229
				//取得選單含滾軸的總高度
8230
				//var scrollingListScrollHeight=document.getElementById('scrollingListRootDiv').children[0].scrollHeight;
8231
 
8232
				//debug
8233
				//console.log(scrollingListScrollHeight);
8234
 
8235
				//debug
8236
				//console.log(selectedOptionIndex);
8237
 
8238
				//如果有滾軸
8239
				if(scrollingListScrollTopMax!==0){
8240
 
8241
					//如果是第一個選項
8242
					if(selectedOptionIndex===0){
8243
 
8244
						//滾軸拉到最上面
8245
						document.getElementById('scrollingListRootDiv').children[0].scrollTop=0;
8246
 
8247
						//debug
8248
						//console.log('scrollingListScrollTop=0');
8249
 
8250
						}//if end
8251
 
8252
					//如果之前選擇的選項索引剛好等於 opLen/2
8253
					else if(((selectedOptionIndex+1)===(opLen/2))){
8254
 
8255
						//debug
8256
						//console.log('之前選擇的選項索引剛好等於一半');
8257
 
8258
						//取得新的滾軸高度
8259
						var newScrollTop=scrollingListScrollTopMax/2;
8260
 
8261
						//設置滾軸的上端位置
8262
						document.getElementById('scrollingListRootDiv').children[0].scrollTop=newScrollTop;
8263
 
8264
						//debug
8265
						//console.log('scrollingListScrollTop='+newScrollTop.toString());
8266
 
8267
						}//if end
8268
 
8269
					//如果之前選擇的選項索引小於半
8270
					else if((selectedOptionIndex+1)<(opLen/2)){
8271
 
8272
						//debug
8273
						//console.log('之前選擇的選項索引未過半,加幾個'+(selectedOptionIndex+1).toString());
8274
 
8275
						//取得新的滾軸高度
8276
						var newScrollTop=scrollingListScrollTopMax/opLen*selectedOptionIndex+1;
8277
 
8278
						//設置滾軸的上端位置
8279
						document.getElementById('scrollingListRootDiv').children[0].scrollTop=newScrollTop;
8280
 
8281
						//debug
8282
						//console.log('scrollingListScrollTop='+newScrollTop.toString());
8283
 
8284
						}//if end
8285
 
8286
					//如果之前選擇的選項索引過半
8287
					else if((selectedOptionIndex+1)>(opLen/2)){
8288
 
8289
						//debug
8290
						//console.log('之前選擇的選項索引過半,減幾個'+(opLen-selectedOptionIndex-1).toString());
8291
 
8292
						//取得新的滾軸高度
8293
						var newScrollTop=scrollingListScrollTopMax-scrollingListScrollTopMax/opLen*(opLen-selectedOptionIndex-1);
8294
 
8295
						//設置滾軸的上端位置
8296
						document.getElementById('scrollingListRootDiv').children[0].scrollTop=newScrollTop;
8297
 
8298
						//debug
8299
						//console.log('scrollingListScrollTop='+newScrollTop.toString());
8300
 
8301
						}//if end
8302
 
8303
					//如果是最後一個選項
8304
					else if(selectedOptionIndex===opLen){
8305
 
8306
						//如果是最後一個選項
8307
						document.getElementById('scrollingListRootDiv').children[0].scrollTop=scrollingListScrollTopMax;
8308
 
8309
						//debug
8310
						//console.log('scrollingListScrollTop='+scrollingListScrollTopMax);
8311
 
8312
						}//if end
8313
 
8314
					//不應該跑到的地方
8315
					else{
8316
 
8317
						//debug
8318
						console.log('error occur!');
8319
 
8320
						}//else end
8321
 
8322
					}//if end
8323
 
8324
				//針對每個選項
8325
				for(var i=0;i<allOptions.length;i++){
8326
 
8327
					//綁定所有選項的 'click' 事件
8328
					allOptions[i].addEventListener('click',function(event){
8329
 
8330
						//debug
8331
						//console.log(event);
8332
 
8333
						//取得點擊到的選項
8334
						var clickedOption=event.target;
8335
 
8336
						//debug
8337
						//console.log(clickedOption);
8338
 
8339
						//取得點擊到的選項數值
8340
						var clickedValue=clickedOption.attributes['data-val'].value;
8341
 
8342
						//debug
8343
						//console.log(clickedValue);
8344
 
8345
						//取得點擊到的選項編號
8346
						var clickedNo=clickedOption.attributes['data-no'].value;
8347
 
8348
						//debug
8349
						//console.log(clickedNo);
8350
 
8351
						//取得點擊到的選項名稱
8352
						var clickedName=clickedOption.innerHTML;
8353
 
8354
						//debug
8355
						//console.log(clickedName);
8356
 
8357
						//解析選項的資訊
8358
						var oriOptionsInfo=JSON.parse(atob(inputSelect.dataset.qbpwcfFakescrollinglistOptions));
8359
 
8360
						//取得顯示元素
8361
						var ".$name."=document.getElementById('".$name."');
8362
 
8363
						//更新選取的選項數值顯示內容
8364
						".$name.".innerText=oriOptionsInfo.outputValue[clickedNo];
8365
 
8366
						//取消透明效果
8367
						".$name.".style.opacity='unset';
8368
 
8369
						//取得要移除 scrolling list 的 div
8370
						var divToDel=document.getElementById('scrollingListRootDiv');
8371
 
8372
						//debug
8373
						//console.log(divTodel);
8374
 
8375
						//移除 scrolling list div
8376
						divToDel.remove();
8377
 
8378
						//復原下拉式選單
8379
						inputSelect.style.opacity='unset';
8380
 
8381
						".$valNotSend."
8382
 
8383
						".$sendForm."
8384
 
8385
						});//function end
8386
 
8387
					}//for end
8388
 
8389
					//建立 close icon
8390
					window.form_fakeScrollingList_closeIcon_".$conf["name"]."(".$name.");
8391
				});
8392
			";
8393
			#$conf["jsFunciton"],字串陣列,為要放入<script>標籤的js函數.
8394
			$conf["javaScript::toScript"]["jsFunciton"][]=
8395
			"
8396
			//馬上傳送表單,key代表要傳送的元素名稱,val代表元素對應的數值內容,rev代表要傳送到哪個地方.
8397
			window.form_fakeScrollingList_sendForm_".$conf["name"]."=function(key,val,rev,hidvar){
8398
 
8399
				//debug
8400
				console.log('prepare send form');
8401
 
8402
				//new XMLHttpRequest
8403
				xmlhttp=new XMLHttpRequest();
8404
 
8405
				//set response type to html document
8406
				xmlhttp.responseType='document';
8407
 
8408
				//當運行狀態改變時
8409
				xmlhttp.onreadystatechange=function(){
8410
 
8411
					//如果狀態為4且response code為200
8412
					if(xmlhttp.readyState==4 && xmlhttp.status==200){
8413
 
8414
						//將回應進行處理
8415
						res=xmlhttp.response;
8416
 
8417
						//debug
8418
						console.log(res);
8419
						console.log('url:'+res.URL);
8420
						console.log('title:'+res.title);
8421
 
8422
						//將回應刷新到當前頁面
8423
 
8424
						//no use?
8425
						stateObj={};
8426
 
8427
						//取得新 title
8428
						title=res.title;
8429
 
8430
						//取得新 url
8431
						newUrl=res.URL;
8432
 
8433
						//更新網頁標題與網址
8434
						//參考資料:https://developer.mozilla.org/en-US/docs/Web/API/History_API
8435
						history.pushState(stateObj, title, newUrl);
8436
 
8437
						//開新文件
8438
						document.open('text/html',true);
8439
 
8440
						//寫入取得的完整回應
8441
						document.write(res.all[0].outerHTML);
8442
 
8443
						//結束輸出
8444
						document.close();
8445
 
8446
						}//if end
8447
 
8448
					}//function end
8449
 
8450
				//建立表單物件
8451
				var formData = new FormData();
8452
 
8453
				//新增表單的名稱與對應的數值
8454
				formData.append(key,val);
8455
 
8456
				//如果有隱藏的表單變數
8457
				if(hidvar!==''){
8458
 
8459
					//解析隱藏的表單變數
8460
					hidvar=JSON.parse(atob(hidvar));
8461
 
8462
					//另存隱藏變數的名稱
8463
					hiddenVar=hidvar.hiddenVar;
8464
 
8465
					//另存隱藏變數對應的數值內容
8466
					hiddenVarValue=hidvar.hiddenVarValue;
8467
 
8468
					//取得隱藏變數的數量
8469
					hiddenVarCount=hiddenVar.length;
8470
 
8471
					//針對每個隱藏的表單變數
8472
					for(i=0;i<hiddenVarCount;i++){
8473
 
8474
						//新增表單隱藏變數的名稱與對應的數值
8475
						formData.append(hiddenVar[i],hiddenVarValue[i]);
8476
 
8477
						}//for end
8478
 
8479
					}//if end
8480
 
8481
				//用 post 傳送到 rev
8482
				xmlhttp.open('POST',rev);
8483
 
8484
				//set ajax header
8485
				xmlhttp.setRequestHeader('X-Requested-With','XMLHttpRequest');
8486
 
8487
				//傳送數值
8488
				xmlhttp.send(formData);
8489
 
8490
				//debug
8491
				console.log('form sended');
8492
 
8493
				}//function sendForm end
8494
 
8495
			//關閉 list 的按鈕與事件
8496
			window.form_fakeScrollingList_closeIcon_".$conf["name"]."=function(sectionId){
8497
 
8498
				//debug
8499
				console.log(sectionId);
8500
 
8501
				//建立 close icon
8502
				var closeIcon = document.createElement('img');
8503
 
8504
				//取得顯示項目的元素id
8505
				closeIcon.sectionId=sectionId;
8506
 
8507
				//設置 close icon 的樣式
8508
				closeIcon.style['position']='fixed';
8509
				closeIcon.style['top']='15%';
8510
				closeIcon.style['left']='85%';
8511
				closeIcon.style['width']='5%';
8512
				closeIcon.style['min-width']='30px';
8513
				closeIcon.style['max-width']='50px';
8514
				closeIcon.style['cursor']='pointer';
8515
 
8516
				//設置 close icon img 的屬性
8517
				closeIcon.src='".$closeIcon."';
8518
 
8519
				//設置 close icon img 的id
8520
				closeIcon.setAttribute('id','qbpwcfScrollingListCloseIcon');
8521
 
8522
				//取得 scrollingList 的 root div
8523
				var slrd=document.getElementById('scrollingListRootDiv');
8524
 
8525
				//將 close icon outer div 放到 scrollingList 的 root div 裡面
8526
				slrd.appendChild(closeIcon);
8527
 
8528
				//取得 close icon img
8529
				var closeIcon=document.getElementById('qbpwcfScrollingListCloseIcon');
8530
 
8531
				//新增 close icon img 的點擊事件
8532
				closeIcon.addEventListener('click',function(){
8533
 
8534
					//取得要移除 scrolling list 的 div
8535
					var divToDel=document.getElementById('scrollingListRootDiv');
8536
 
8537
					//debug
8538
					//console.log(divTodel);
8539
 
8540
					//移除 scrolling list div
8541
					divToDel.remove();
8542
 
8543
					//debug
8544
					console.log(closeIcon.sectionId);
8545
 
8546
					//取得顯示元素,移除透明效果,顯示數值
8547
					closeIcon.sectionId.style.opacity='unset';
8548
 
8549
					});
8550
 
8551
				}//function closeIcon end
8552
			";
8553
			#參考資料:
8554
			#http://stackoverflow.com/questions/9899372/pure-javascript-equivalent-to-jquerys-ready-how-to-call-a-function-when-the
8555
			$toScript=javaScript::toScript($conf["javaScript::toScript"]);
8556
			unset($conf["javaScript::toScript"]);
8557
 
8558
			#如果建立 script 失敗
8559
			if($toScript["status"]==="false"){
8560
 
8561
				#設置執行失敗
8562
				$result["status"]="false";
8563
 
8564
				#設置執行錯誤訊息
8565
				$result["error"]=$toScript;
8566
 
8567
				#回傳結果
8568
				return $result;
8569
 
8570
				}#if end
8571
 
8572
			#傳接 js
8573
			$result["content"]=$result["content"].$toScript["content"];
8574
 
8575
			#設置執行正常
8576
			$result["status"]="true";
8577
 
8578
			#回傳結果
8579
			return $result;
8580
 
8581
		}#funciton fakeScrollingList end
8582
 
8583
	/*
8584
	#函式說明:
8585
	#建立含有分群功能的下拉式選單
8586
	#回傳結果:
8587
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
8588
	#$result["error"],錯誤訊息陣列.
8589
	#$result["content"],語法.
8590
	#必填參數:
8591
	#$conf["option"][$group][$optionDisplayName]=$autualVal,二、三維字串陣列,代表$group群組的選項$optionDisplayName實際上傳送的內容為$autualVal;若為$conf["option"][$option]=$autualVal,則代表無群組的選項$option值為$autualVal.
8592
	$conf["option"][][]="";
8593
	#可省略參數:
8594
	#$conf["name"],字串,選單用於傳送的名稱,預設為"pullDownList[]".
8595
	#$conf["name"]="pullDownList[]";
8596
	#$conf["id"],字串,元素id,預設跟$conf["name"]一樣.
8597
	#$conf["id"]="pullDownList[]";
8598
	#$conf["default"],字串陣列,代表哪個群組的選項是預設要選取的,$conf["default"]=array("g1","v1")代表g1群組的v1選擇為預設值;$conf["default"]=array("o1")代表選項顯示為o1者為預設的選項.
8599
	#$conf["default"]=array($group,$optionDisplayName);
8600
	#$conf["class"],字串陣列,代表要使用哪些css的class.
8601
	#$conf["class"]=array();
8602
	#$conf["style"],二維字串陣列,代表要使用哪些css style,例如$conf["style"]["color"]="black",就代表使用"color"屬性,屬性值為"black".
8603
	#$conf["style"]["attr"]="";
8604
	#$conf["notSelectedText"],一維陣列字串,沒有選擇項目時要顯示的選項為何,預設為$conf["notSelectedText"]["請選擇"]="unSelected";則代表顯示"請選擇",值為"unSelected".
8605
	#$conf["notSelectedText"]["請選擇"]="unSelected"
8606
	#$conf["onChangeFunction"],字串,當下拉式選單的內容變動時,要執行哪個js函數與要帶的參數,或要做的js,預設為"return false;".
8607
	#$conf["onChangeFunction"]="return false;";
8608
	#參考資料:
8609
	#HTML <optgroup> Tag=>http://www.w3schools.com/Tags/tag_optgroup.asp
8610
	#備註:
8611
	#無.
8612
	*/
8613
    	public static function pullDownList(&$conf){
8614
 
8615
		#初始化要回傳的結果
8616
		$result=array();
8617
 
8618
		#取得當前執行的函數名稱
8619
		$result["function"]=__FUNCTION__;
8620
 
8621
		#如果沒有參數
8622
		if(func_num_args()==0){
8623
 
8624
			#設置執行失敗
8625
			$result["status"]="false";
8626
 
8627
			#設置執行錯誤訊息
8628
			$result["error"]="函數".$result["function"]."需要參數";
8629
 
8630
			#回傳結果
8631
			return $result;
8632
 
8633
			}#if end
8634
 
8635
		#取得參數
8636
		$result["argu"]=$conf;
8637
 
8638
		#如果 $conf 不為陣列
8639
		if(gettype($conf)!=="array"){
8640
 
8641
			#設置執行失敗
8642
			$result["status"]="false";
8643
 
8644
			#設置執行錯誤訊息
8645
			$result["error"][]="\$conf變數須為陣列形態";
8646
 
8647
			#如果傳入的參數為 null
8648
			if($conf===null){
8649
 
8650
				#設置執行錯誤訊息
8651
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
8652
 
8653
				}#if end
8654
 
8655
			#回傳結果
8656
			return $result;
8657
 
8658
			}#if end
8659
 
8660
		#檢查參數
8661
		#函式說明:
8662
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
8663
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
8664
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
8665
		#$result["function"],當前執行的函式名稱.
8666
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
8667
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
8668
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
8669
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
8670
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
8671
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
8672
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
8673
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
8674
		#必填參數:
8675
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
8676
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
8677
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
8678
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("option");
8679
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
8680
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("array");
8681
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
8682
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
8683
		#可省略參數:
8684
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
8685
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
8686
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
8687
		#$conf["canNotBeEmpty"]=array();
8688
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
8689
		#$conf["canBeEmpty"]=array();
8690
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
8691
		$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("name","id","default","class","style");
8692
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
8693
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("name","id","default","class","style","notSelectedText","onChangeFunction");
8694
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
8695
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string","array","array","array","array","string");
8696
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
8697
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("pullDownList[]","pullDownList[]",null,null,null,array("請選擇"=>"unSelected"),"return false;");
8698
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
8699
		#$conf["arrayCountEqualCheck"][]=array();
8700
		#參考資料:
8701
		#array_keys=>http://php.net/manual/en/function.array-keys.php
8702
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
8703
		unset($conf["variableCheck::checkArguments"]);
8704
 
8705
		#如果檢查參數失敗
8706
		if($checkArguments["status"]==="false"){
8707
 
8708
			#設置錯誤識別
8709
			$result["status"]="false";
8710
 
8711
			#設置錯誤訊息
8712
			$result["error"]=$checkArguments;
8713
 
8714
			#回傳結果
8715
			return $result;
8716
 
8717
			}#if end
8718
 
8719
		#如果檢查不通過
8720
		if($checkArguments["passed"]==="false"){
8721
 
8722
			#設置錯誤識別
8723
			$result["status"]="false";
8724
 
8725
			#設置錯誤訊息
8726
			$result["error"]=$checkArguments;
8727
 
8728
			#回傳結果
8729
			return $result;
8730
 
8731
			}#if end
8732
 
8733
		#檢查 $conf["option"] 是否為二維陣列
8734
		#針對$conf["option"]的每個元素
8735
		foreach($conf["option"] as $groups){
8736
 
8737
			#如果$arrays不為陣列形態
8738
			if(gettype($groups)!=="array" && gettype($groups)!=="string"){
8739
 
8740
				#設置錯誤識別
8741
				$result["status"]="false";
8742
 
8743
				#設置錯誤訊息
8744
				$result["error"][]="參數 option 須為一、二維字串陣列";
8745
 
8746
				#回傳結果
8747
				return $result;
8748
 
8749
				}#if end
8750
 
8751
			}#foreach end
8752
 
8753
		#初始化要套用 css style 屬性字串
8754
		$style="";
8755
 
8756
		#如果有設定 $conf["style"]
8757
		if(isset($conf["style"])){
8758
 
8759
			#初始化儲存style屬性的陣列
8760
			$styleAttr=array();
8761
 
8762
			#初始化儲存style屬性值的陣列
8763
			$styleVal=array();
8764
 
8765
			#$conf["style"] 有幾個元素就執行幾次
8766
			foreach($conf["style"] as $attr => $val){
8767
 
8768
				#如果屬性值不為字串
8769
				if(gettype($attr)!=="string" || gettype($val)!=="string"){
8770
 
8771
					#設置執行不正常
8772
					$result["status"]="false";
8773
 
8774
					#設置執行錯誤
8775
					$result["error"][]="參數style的元素key與value皆須為字串";
8776
 
8777
					#回傳結果
8778
					return $result;
8779
 
8780
					}#if end
8781
 
8782
				#取得屬性
8783
				$styleAttr[]=$attr;
8784
 
8785
				#取得屬性值
8786
				$styleVal[]=$val;
8787
 
8788
				}#foreach end
8789
 
8790
			#如果有屬性與值,且數量對應正確
8791
			if(count($styleAttr)>0 && count($styleVal)>0 && count($styleAttr)===count($styleVal)){
8792
 
8793
				#建立 css style 屬性字串
8794
				#函式說明:
8795
				#建立給與html標籤使用的style屬性字串.
8796
				#回傳結果:
8797
				#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
8798
				#$result["function"],當前執行的函數
8799
				#$result["error"],錯誤訊息陣列
8800
				#$result["content"],css設定內容
8801
				#必填參數:
8802
				$conf["css::styleStr"]["styleName"]=$styleAttr;#為屬性名稱,須為陣列值
8803
				$conf["css::styleStr"]["styleValue"]=$styleVal;#為屬性值,須為陣列值
8804
				$styleStr=css::styleStr($conf["css::styleStr"]);
8805
				unset($conf["css::styleStr"]);
8806
 
8807
				#如果建立style字串失敗
8808
				if($styleStr["status"]==="false"){
8809
 
8810
					#設置執行不正常
8811
					$result["status"]="false";
8812
 
8813
					#設置執行錯誤
8814
					$result["error"]=$styleStr;
8815
 
8816
					#回傳結果
8817
					return $result;
8818
 
8819
					}#if end
8820
 
8821
				#設置屬性字串
8822
				$style=$styleStr["content"];
8823
 
8824
				}#if end
8825
 
8826
			}#if end
8827
 
8828
		#初始化要套用的 css class 屬性字串
8829
		$class="";
8830
 
8831
		#如果有設定 $conf["class"]
8832
		if(isset($conf["class"])){
8833
 
8834
			#設定要套用的css類別
8835
			#函式說明:
8836
			#建立class屬性字串,亦即套用多個class樣式的設定字串.
8837
			#回傳結果:
8838
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
8839
			#$result["function"],當前執行的函數
8840
			#$result["error"],錯誤訊息陣列
8841
			#$result["content"],class屬性字串的內容
8842
			#必填參數:
8843
			#$conf["class"],字串陣列,要套用的類別樣式名稱.
8844
			$conf["css::classStr"]["class"]=$conf["class"];
8845
			$classStr=css::classStr($conf["css::classStr"]);
8846
			unset($conf["css::classStr"]);
8847
 
8848
			#如果建立套用css類別的屬性字串失敗
8849
			if($classStr["status"]==="false"){
8850
 
8851
				#設置錯誤識別
8852
				$result["status"]="false";
8853
 
8854
				#設置錯誤訊息
8855
				$result["error"]=$classStr;
8856
 
8857
				#回傳結果
8858
				return $result;
8859
 
8860
				}#if end
8861
 
8862
			#取得css類別屬性字串
8863
			$class=$classStr["content"];
8864
 
8865
			}#if end
8866
 
8867
		#設置當內容改變時要觸發的js
8868
		$onChangeJs="onChange=\"".$conf["onChangeFunction"]."\"";
8869
 
8870
		#初始化要回傳的語法
8871
		$result["content"]="<select name=\"".$conf["name"]."\" id=\"".$conf["id"]."\" ".$style." ".$class." ".$onChangeJs." >";
8872
 
8873
		#針對 $conf["notSelectedText"] 變數
8874
		foreach($conf["notSelectedText"] as $unSelText => $unSelVal){
8875
 
8876
			#設置未選擇的選項
8877
			$result["content"]=$result["content"]."<option value=\"".$unSelVal."\">".$unSelText."</option>";
8878
 
8879
			}#foreach end
8880
 
8881
		#針對每個 $conf["option"]
8882
		foreach($conf["option"] as $groupName => $options){
8883
 
8884
			#如果 $options 為陣列
8885
			if(gettype($options)==="array"){
8886
 
8887
				#則代表是群組選項
8888
 
8889
				#群組 $groupName 開始
8890
				$result["content"]=$result["content"]."<optgroup label=\"".$groupName."\">";
8891
 
8892
				#針對每個 $options
8893
				foreach($options as $optionName => $optionVal){
8894
 
8895
					#初始化預設選取的語法
8896
					$selected="";
8897
 
8898
					#如果有設置預設值
8899
					if(isset($conf["default"])){
8900
 
8901
						#如果存在群組選項
8902
						if(isset($conf["default"][1]) && isset($conf["default"][1])){
8903
 
8904
							#如果是預設的群組選項
8905
							if($groupName===$conf["default"][0] && $optionName===$conf["default"][1]){
8906
 
8907
								#設置選取的語法
8908
								$selected="selected";
8909
 
8910
								}#if end
8911
 
8912
							}#if end
8913
 
8914
						}#if end
8915
 
8916
					#選項 $optionName
8917
					$result["content"]=$result["content"]."<option value=\"".$optionVal."\" ".$selected." >$optionName</option>";
8918
 
8919
					}#foreache end
8920
 
8921
				#群組 $groupName 結束
8922
				$result["content"]=$result["content"]."</optgroup>";
8923
 
8924
				}#if end
8925
 
8926
			#反之如果是字串
8927
			else if(gettype($options)==="string"){
8928
 
8929
				#則代表無歸屬群組的選項
8930
				#初始化預設選取的語法
8931
				$selected="";
8932
 
8933
				#如果有設置預設值
8934
				if(isset($conf["default"])){
8935
 
8936
					#如果存在選項
8937
					if(isset($conf["default"][0])){
8938
 
8939
						#如果是預設的選項
8940
						if($groupName===$conf["default"][0]){
8941
 
8942
							#設置選取的語法
8943
							$selected="selected";
8944
 
8945
							}#if end
8946
 
8947
						}#if end
8948
 
8949
					}#if end
8950
 
8951
				#選項 $groupName 的值為 $options
8952
				$result["content"]=$result["content"]."<option value=\"".$options."\" ".$selected." >$groupName</option>";
8953
 
8954
				}#if end
8955
 
8956
			}#foreach end
8957
 
8958
		#下拉式選單結束
8959
		$result["content"]=$result["content"]."</select>";
8960
 
8961
		#設置執行正常
8962
		$result["status"]="true";
8963
 
8964
		#回傳結果
8965
		return $result;
8966
 
8967
		}#function pullDownList end
8968
 
8969
	/*
8970
	#函式說明:
8971
	#黑點式選單(單選)
8972
	#回傳結果:
8973
	#$result["status"],執行是否正常,"true"代表正常,"false"代表失敗.
8974
	#$result["error"],錯誤訊息陣列.
8975
	#$result["content"],語法內容.
8976
	#$result["function"],設置當前執行的函式
8977
	#必填參數:
8978
	$conf["name"]="";#爲黑點式選單的名稱
8979
	$conf["sendValue"]=array();#爲陣列值,爲每個選項的實際傳送的數值,e.g. $sendValue = array("a","b","c","d","e");
8980
	#可省略參數:
8981
	#$conf["class"]="__withoutBorder";#爲要套用的class樣式,"__qbpwcf_inputRadioWithoutBorder"爲沒有框線的樣式;__qbpwcf_inputRadioWithBorder爲有框線的樣式
8982
	#$conf["outputValue"]=array();#爲陣列值,爲每個選項的實際顯示的數值, e.g. $outputValue = array("p","o","i","t","e"); 預設爲跟$conf["sendValue"]一樣。
8983
	#$conf["defaultValue"]="";#爲預設的選項,爲實際傳送的數值之一。
8984
	#$conf["comment"],字串,下拉式表單的註解文字.
8985
	#$conf["comment"]="";
8986
	#$conf["disableHr"]="true";#如果設爲"true",則結尾不用<hr>來結束單選的範圍,預設為"false".
8987
	#$conf["jsActivitor"]="";#爲觸發js的條件,可以是"onChange"(已改變內容時)...,須搭配$conf["jsSubmitActionTarget"]參數。
8988
	#$conf["jsAction"]="";#爲該js是要做什麼,可以是"document.testForm.submit()"(傳送名爲testForm的表單內容)...,須搭配$conf["jsActivitor"]參數。
8989
	#$conf["trStart"]="true";#爲是否要以<tr>開頭,"true"表示"是",也可以看作新的一列開始,預設為"false".
8990
	#$conf["trClass"]="__withoutBorder";#<tr>要套用的css樣式,預設為"__withoutBorder",其爲沒有框線的樣式;__withBorder爲有框線的樣式
8991
	#$conf["tdStart"]="true";#爲是否要以<td>開頭,"true"表示"是",也可以看成列裏面的元素開始,預設為"false".
8992
	#$conf["tdClass"]="__withoutBorder";#<td>要套用的css樣式,預設為"__withoutBorder",其爲沒有框線的樣式;__withBorder爲有框線的樣式
8993
	#$conf["tdEnd"]="true";#爲是否要以</td>結尾,"true"表示"是",也可以看成列裏面的元素結束,預設為"false".
8994
	#$conf["trEnd"]="true";#爲是否要以</tr>結尾,"true"表示"是",也可以看作該列結束,預設為"false".
8995
	#$conf["brBetweenOption"]="true";#是否每個選項用<br>標籤隔開,預設為"true".
8996
	#參考資料:
8997
	#無.
8998
	#備註:
8999
	#無.
9000
	*/
9001
	public static function inputRadio($conf){
9002
 
9003
		#預設要回傳的數值
9004
		$result=array();
9005
 
9006
		#初始化要回傳的語法
9007
		$result["content"]="";
9008
 
9009
		#設置當前執行的函式
9010
		$result["function"]=__FUNCTION__;
9011
 
9012
		#如果 $conf 不為陣列
9013
		if(gettype($conf)!="array"){
9014
 
9015
			#設置執行失敗
9016
			$result["status"]="false";
9017
 
9018
			#設置執行錯誤訊息
9019
			$result["error"][]="\$conf變數須為陣列形態";
9020
 
9021
			#如果傳入的參數為 null
9022
			if($conf==null){
9023
 
9024
				#設置執行錯誤訊息
9025
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
9026
 
9027
				}#if end
9028
 
9029
			#回傳結果
9030
			return $result;
9031
 
9032
			}#if end
9033
 
9034
		#檢查參數
9035
		#函式說明:
9036
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
9037
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
9038
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
9039
		#$result["function"],當前執行的函式名稱.
9040
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
9041
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
9042
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
9043
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
9044
		#必填參數:
9045
		#$conf["form.checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
9046
		$conf["form.checkArguments"]["varInput"]=&$conf;
9047
		#$conf["form.checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
9048
		$conf["form.checkArguments"]["mustBeFilledVariableName"][]="name";
9049
		$conf["form.checkArguments"]["mustBeFilledVariableName"][]="sendValue";
9050
		#$conf["form.checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double");
9051
		$conf["form.checkArguments"]["mustBeFilledVariableType"][]="string";
9052
		$conf["form.checkArguments"]["mustBeFilledVariableType"][]="array";
9053
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
9054
		$conf["form.checkArguments"]["referenceVarKey"]="form.checkArguments";
9055
		#可省略參數:
9056
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"false"。
9057
		#$conf["canBeEmptyString"]="false";
9058
		#$conf["form.checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
9059
		$conf["form.checkArguments"]["skipableVariableName"][]="class";
9060
		$conf["form.checkArguments"]["skipableVariableName"][]="outputValue";
9061
		$conf["form.checkArguments"]["skipableVariableName"][]="comment";
9062
		$conf["form.checkArguments"]["skipableVariableName"][]="disableHr";
9063
		$conf["form.checkArguments"]["skipableVariableName"][]="jsActivitor";
9064
		$conf["form.checkArguments"]["skipableVariableName"][]="jsAction";
9065
		$conf["form.checkArguments"]["skipableVariableName"][]="trStart";
9066
		$conf["form.checkArguments"]["skipableVariableName"][]="trClass";
9067
		$conf["form.checkArguments"]["skipableVariableName"][]="tdStart";
9068
		$conf["form.checkArguments"]["skipableVariableName"][]="tdClass";
9069
		$conf["form.checkArguments"]["skipableVariableName"][]="tdEnd";
9070
		$conf["form.checkArguments"]["skipableVariableName"][]="trEnd";
9071
		$conf["form.checkArguments"]["skipableVariableName"][]="brBetweenOption";
9072
		$conf["form.checkArguments"]["skipableVariableName"][]="defaultValue";
9073
		#$conf["form.checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
9074
		$conf["form.checkArguments"]["skipableVariableType"][]="string";
9075
		$conf["form.checkArguments"]["skipableVariableType"][]="array";
9076
		$conf["form.checkArguments"]["skipableVariableType"][]="string";
9077
		$conf["form.checkArguments"]["skipableVariableType"][]="string";
9078
		$conf["form.checkArguments"]["skipableVariableType"][]="string";
9079
		$conf["form.checkArguments"]["skipableVariableType"][]="string";
9080
		$conf["form.checkArguments"]["skipableVariableType"][]="string";
9081
		$conf["form.checkArguments"]["skipableVariableType"][]="string";
9082
		$conf["form.checkArguments"]["skipableVariableType"][]="string";
9083
		$conf["form.checkArguments"]["skipableVariableType"][]="string";
9084
		$conf["form.checkArguments"]["skipableVariableType"][]="string";
9085
		$conf["form.checkArguments"]["skipableVariableType"][]="string";
9086
		$conf["form.checkArguments"]["skipableVariableType"][]="string";
9087
		$conf["form.checkArguments"]["skipableVariableType"][]="string";
9088
		#$conf["form.checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,"null"代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
9089
		$conf["form.checkArguments"]["skipableVarDefaultValue"][]="__qbpwcf_inputRadioWithoutBorder";
9090
		$conf["form.checkArguments"]["skipableVarDefaultValue"][]="\$conf[\"sendValue\"]";
9091
		$conf["form.checkArguments"]["skipableVarDefaultValue"][]=null;
9092
		$conf["form.checkArguments"]["skipableVarDefaultValue"][]="false";
9093
		$conf["form.checkArguments"]["skipableVarDefaultValue"][]=null;
9094
		$conf["form.checkArguments"]["skipableVarDefaultValue"][]=null;
9095
		$conf["form.checkArguments"]["skipableVarDefaultValue"][]="false";
9096
		$conf["form.checkArguments"]["skipableVarDefaultValue"][]="__qbpwcf_inputRadioWithoutBorder";
9097
		$conf["form.checkArguments"]["skipableVarDefaultValue"][]="false";
9098
		$conf["form.checkArguments"]["skipableVarDefaultValue"][]="__qbpwcf_inputRadioWithoutBorder";
9099
		$conf["form.checkArguments"]["skipableVarDefaultValue"][]="false";
9100
		$conf["form.checkArguments"]["skipableVarDefaultValue"][]="false";
9101
		$conf["form.checkArguments"]["skipableVarDefaultValue"][]="true";
9102
		$conf["form.checkArguments"]["skipableVarDefaultValue"][]=null;
9103
		$checkResult=variableCheck::checkArguments($conf["form.checkArguments"]);
9104
		unset($conf["form.checkArguments"]);
9105
 
9106
		#如果$checkResult["status"] 等於 "false"
9107
		#意即如果檢查出錯
9108
		if($checkResult["status"]=="false"){
9109
 
9110
			#設置錯誤識別
9111
			$result["status"]="false";
9112
 
9113
			#設置錯誤訊息
9114
			$result["error"]=$checkResult;
9115
 
9116
			#回傳結果
9117
			return $result;
9118
 
9119
			}#if end
9120
 
9121
		#如果$checkResult["passed"] 等於 "false"
9122
		#意即如果檢查出錯
9123
		if($checkResult["passed"]=="false"){
9124
 
9125
			#設置錯誤識別
9126
			$result["status"]="false";
9127
 
9128
			#設置錯誤訊息
9129
			$result["error"]=$checkResult;
9130
 
9131
			#回傳結果
9132
			return $result;
9133
 
9134
			}#if end
9135
 
9136
		#如果其值爲 true
9137
		if($conf["trStart"]=="true"){
9138
 
9139
			#函式說明:
9140
			#列開始
9141
			#回傳結果:
9142
			#$result["status"],執行是否正常,"true"代表正常;"false"代表不正常.
9143
			#$result["error"],函式錯誤訊息陣列.
9144
			#$result["content"],列開始的語法.
9145
			#$result["function"],當前執行的函式名稱.
9146
			#必填寫的參數:
9147
			$conf["table"]["trStart"]["class"]=$conf["trClass"];#該 tr 要套用套用的 css 樣式若爲 "" 則會採用預設的css樣式 __defaultTrCsssStyle,其屬性爲 border:1px solid blue
9148
			$trStart=table::trStart($conf["table"]["trStart"]);
9149
			unset($conf["table"]["trStart"]);
9150
 
9151
			#如果列開始失敗
9152
			if($trStart["status"]=="false"){
9153
 
9154
				#設置錯誤識別
9155
				$result["status"]="false";
9156
 
9157
				#設置錯誤訊息
9158
				$result["error"]=$trStart;
9159
 
9160
				#回傳結果
9161
				return $result;
9162
 
9163
				}#if end
9164
 
9165
			#串接列開始
9166
			$result["content"]=$result["content"].$trStart["content"];
9167
 
9168
			}#if end
9169
 
9170
		#如果其值爲 true
9171
		if($conf["tdStart"]=="true"){
9172
 
9173
			#函式說明:
9174
			#行開始
9175
			#回傳結果:
9176
			#$result,行開始的語法
9177
			#必填寫的參數:
9178
			$conf["table"]["tdStart"]["class"]=$conf["tdClass"];#該 td 要套用套用的 css 樣式
9179
				#預設的樣式
9180
				#"border-width","border","border-color","border-style","margin-right","margin-left"
9181
				#"100%","1px","#0000FF","solid","auto","auto"
9182
			$tdStart=table::tdStart($conf["table"]["tdStart"]);
9183
			unset($conf["table"]["tdStart"]);
9184
 
9185
			#如果 欄開始 失敗
9186
			if($tdStart["status"]=="false"){
9187
 
9188
				#設置錯誤識別
9189
				$result["status"]="false";
9190
 
9191
				#設置錯誤訊息
9192
				$result["error"]=$tdStar;
9193
 
9194
				#回傳結果
9195
				return $result;
9196
 
9197
				}#if end
9198
 
9199
			#串接欄開始
9200
			$result["content"]=$result["content"].$trStart["content"];
9201
 
9202
			}#if end
9203
 
9204
		#如果$conf["defaultValue"]沒有設定
9205
		if(!isset($conf["defaultValue"])){
9206
 
9207
			#則$conf["defaultValue"]爲""
9208
			$conf["defaultValue"]="";
9209
 
9210
			}#if end
9211
 
9212
		#如果$conf["outputValue"]沒設定
9213
		if(!isset($conf["outputValue"])){
9214
 
9215
			#則$conf["outputValue"]陣列內容將會等於$conf["sendValue"]陣列內容
9216
			$conf["outputValue"]=$conf["sendValue"];
9217
 
9218
			}#if end
9219
 
9220
		#暫存給註解用的css樣式
9221
		$commentCssStyle="";
9222
 
9223
		#如果爲 "__withBorder"
9224
		if($conf["class"]=="__withBorder"){
9225
 
9226
			#變更爲有框線的預設樣式
9227
			$conf["class"]="__withBorderInputRadioCssStyle";
9228
 
9229
			#取得註解要用的css樣式
9230
			$commentCssStyle=$conf["class"];
9231
 
9232
			}#if ned
9233
 
9234
		#如果爲 "__withoutBorder"
9235
		if($conf["class"]=="__withoutBorder"){
9236
 
9237
			#變更爲有框線的預設樣式
9238
			$conf["class"]="__withoutBorderInputRadioCssStyle";
9239
 
9240
			#取得註解要用的css樣式
9241
			$commentCssStyle=$conf["class"];
9242
 
9243
			}#if ned
9244
 
9245
		#則按照設定值
9246
		$conf["class"]=" class = ".$conf["class"]." ";
9247
 
9248
		#如果 $conf["jsActivitor"] 與 $conf["jsAction"] 皆有設定
9249
		if( isset($conf["jsActivitor"]) && isset($conf["jsAction"]) ){
9250
 
9251
			#則將設定值組合
9252
			$conf["jsCustom"]=" ".$conf["jsActivitor"]."=".$conf["jsAction"]." ";
9253
 
9254
			}#if end
9255
 
9256
		#如果 $conf["jsCustom"] 沒有設定
9257
		if(!isset($conf["jsCustom"])){
9258
 
9259
			#將其設爲空值
9260
			$conf["jsCustom"]="";
9261
 
9262
			}#if end
9263
 
9264
		#將有幾個選項的數目放進 $count
9265
		$count=count($conf["sendValue"]);
9266
 
9267
		#套用css樣式
9268
		$result["content"]=$result["content"]."<span ".$conf["class"]." >";
9269
 
9270
		#過濾 $conf["name"] 避免錯誤
9271
		#函式說明:
9272
		#處理字串避免網頁出錯
9273
		#回傳結果:
9274
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
9275
		#$result["function"],當前執行的函數.
9276
		#$result["content"],爲處理好的字串.
9277
		#$result["error"],錯誤訊息陣列.
9278
		#必填參數:
9279
		$conf["stringProcess::correctCharacter"]["stringIn"]=$conf["name"];#爲要處理的字串
9280
		#可省略的參數:
9281
		$conf["stringProcess::correctCharacter"]["selectedCharacter"]=array("<",">","=","//","'","$","%","&","|","/*","*\/","#","\""," ");#爲被選擇要處理的字串/字元,須爲陣列值。
9282
			#若不設定則預設爲要將這些字串作替換("<",">","=","//","'","$","%","&","|","/*","*\/","#","\"")。
9283
			#特殊字元,「\n」代表換行,「\t」代表tab鍵的間隔
9284
		#$conf["stringProcess::correctCharacter"]["changeTo"]=array("","","","","","","","","","","","","");#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
9285
		$correctCharacter=stringProcess::correctCharacter($conf["stringProcess::correctCharacter"]);
9286
		unset($conf["stringProcess::correctCharacter"]);
9287
 
9288
		#如果過濾字串失敗
9289
		if($correctCharacter["status"]=="false"){
9290
 
9291
			#設置執行失敗
9292
			$result["status"]="false";
9293
 
9294
			#設置執行錯誤訊息
9295
			$result["error"]=$correctCharacter;
9296
 
9297
			#回傳結果
9298
			return $result;
9299
 
9300
			}#if end
9301
 
9302
		#置換過濾好了的$conf["name"]
9303
		$conf["name"]=$correctCharacter["content"];
9304
 
9305
		#n個選項跑n此
9306
		for($i=0;$i<=($count-1);$i++){
9307
 
9308
			#如果選項的數值等於 預設的數值
9309
			if($conf["sendValue"][$i]==$conf["defaultValue"]){
9310
 
9311
				#則選取該選項
9312
				$result["content"]=$result["content"]."<label><input type = \"radio\" name = ".$conf["name"]." value = ".$conf["sendValue"][$i]." checked ".$conf["jsCustom"]." >".$conf["outputValue"][$i]."</label>";
9313
 
9314
				}#if end
9315
 
9316
			#反之
9317
			else{
9318
 
9319
				#選項的值等於現在畫面上的值
9320
				$result["content"]=$result["content"]."<label><input type = \"radio\" name = ".$conf["name"]." value = ".$conf["sendValue"][$i]." ".$conf["jsCustom"]." >".$conf["outputValue"][$i]."</label>";
9321
 
9322
				}#else end
9323
 
9324
			#如果 $conf["brBetweenOption"] 等於 "true"
9325
			if(($conf["brBetweenOption"]=="true")){
9326
 
9327
				#加上<br>標籤
9328
				$result["content"]=$result["content"]."<br>";
9329
 
9330
				}#if end
9331
 
9332
			}#for end
9333
 
9334
		#套用css樣式的範圍結束
9335
		$result["content"]=$result["content"]."</span ".$conf["class"]." >";
9336
 
9337
		#如果 不使用<hr> 的變數不存在
9338
		if(!isset($conf["disableHr"])){
9339
 
9340
			#則印出<hr>進行分割,以便放置下一個radioButton
9341
			$result["content"]=$result["content"]."<hr width = 0>";
9342
 
9343
			}#if end
9344
 
9345
		#如果其值爲 true
9346
		if($conf["tdEnd"]=="true"){
9347
 
9348
			#串接欄結束
9349
			$result["content"]=$result["content"]."</td>";
9350
 
9351
			}#if end
9352
 
9353
		#如果其值爲 true
9354
		if($conf["trEnd"]=="true"){
9355
 
9356
			#串接列結束
9357
			$result["content"]=$result["content"]."</tr>";
9358
 
9359
			}#if end
9360
 
9361
		#如果 $conf["comment"] 存在
9362
		if(isset($conf["comment"])){
9363
 
9364
			#給註解套上css樣式
9365
			#函式說明:
9366
			#<span>區塊,裡面可以指定css的class樣式,可以指定提示文字.
9367
			#$result["status"],字串,執行否正常,"true"代表正常,"false"代表不正常.
9368
			#$result["functin"],字串,當前函數的名稱.
9369
			#$result["error"],陣列,錯訊訊息.
9370
			#$result["content"],字串,含有<span>標籤的內容.
9371
			#必填參數:
9372
			#$conf["contentArray"],字串陣列,要放入的內容陣列.
9373
			$conf["css::spanSection"]["contentArray"]=array($conf["comment"]);
9374
			#可省略參數
9375
			#$conf["css::spanSection"]["class"],字串,div區段要套用的css樣式.
9376
			$conf["css::spanSection"]["class"]=$commentCssStyle;
9377
			#$conf["title"],陣列,滑鼠移到上面時要顯示的內容,每個元素代表一列內容
9378
			#$conf["title"]=array();
9379
			$spanSection=css::spanSection($conf["css::spanSection"]);
9380
			unset($conf["css::spanSection"]);
9381
 
9382
			#若建立 spanSection 失敗
9383
			if($spanSection["status"]=="false"){
9384
 
9385
				#設置錯誤識別
9386
				$result["status"]="false";
9387
 
9388
				#設置錯誤訊息
9389
				$result["error"]=$spanSection;
9390
 
9391
				#回傳結果
9392
				return $result;
9393
 
9394
				}#if end
9395
 
9396
			#加上註解
9397
			$result["content"]=$spanSection["content"]."<br>".$result["content"];
9398
 
9399
			}#if end
9400
 
9401
		#設置執行正常
9402
		$result["status"]="true";
9403
 
9404
		#回傳語法
9405
		return $result;
9406
 
9407
		}#function inputRadio end
9408
 
9409
	/*
9410
	#函式說明:
9411
	#勾選式選單(複選)
9412
	#回傳結果:
9413
	#$result["status"],執行是否正常,"true"代表正常,"false"代表失敗.
9414
	#$result["error"],錯誤訊息陣列.
9415
	#$result["content"],語法內容.
9416
	#$result["function"],當前執行的函式.
9417
	#必填參數:
9418
	$conf["name"]=array();#爲勾選式選單傳送時的各選項的名稱。例如:$conf["name"]=array("q-1","q-2","q-3","q-4","q-5");
9419
	$conf["sendValue"]=array();#爲陣列值,為勾選式選單實際傳送的內容.例如:$conf["sendValue"]=array("a","b","c","d","e");
9420
	#可省略參數:
9421
	#$conf["class"]=;#爲要套用的class樣式,預設為"__inputCheckBoxCssStyle",其樣式為"font-size:30px;text-align:center;"
9422
	#$conf["outputValue"]=array();#爲陣列值,爲每個選項的實際顯示的數值, e.g. $conf["outputValue"] = array("p","o","i","t","e"); 預設爲跟$conf["sendValue"]一樣。
9423
	#$conf["checkedOption"]=array();#爲那些選項是否要勾選,須爲陣列值。例如array("1","3","4"),就代表第1、3、4個選項是勾選的狀態。
9424
	#$conf["comment"]="";#為選單的註解
9425
	#$conf["jsActivitor"]="";#爲觸發js的條件,可以是"onChange"(已改變內容時)...,須搭配$conf["jsSubmitActionTarget"]參數。
9426
	#$conf["jsAction"]="";#爲該js是要做什麼,可以是"document.testForm.submit()"(傳送名爲testForm的表單內容)...,須搭配$conf["jsActivitor"]參數。
9427
	#$conf["formName"]="";#爲表單的名稱
9428
	#$conf["formAction"]="";#爲表單要送到哪個php檔案。
9429
	#$conf["actionTarget"]="";#爲表單處理好後的呈現方式,有_top,_self,_blank,_parent,元素名稱也可以,預設為"_self"
9430
	#$conf["hiddenVar"],字串陣列,隱藏的變數名稱陣列.
9431
	#$conf["hiddenVar"]=array("");
9432
	#$conf["hiddanVarValue"],字串陣列,隱藏變數的數值內容.
9433
	#$conf["hiddenVarValue"]=array("");
9434
	#$conf["formEnd"]="false";#爲是否要表單結束,預設爲"false".
9435
	#$conf["trStart"]="true";#爲是否要以<tr>開頭,"true"表示"是",也可以看作新的一列開始,預設爲"false".
9436
	#$conf["tdStart"]="true";#爲是否要以<td>開頭,"true"表示"是",也可以看成列裏面的元素開始,預設爲"false".
9437
	#$conf["tdEnd"]="true";#爲是否要以</td>結尾,"true"表示"是",也可以看成列裏面的元素結束,預設爲"false".
9438
	#$conf["trEnd"]="true";#爲是否要以</tr>結尾,"true"表示"是",也可以看作該列結束,預設爲"false".
9439
	#$conf["brBetweenOption"]="true";#是否每個選項用<br>標籤隔開,"true"為要,預設爲"false".
9440
	#參考資料:
9441
	#無.
9442
	#備註:
9443
	#每個選項傳送的內容,修改成預設爲"true".
9444
	*/
9445
	public static function inputCheckBox(&$conf){
9446
 
9447
		#預設要回傳的數值
9448
		$result=array();
9449
 
9450
		#設置當前執行的函式
9451
		$result["function"]=__FUNCTION__;
9452
 
9453
		#初始化要回傳的語法
9454
		$result["content"]="";
9455
 
9456
		#如果 $conf 不為陣列
9457
		if(gettype($conf)!="array"){
9458
 
9459
			#設置執行失敗
9460
			$result["status"]="false";
9461
 
9462
			#設置執行錯誤訊息
9463
			$result["error"][]="\$conf變數須為陣列形態";
9464
 
9465
			#如果傳入的參數為 null
9466
			if($conf==null){
9467
 
9468
				#設置執行錯誤訊息
9469
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
9470
 
9471
				}#if end
9472
 
9473
			#回傳結果
9474
			return $result;
9475
 
9476
			}#if end
9477
 
9478
		#檢查參數
9479
		#函式說明:
9480
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
9481
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
9482
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
9483
		#$result["function"],當前執行的函式名稱.
9484
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
9485
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
9486
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
9487
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
9488
		#必填參數:
9489
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
9490
		$conf["variableCheck.checkArguments"]["varInput"]=&$conf;
9491
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
9492
		$conf["variableCheck.checkArguments"]["mustBeFilledVariableName"]=array("name","sendValue");
9493
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double");
9494
		$conf["variableCheck.checkArguments"]["mustBeFilledVariableType"]=array("array","array");
9495
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
9496
		$conf["variableCheck.checkArguments"]["referenceVarKey"]="variableCheck.checkArguments";
9497
		#可省略參數:
9498
		#$conf["variableCheck.checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"false"。
9499
		#$conf["variableCheck.checkArguments"]["canBeEmptyString"]="true";
9500
		#$conf["variableCheck.checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
9501
		$conf["variableCheck.checkArguments"]["skipableVariableName"]=array("class","outputValue","checkedOption","comment","jsActivitor","jsAction","formName","formAction","actionTarget","trStart","tdStart","tdEnd","trEnd","brBetweenOption","hiddenVar","hiddenVarValue","formEnd");
9502
		#$conf["variableCheck.checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
9503
		$conf["variableCheck.checkArguments"]["skipableVariableType"]=array("string","array","array","string","string","string","string","string","string","string","string","string","string","string","array","array","string");
9504
		#$conf["variableCheck.checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,"null"代表不指定.
9505
		$conf["variableCheck.checkArguments"]["skipableVarDefaultValue"]=array("__qbpwcf_inputCheckBoxCssStyle","\$conf[\"sendValue\"]",null,null,null,null,null,null,"_self","false","false","false","false","true",null,null,"false");
9506
		$checkResult=variableCheck::checkArguments($conf["variableCheck.checkArguments"]);
9507
		unset($conf["variableCheck.checkArguments"]);
9508
 
9509
		#如果檢查失敗
9510
		if($checkResult["status"]=="false"){
9511
 
9512
			#設置執行不正常
9513
			$result["status"]="false";
9514
 
9515
			#程式停止執行
9516
			$result["error"]=$checkResult;
9517
 
9518
			#回傳結果
9519
			return $result;
9520
 
9521
			}#if end
9522
 
9523
		#如果檢查不通過
9524
		if($checkResult["passed"]=="false"){
9525
 
9526
			#設置執行不正常
9527
			$result["status"]="false";
9528
 
9529
			#程式停止執行
9530
			$result["error"]=$checkResult;
9531
 
9532
			#回傳結果
9533
			return $result;
9534
 
9535
			}#if end
9536
 
9537
		#如果 $conf["formAction"] 有設定
9538
		if(isset($conf["formAction"])){
9539
 
9540
			#如果 $conf["actionTarget"] 有設定
9541
			if(isset($conf["actionTarget"])){
9542
 
9543
				#指派設定值
9544
				$conf["form"]["start"]["target"]=$conf["actionTarget"];
9545
 
9546
				}#if end
9547
 
9548
			#如果 $conf["formName"] 沒有設置
9549
			if(!isset($conf["formName"])){
9550
 
9551
				#預設爲空數值
9552
				$conf["form"]["start"]["formName"]="  ";
9553
 
9554
				}#if end
9555
 
9556
			#函式說明:
9557
			#表單開始
9558
			#回傳結果:
9559
			#$result,表單開始的語法
9560
			#必填參數:
9561
			$conf["form"]["start"]["action"]=$conf["formAction"];#爲要交給那個檔案處理該表單傳送的內容
9562
			#可省略參數:
9563
			#$conf["form"]["start"]["name"]=$conf["formName"];#爲該表單的名稱
9564
			#$conf["method"]="";#爲傳輸的方法,若沒設定則預設爲post,其他可用的參數爲get。
9565
			#$conf["form"]["start"]["target"]=$conf["actionTarget"];#為顯示的方式,若沒設定則預設爲"_self",其他可用的參數爲 "_blank"、"_parent"、"_top",也可以是iframe的名稱。
9566
			#$conf["tableStart"]="true";#爲該表單是否要以<table>開始。"true"爲是;
9567
			#$conf["tableClass"]="";#表格要套用的css樣式,若省略的話,則預設爲 __defaultTbaleCsssStyle 其屬性爲 table-layout:fixed word-break:break-all width:100%
9568
			$formStart=form::start($conf["form"]["start"]);
9569
			unset($conf["form"]["start"]);
9570
 
9571
			#如果表單開始失敗
9572
			if($formStart["status"]=="false"){
9573
 
9574
				#設置執行不正常
9575
				$result["status"]="false";
9576
 
9577
				#程式停止執行
9578
				$result["error"]=$formStart;
9579
 
9580
				#回傳結果
9581
				return $result;
9582
 
9583
				}#if end
9584
 
9585
			#串接表單開始
9586
			$result["content"]=$result["content"].$formStart["content"];
9587
 
9588
			}#if end
9589
 
9590
		#如果 $conf["hiddenVar"]與$conf["hiddenVarValue"]皆有設置
9591
		if(isset($conf["hiddenVar"]) && isset($conf["hiddenVarValue"])){
9592
 
9593
			#且陣列元素數目相同
9594
			if(count($conf["hiddenVar"])==count($conf["hiddenVarValue"])){
9595
 
9596
				#建立隱藏的表單
9597
				#傳送多個隱藏表單的資訊
9598
				#回傳的數值:
9599
				#$result,語法
9600
				#$result["sendedArrayName"],
9601
				#$result["sendedArrayValue"],
9602
				#$result["sendedArrayCount"],
9603
				#必填參數:
9604
				$conf["form"]["inputMutiHidden"]["nameArray"]=$conf["hiddenVar"];#欲傳送的隱藏陣列變數名稱
9605
				$conf["form"]["inputMutiHidden"]["valueArray"]=$conf["hiddenVarValue"];#欲傳送的隱藏陣列變數數值
9606
				$inputMultiHidden=form::inputMultiHidden($conf["form"]["inputMutiHidden"])["content"];
9607
				unset($conf["form"]["inputMutiHidden"]);
9608
 
9609
				#建立隱藏的表單失敗
9610
				if($inputMultiHidden["status"]=="false"){
9611
 
9612
					#設置執行不正常
9613
					$result["status"]="false";
9614
 
9615
					#程式停止執行
9616
					$result["error"]=$inputMultiHidden;
9617
 
9618
					#回傳結果
9619
					return $result;
9620
 
9621
					}#if end
9622
 
9623
				#串接隱藏的表單
9624
				$result["content"]=$result["content"].$inputMultiHidden;
9625
 
9626
				}#if end
9627
 
9628
			}#if end
9629
 
9630
		#如果其值爲 true
9631
		if($conf["trStart"]=="true"){
9632
 
9633
			#串接列開始
9634
			$result["content"]=$result["content"]."<tr>";
9635
 
9636
			}#if end
9637
 
9638
		#如果其值爲 true
9639
		if($conf["tdStart"]=="true"){
9640
 
9641
			#串接欄開始
9642
			$result["content"]=$result["content"]."<td>";
9643
 
9644
			}#if end
9645
 
9646
		#如果$conf["outputValue"]沒設定
9647
		if(!isset($conf["outputValue"])){
9648
 
9649
			#則$conf["outputValue"]陣列內容將會等於$conf["sendValue"]陣列內容
9650
			$conf["outputValue"]=$conf["sendValue"];
9651
 
9652
			}#if end
9653
 
9654
		#如果$conf["class"]沒設定
9655
		if(!isset($conf["class"])){
9656
 
9657
			#則$conf["class"]爲空
9658
			$conf["class"]="";
9659
 
9660
			}#if end
9661
 
9662
		#如果有$conf["class"]有設定
9663
		else{
9664
 
9665
			#則按照設定值
9666
			$conf["class"]=" class=".$conf["class"];
9667
 
9668
			}#else end
9669
 
9670
		#如果 $conf["jsActivitor"] 與 $conf["jsAction"] 皆有設定
9671
		if( isset($conf["jsActivitor"]) && isset($conf["jsAction"]) ){
9672
 
9673
			#則將設定值組合
9674
			$conf["jsCustom"]=" ".$conf["jsActivitor"]."=".$conf["jsAction"]." ";
9675
 
9676
			}#if end
9677
 
9678
		#如果 $conf["jsCustom"] 沒有設定
9679
		if(!isset($conf["jsCustom"])){
9680
 
9681
			#將其設爲空值
9682
			$conf["jsCustom"]="";
9683
 
9684
			}#if end
9685
 
9686
		#將有幾個選項的數目放進 $count
9687
		$count=count($conf["sendValue"]);
9688
 
9689
		#如果 $conf["comment"] 有設定
9690
		if(isset($conf["comment"])){
9691
 
9692
			#一開始先擺註解
9693
			$result["content"]=$result["content"]."<span ".$conf["class"].">".$conf["comment"]."</span><br>";
9694
 
9695
			}#if end
9696
 
9697
		#有幾個選項就執行幾次
9698
		for($i=0;$i<$count;$i++){
9699
 
9700
			#如果 $conf["checkedOption"] 參數存在
9701
			if(isset($conf["checkedOption"])){
9702
 
9703
				#檢查多個數值,是否與陣列裏面的某些元素相同。
9704
				#回傳結果:
9705
				#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
9706
				#$result["function"],當前執行的函數
9707
				#$result["error"],函式錯誤訊息,若爲""則表示沒有錯誤
9708
				#$result["founded"][$i],若爲"false"代表沒有相同的元素;反之"true"代表有相同的元素,$i爲第i+1個參數判斷後的結果。
9709
				#必填參數:
9710
				$conf_checkEquality["inputElement"]=array($i+1);#爲要進行比對的變數/數值。
9711
				$conf_checkEquality["blackBoxElement"]=$conf["checkedOption"];#爲用來比對的變數/數值陣列
9712
				$result_checkEquality=search::checkEquality($conf_checkEquality);
9713
				unset($conf_checkEquality);
9714
 
9715
				#如果檢查失敗
9716
				if($result_checkEquality["status"]=="false"){
9717
 
9718
					#設置執行不正常
9719
					$result["status"]="false";
9720
 
9721
					#程式停止執行
9722
					$result["error"]=$result_checkEquality;
9723
 
9724
					#回傳結果
9725
					return $result;
9726
 
9727
					}#if end
9728
 
9729
				#如果 $result_checkEquality"founded"][$i] 存在
9730
				if(isset($result_checkEquality["founded"][0])){
9731
 
9732
					#如果該選項是要勾選的
9733
					if($result_checkEquality["founded"][0]=="true"){
9734
 
9735
						#選取
9736
						$checked=" checked ";
9737
 
9738
						}#if end
9739
 
9740
					#反之
9741
					else{
9742
 
9743
						#不選取
9744
						$checked="";
9745
 
9746
						}#else end
9747
 
9748
					}#if end
9749
 
9750
				#反之
9751
				else{
9752
 
9753
					#不選取
9754
					$checked="";
9755
 
9756
					}#else end
9757
 
9758
				}#if end
9759
 
9760
			#反之
9761
			else{
9762
 
9763
				#不選取
9764
				$checked="";
9765
 
9766
				}#else end
9767
 
9768
			#放置勾選式表單
9769
			$result["content"]=$result["content"]."<label><input type = \"checkbox\" name = ".$conf["name"][$i]." value = ".$conf["sendValue"][$i]." ".$conf["class"]." ".$checked." ".$conf["jsCustom"]." >" ."<span ".$conf["class"].">".$conf["outputValue"][$i]."</span>"."</label>";
9770
 
9771
			#如果 $conf["brBetweenOption"] 有設定
9772
			if(isset($conf["brBetweenOption"])){
9773
 
9774
				#如果 $conf["brBetweenOption"] 等於 "true"
9775
				if($conf["brBetweenOption"]=="true"){
9776
 
9777
					#如果不是最後一個選項
9778
					if($i!=$count-1){
9779
 
9780
						#加上<br>標籤
9781
						$result["content"]=$result["content"]."<br>";
9782
 
9783
						}#if end
9784
 
9785
					}#if end
9786
 
9787
				}#if end
9788
 
9789
			}#for end
9790
 
9791
		#如果其值爲 true
9792
		if($conf["tdEnd"]=="true"){
9793
 
9794
			#串接欄結束
9795
			$result["content"]=$result["content"]."</td>";
9796
 
9797
			}#if end
9798
 
9799
		#如果其值爲 true
9800
		if($conf["trEnd"]=="true"){
9801
 
9802
			#串接列結束
9803
			$result["content"]=$result["content"]."</tr>";
9804
 
9805
			}#if end
9806
 
9807
		#如果 $conf["formAction"] 有設定
9808
		if(isset($conf["formAction"])){
9809
 
9810
			#如果有設置 $conf["formEnd"]
9811
			if(isset($conf["formEnd"])){
9812
 
9813
				#如果 $conf["formEnd"] 設爲 "true"
9814
				if($conf["formEnd"]=="true"){
9815
 
9816
					#函式說明:
9817
					#表單結束
9818
					#回傳結果:
9819
					#$result,表單結束的語法
9820
					#必填參數:
9821
					$conf["form"]["end"]["tableEnd"]="false";#爲該表單是否要以</table>結尾。"true"爲是;"false"爲否。
9822
					$formEnd=form::end($conf["form"]["end"]);
9823
					unset($conf["form"]["end"]);
9824
 
9825
					#如果表單結束失敗
9826
					if($formEnd["status"]=="false"){
9827
 
9828
						#設置執行不正常
9829
						$result["status"]="false";
9830
 
9831
						#程式停止執行
9832
						$result["error"]=$formEnd;
9833
 
9834
						#回傳結果
9835
						return $result;
9836
 
9837
						}#if end
9838
 
9839
					#串接表單結束
9840
					$result["content"]=$result["content"].$formEnd["content"];
9841
 
9842
					}#if end
9843
 
9844
				}#if end
9845
 
9846
			}#if end
9847
 
9848
		#反之沒有設置$conf["formAction"]
9849
		else{
9850
 
9851
			#如果 $conf["formEnd"] 設爲 "true"
9852
			if($conf["formEnd"]=="true"){
9853
 
9854
				#函式說明:
9855
				#表單結束
9856
				#回傳結果:
9857
				#$result,表單結束的語法
9858
				#必填參數:
9859
				$conf["form"]["end"]["tableEnd"]="false";#爲該表單是否要以</table>結尾。"true"爲是;"false"爲否。
9860
				$formEnd=form::end($conf["form"]["end"]);
9861
				unset($conf["form"]["end"]);
9862
 
9863
				#如果表單結束失敗
9864
				if($formEnd["status"]==="false"){
9865
 
9866
					#設置執行不正常
9867
					$result["status"]="false";
9868
 
9869
					#程式停止執行
9870
					$result["error"]=$formEnd;
9871
 
9872
					#回傳結果
9873
					return $result;
9874
 
9875
					}#if end
9876
 
9877
				#串接表單結束
9878
				$result["content"]=$result["content"].$formEnd["content"];
9879
 
9880
				}#if end
9881
 
9882
			}#else end
9883
 
9884
		#設置執行成功
9885
		$result["status"]="true";
9886
 
9887
		#回傳結果
9888
		return $result;
9889
 
9890
		}#function inputCheckBox end
9891
 
9892
	/*
9893
	#函式說明:
9894
	#隱藏的表單傳送資訊
9895
	#回傳結果:
9896
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
9897
	#$result["error"],錯誤訊息
9898
	#$result["content"],語法
9899
	#$result["function"],當前執行的函數名稱
9900
	#必填參數:
9901
	$conf["name"]="";#隱藏的表單名稱
9902
	$conf["value"]="";#等於要傳送的數值
9903
	#可省略參數:
9904
	#無.
9905
	#參考資料:
9906
	#無.
9907
	#備註:
9908
	#無.
9909
	*/
9910
	public static function inputHidden($conf){
9911
 
9912
		#初始化要回傳的變數
9913
		$result=array();
9914
 
9915
		#設置當前執行的函式
9916
		$result["function"]=__FUNCTION__;
9917
 
9918
		#初始化表單開始的語法
9919
		$result["content"]="";
9920
 
9921
		#如果 $conf 不為陣列
9922
		if(gettype($conf)!="array"){
9923
 
9924
			#設置執行失敗
9925
			$result["status"]="false";
9926
 
9927
			#設置執行錯誤訊息
9928
			$result["error"][]="\$conf變數須為陣列形態";
9929
 
9930
			#如果傳入的參數為 null
9931
			if($conf==null){
9932
 
9933
				#設置執行錯誤訊息
9934
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
9935
 
9936
				}#if end
9937
 
9938
			#回傳結果
9939
			return $result;
9940
 
9941
			}#if end
9942
 
9943
		#檢查參數
9944
		#函式說明:
9945
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
9946
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
9947
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
9948
		#$result["function"],當前執行的函式名稱.
9949
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
9950
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
9951
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
9952
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
9953
		#必填參數:
9954
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
9955
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
9956
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
9957
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("name","value");
9958
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double");
9959
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
9960
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
9961
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
9962
		#可省略參數:
9963
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
9964
		#$conf["canBeEmptyString"]="false";
9965
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
9966
		#$conf["skipableVariableName"]=array();
9967
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
9968
		#$conf["skipableVariableType"]=array();
9969
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,"null"代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
9970
		#$conf["skipableVarDefaultValue"]=array("");
9971
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
9972
		#$conf["arrayCountEqualCheck"][]=array();
9973
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
9974
		unset($conf["variableCheck::checkArguments"]);
9975
 
9976
		#如果檢查參數失敗
9977
		if($checkResult["status"]=="false"){
9978
 
9979
			#設置執行失敗
9980
			$result["status"]="false";
9981
 
9982
			#設置執行錯誤
9983
			$result["error"]=$checkResult;
9984
 
9985
			#回傳結果
9986
			return $result;
9987
 
9988
			}#if end
9989
 
9990
		#如果檢查參數不通過
9991
		if($checkResult["passed"]=="false"){
9992
 
9993
			#設置執行失敗
9994
			$result["status"]="false";
9995
 
9996
			#設置執行錯誤
9997
			$result["error"]=$checkResult;
9998
 
9999
			#回傳結果
10000
			return $result;
10001
 
10002
			}#if end
10003
 
10004
		#放置隱藏的表單
10005
		$result["content"]="<input type = hidden name = ".$conf["name"]." value = \"".$conf["value"]."\">";
10006
 
10007
		#執行到這邊代表執行正常
10008
		$result["status"]="true";
10009
 
10010
		#回傳結果
10011
		return $result;
10012
 
10013
		}#function inputHidden end
10014
 
10015
	/*
10016
	#函式說明:
10017
	#傳送多個隱藏表單的資訊
10018
	#回傳的數值:
10019
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
10020
	#$result["error"],錯誤訊息陣列
10021
	#$result["function"],當前執行的函數
10022
	#$result["content"],語法
10023
	#$result["sendedArrayName"],傳送的隱藏變數陣列
10024
	#$result["sendedArrayValue"],傳送的隱藏變數陣列數值
10025
	#$result["sendedArrayCount"],傳送的隱藏變數計數
10026
	#必填參數:
10027
	$conf["nameArray"]=array("");#欲傳送的隱藏陣列變數名稱
10028
	$conf["valueArray"]=array("");#欲傳送的隱藏陣列變數數值
10029
	#可省略參數:
10030
	#無.
10031
	#參考資料:
10032
	#無.
10033
	#備註:
10034
	#無.
10035
	*/
10036
	public static function inputMultiHidden(&$conf){
10037
 
10038
		#預設要回傳的數值
10039
		$result=array();
10040
 
10041
		#設置當前執行的函數
10042
		$result["function"]=__FUNCTION__;
10043
 
10044
		#初始化要回傳的語法
10045
		$result["content"]="";
10046
 
10047
		#如果 $conf 不為陣列
10048
		if(gettype($conf)!="array"){
10049
 
10050
			#設置執行失敗
10051
			$result["status"]="false";
10052
 
10053
			#設置執行錯誤訊息
10054
			$result["error"][]="\$conf變數須為陣列形態";
10055
 
10056
			#如果傳入的參數為 null
10057
			if($conf==null){
10058
 
10059
				#設置執行錯誤訊息
10060
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
10061
 
10062
				}#if end
10063
 
10064
			#回傳結果
10065
			return $result;
10066
 
10067
			}#if end
10068
 
10069
		#檢查參數
10070
		#函式說明:
10071
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
10072
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
10073
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
10074
		#$result["function"],當前執行的函式名稱.
10075
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
10076
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
10077
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
10078
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
10079
		#必填參數:
10080
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
10081
		$conf["variableCheck.checkArguments"]["varInput"]=&$conf;
10082
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
10083
		$conf["variableCheck.checkArguments"]["mustBeFilledVariableName"]=array("nameArray","valueArray");
10084
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double");
10085
		$conf["variableCheck.checkArguments"]["mustBeFilledVariableType"]=array("array","array");
10086
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
10087
		$conf["variableCheck.checkArguments"]["referenceVarKey"]="variableCheck.checkArguments";
10088
		#可省略參數:
10089
		#$conf["variableCheck.checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"false"。
10090
		#$conf["variableCheck.checkArguments"]["canBeEmptyString"]="true";
10091
		#$conf["variableCheck.checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
10092
		#$conf["variableCheck.checkArguments"]["skipableVariableName"]=array("width","maxInputLength","defaultValue","class","jsActivitor","jsAction","trStart","tdStart","tdEnd","trEnd","comment","placeholder");
10093
		#$conf["variableCheck.checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
10094
		#$conf["variableCheck.checkArguments"]["skipableVariableType"]=array("string","string","string","string","string","string","string","string","string","string","string","string");
10095
		#$conf["variableCheck.checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,"null"代表不指定.
10096
		#$conf["variableCheck.checkArguments"]["skipableVarDefaultValue"]=array(null,null,null,"__inputPasswordCssStyle",null,null,"false","false","false","false",null,null);
10097
		#$conf["variableCheck.checkArguments"]["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
10098
		$conf["variableCheck.checkArguments"]["arrayCountEqualCheck"][]=array("nameArray","valueArray");
10099
		$checkResult=variableCheck::checkArguments($conf["variableCheck.checkArguments"]);
10100
		unset($conf["variableCheck.checkArguments"]);
10101
 
10102
		#如果檢查失敗
10103
		if($checkResult["status"]=="false"){
10104
 
10105
			#設置執行不正常
10106
			$result["status"]="false";
10107
 
10108
			#程式停止執行
10109
			$result["error"]=$checkResult;
10110
 
10111
			#回傳結果
10112
			return $result;
10113
 
10114
			}#if end
10115
 
10116
		#如果檢查不通過
10117
		if($checkResult["passed"]=="false"){
10118
 
10119
			#設置執行不正常
10120
			$result["status"]="false";
10121
 
10122
			#程式停止執行
10123
			$result["error"]=$checkResult;
10124
 
10125
			#回傳結果
10126
			return $result;
10127
 
10128
			}#if end
10129
 
10130
		#透過foreach建立陣列
10131
		#將陣列的key重新排序,然後回傳,以便後續存取,也可以指定key的內容,但一定要跟元素數量相同。
10132
		#回傳的解果:
10133
		#$result["status"],執行是否成功,"true"代表成功,"false"代表失敗.
10134
		#$result["error"],執行錯誤的訊息.
10135
		#$result["function"],當前執行的函數名稱.
10136
		#$result["dataContent"],儲存陣列元素的內容.
10137
		#必填參數:
10138
		$conf_createV2["arrayContent"]=$conf["nameArray"];#陣列元素的value,須爲陣列值。
10139
		#可省略的參數:
10140
		#$conf["arrayCounts"]="";#爲陣列的元素有幾個,若沒設定,則數量爲$conf["arrayContent"]裏的元素數量
10141
		#$conf["theSameAs"]="true";#若設爲"true",則所有元素內容都跟第一個元素內容相同
10142
		$result_nameArray=arrays::createV2($conf_createV2);
10143
		unset($conf_createV2);
10144
 
10145
		#如果重新排序陣列失敗
10146
		if($result_nameArray["status"]=="false"){
10147
 
10148
			#設置執行不正常
10149
			$result["status"]="false";
10150
 
10151
			#程式停止執行
10152
			$result["error"]=$result_nameArray;
10153
 
10154
			#回傳結果
10155
			return $result;
10156
 
10157
			}#if end
10158
 
10159
		#透過foreach建立陣列
10160
		#將陣列的key重新排序,然後回傳,以便後續存取。
10161
		#回傳的解果:
10162
		#$result["status"],執行是否成功,"true"代表成功,"false"代表失敗.
10163
		#$result["error"],執行錯誤的訊息.
10164
		#$result["function"],當前執行的函數名稱.
10165
		#$result["dataContent"],儲存陣列元素的內容.
10166
		#必填參數:
10167
		$conf_createV2["arrayContent"]=$conf["valueArray"];#陣列元素的value,須爲陣列值。
10168
		#可省略的參數:
10169
		#$conf["arrayCounts"]="";#爲陣列的元素有幾個,若沒設定,則數量爲$conf["arrayContent"]裏的元素數量
10170
		#$conf["theSameAs"]="true";#若設爲"true",則所有元素內容都跟第一個元素內容相同
10171
		$result_valueArray=arrays::createV2($conf_createV2);
10172
		unset($conf_createV2);
10173
 
10174
		#如果重新排序陣列失敗
10175
		if($result_valueArray["status"]=="false"){
10176
 
10177
			#設置執行不正常
10178
			$result["status"]="false";
10179
 
10180
			#程式停止執行
10181
			$result["error"]=$result_valueArray;
10182
 
10183
			#回傳結果
10184
			return $result;
10185
 
10186
			}#if end
10187
 
10188
		#有幾個要傳送的元素就執行幾次
10189
		for($i=0;$i<count($conf["nameArray"]);$i++){
10190
 
10191
			#隱藏的表單傳送資訊
10192
			#必填參數:
10193
			$conf_inputHidden["name"]=$result_nameArray["dataContent"][$i];#隱藏的表單名稱
10194
			$conf_inputHidden["value"]=$result_valueArray["dataContent"][$i];#等於要穿送的數值
10195
			$inputHidden=form::inputHidden($conf_inputHidden);
10196
			unset($conf_inputHidden);
10197
 
10198
			#如果建立隱藏的表單失敗
10199
			if($inputHidden["status"]=="false"){
10200
 
10201
				#設置錯誤
10202
				$result["status"]="false";
10203
 
10204
				#設置錯誤訊息
10205
				$result["error"]=$inputHidden;
10206
 
10207
				#回傳結果
10208
				return $inputHidden;
10209
 
10210
				}#if end
10211
 
10212
			#串接 隱藏的表單
10213
			$result["content"]=$result["content"].$inputHidden["content"];
10214
 
10215
			}#for end
10216
 
10217
		#設置執行正常
10218
		$result["status"]="true";
10219
 
10220
		#回傳結果
10221
		return $result;
10222
 
10223
		}#function inputMutiHidden end
10224
 
10225
	/*
10226
	#函式說明:
10227
	#簡單的控制面板,可以點選"新增"、"回上頁"的簡易面板
10228
	#回傳的結果:
10229
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
10230
	#$result["error"],錯誤訊息
10231
	#$result["content"],控制面板的語法
10232
	#$result["function"],當前執行的函數名稱
10233
	#必填參數:
10234
	$conf["addActionPage"]="";#不可省略,爲新增表單要交給那個頁面處理,屬性內容爲網頁位置。
10235
	$conf["goBackActionPage"]="";#不可省略,爲回上頁的目的地,屬性內容爲網頁位置。
10236
	#可省略參數:
10237
	#$conf["addActionPresentPage"]="";#可省略,爲新增表單的處理頁面要在那邊出現,可以用的數值有 _self (面板所處的頁面) _parent (父頁面) _blank (新視窗) 頁框名稱,預設爲_self
10238
	#$conf["addButtonName"]="";#可省略,預設爲"新增",爲新增表單的按鈕顯示名稱,屬性內容爲字串。
10239
	#$conf["addButtonStyleName"]="";#可省略,爲新增表單的按鈕css樣式,屬性內容爲 css 的類別名稱。
10240
	#$conf["goBackActionPresentPage"]="";#可省略,爲回上頁的目的地的頁面要在那邊出現,可以用的數值有 _self (面板所處的頁面) _parent (父頁面) _blank (新視窗) 頁框名稱,預設爲_self
10241
	#$conf["goBackButtonName"]="";#可省略,預設爲"回上頁",爲回上頁的按鈕顯示名稱,屬性內容爲字串。
10242
	#$conf["goBackButtonStyleName"]="";#可省略,爲回上頁按鈕的css樣式,屬性內容爲 css 的類別名稱。
10243
	#參考資料:
10244
	#無.
10245
	#備註:
10246
	#無.
10247
	*/
10248
	public static function simpleControlPanel($conf){
10249
 
10250
		#初始化要回傳的內容
10251
		$result=array();
10252
 
10253
		#設置當前執行的函數
10254
		$result["function"]=__FUNCTION__;
10255
 
10256
		#初始化content樣式內容
10257
		$result["content"]="";
10258
 
10259
		#如果 $conf 不為陣列
10260
		if(gettype($conf)!="array"){
10261
 
10262
			#設置執行失敗
10263
			$result["status"]="false";
10264
 
10265
			#設置執行錯誤訊息
10266
			$result["error"][]="\$conf變數須為陣列形態";
10267
 
10268
			#如果傳入的參數為 null
10269
			if($conf==null){
10270
 
10271
				#設置執行錯誤訊息
10272
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
10273
 
10274
				}#if end
10275
 
10276
			#回傳結果
10277
			return $result;
10278
 
10279
			}#if end
10280
 
10281
		#檢查參數
10282
		#函式說明:
10283
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
10284
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
10285
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
10286
		#$result["function"],當前執行的函式名稱.
10287
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
10288
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
10289
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
10290
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
10291
		#必填參數:
10292
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
10293
		$conf["variableCheck.checkArguments"]["varInput"]=&$conf;
10294
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
10295
		$conf["variableCheck.checkArguments"]["mustBeFilledVariableName"]=array("addActionPage","goBackActionPage");
10296
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double");
10297
		$conf["variableCheck.checkArguments"]["mustBeFilledVariableType"]=array("string","string");
10298
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
10299
		$conf["variableCheck.checkArguments"]["referenceVarKey"]="variableCheck.checkArguments";
10300
		#可省略參數:
10301
		#$conf["variableCheck.checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"false"。
10302
		#$conf["variableCheck.checkArguments"]["canBeEmptyString"]="false";
10303
		#$conf["variableCheck.checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
10304
		$conf["variableCheck.checkArguments"]["skipableVariableName"]=array("addActionPresentPage","addButtonName","addButtonStyleName","goBackActionPresentPage","goBackButtonName","goBackButtonStyleName");
10305
		#$conf["variableCheck.checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
10306
		$conf["variableCheck.checkArguments"]["skipableVariableType"]=array("string","string","string","string","string","string");
10307
		#$conf["variableCheck.checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,"null"代表不指定.
10308
		$conf["variableCheck.checkArguments"]["skipableVarDefaultValue"]=array("_self","新增","__simpleButtonLinkDefaultButtonCssStyle","_self","回上頁","__simpleButtonLinkDefaultButtonCssStyle");
10309
		$checkResult=variableCheck::checkArguments($conf["variableCheck.checkArguments"]);
10310
		unset($conf["variableCheck.checkArguments"]);
10311
 
10312
		#如果檢查失敗
10313
		if($checkResult["status"]=="false"){
10314
 
10315
			#設置執行不正常
10316
			$result["status"]="false";
10317
 
10318
			#程式停止執行
10319
			$result["error"]=$checkResult;
10320
 
10321
			#回傳結果
10322
			return $result;
10323
 
10324
			}#if end
10325
 
10326
		#如果檢查不通過
10327
		if($checkResult["passed"]=="false"){
10328
 
10329
			#設置執行不正常
10330
			$result["status"]="false";
10331
 
10332
			#程式停止執行
10333
			$result["error"]=$checkResult;
10334
 
10335
			#回傳結果
10336
			return $result;
10337
 
10338
			}#if end
10339
 
10340
		#新增的按鈕
10341
		#函式說明:
10342
		#放置按鈕
10343
		#回傳結果:
10344
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
10345
		#$result["function"],當前執行的函數.
10346
		#$result["error"],錯誤訊息陣列.
10347
		#$result["content"],按鈕語法.
10348
		#必填參數:
10349
		$conf["form::button"]["buttonDisplayValue"]=$conf["addButtonName"];#爲按鈕上顯示的文字。
10350
		#可省略參數:
10351
		$conf["form::button"]["buttonStyleName"]=$conf["addButtonStyleName"];#可省略,爲按鈕所要使用的css樣式類別名稱,預設的css樣式爲 __simpleButtonLinkDefaultButtonCssStyle 。
10352
			#其屬性爲   "width","height","font-size","text-align"
10353
			#其屬性值爲 "100%" ,  "50"  ,    "30"   ,   "center"
10354
		#$conf["buttonActionScriptFunction"]="";#可省略,爲按下按鈕時所要執行的javaScript函式,預設不設定。
10355
			#"document.forms.formName.submit()"爲傳送名爲testForm的表單內容
10356
			#"window.print()"爲使用瀏覽器內建工具列印當前網頁
10357
		#$conf["buttonBorder"]="";#可省略,爲IE9內會自動產生外框,此爲外框的厚度,屬性值爲正整數,預設爲0。
10358
		#$conf["disabled"]="true";#可省略,為按鈕的功能是否要取消,若為"true"則代表要取消,若為"false"則代表功能正常,預設為"false".
10359
		#$conf["tableStart"]="true";#爲是否要表格開始。"false"代表否,"true"代表是。預設爲"false"。
10360
		#$conf["tableClass"]="";#表格要套用的css樣式,若省略的話,則預設爲 __defaultTbaleCsssStyle 其屬性爲 table-layout:fixed word-break:break-all width:100% ,須搭配 $conf["tablStart"] 與 $conf["tableEnd"] 使用。
10361
		#$conf["trStart"]="true";#爲是否要以<tr>開頭,"true"表示"是"。也可以看作新的一列開始,預設為"false".
10362
		#$conf["trClass"]="__withoutBorder";#<tr>要套用的css樣式,預設為"__withoutBorder",亦即沒有框線的樣式;"__withBorder"則爲有框線的樣式
10363
		#$conf["tdStart"]="true";#爲是否要以<td>開頭,"true"表示"是"。也可以看成列裏面的元素開始,預設為"false".
10364
		#$conf["tdClass"]="__withoutBorder";#<td>要套用的css樣式,"__withoutBorder"爲沒有框線的樣式;__withBorder爲有框線的樣式
10365
		#$conf["tdEnd"]="true";#爲是否要以</td>結尾,"true"表示"是"。也可以看成列裏面的元素結束,預設為"false".
10366
		#$conf["trEnd"]="true";#爲是否要以</tr>結尾,"true"表示"是"。也可以看作該列結束,預設為"false".
10367
		#$conf["tableEnd"]="true";#爲是否要表格結束。"false"代表否,"true"代表是,預設爲"false"。
10368
		$conf["form::button"]["formStart"]="true";#爲是否要表單開始,如果爲"true"則代表要表單開始,預設為"false".
10369
		$conf["form::button"]["action"]=$conf["addActionPage"];#爲表單要傳送到哪個頁面,須搭配$conf["formStart"]與$conf["formEnd"]參數使用
10370
		$conf["form::button"]["target"]=$conf["addActionPresentPage"];#為目標表單顯示的方式,若沒設定則預設爲"_self",其他可用的參數爲 "_blank"、"_parent"、"_top",也可以是iframe的名稱。須搭配$conf["formStart"]與$conf["formEnd"]參數使用
10371
		$conf["form::button"]["formEnd"]="true";#爲是否要表單結束,如果爲"true"則代表要表單結束,預設為"false".
10372
		#參考資料:
10373
		#http://stackoverflow.com/questions/3014649/how-to-disable-html-button-using-javascript
10374
		$addButton=form::button($conf["form::button"]);
10375
		unset($conf["form::button"]);
10376
 
10377
		#如果建立新增按鈕失敗
10378
		if($addButton["status"]=="false"){
10379
 
10380
			#設置執行不正常
10381
			$result["status"]="false";
10382
 
10383
			#程式停止執行
10384
			$result["error"]=$addButton;
10385
 
10386
			#回傳結果
10387
			return $result;
10388
 
10389
			}#if end
10390
 
10391
		#回前頁的按鈕
10392
		#函式說明:
10393
		#放置按鈕
10394
		#回傳結果:
10395
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
10396
		#$result["function"],當前執行的函數.
10397
		#$result["error"],錯誤訊息陣列.
10398
		#$result["content"],按鈕語法.
10399
		#必填參數:
10400
		$conf["form::button"]["buttonDisplayValue"]=$conf["goBackButtonName"];#爲按鈕上顯示的文字。
10401
		#可省略參數:
10402
		$conf["form::button"]["buttonStyleName"]=$conf["goBackButtonStyleName"];#可省略,爲按鈕所要使用的css樣式類別名稱,預設的css樣式爲 __simpleButtonLinkDefaultButtonCssStyle 。
10403
			#其屬性爲   "width","height","font-size","text-align"
10404
			#其屬性值爲 "100%" ,  "50"  ,    "30"   ,   "center"
10405
		#$conf["buttonActionScriptFunction"]="";#可省略,爲按下按鈕時所要執行的javaScript函式,預設不設定。
10406
			#"document.forms.formName.submit()"爲傳送名爲testForm的表單內容
10407
			#"window.print()"爲使用瀏覽器內建工具列印當前網頁
10408
		#$conf["buttonBorder"]="";#可省略,爲IE9內會自動產生外框,此爲外框的厚度,屬性值爲正整數,預設爲0。
10409
		#$conf["disabled"]="true";#可省略,為按鈕的功能是否要取消,若為"true"則代表要取消,若為"false"則代表功能正常,預設為"false".
10410
		#$conf["tableStart"]="true";#爲是否要表格開始。"false"代表否,"true"代表是。預設爲"false"。
10411
		#$conf["tableClass"]="";#表格要套用的css樣式,若省略的話,則預設爲 __defaultTbaleCsssStyle 其屬性爲 table-layout:fixed word-break:break-all width:100% ,須搭配 $conf["tablStart"] 與 $conf["tableEnd"] 使用。
10412
		#$conf["trStart"]="true";#爲是否要以<tr>開頭,"true"表示"是"。也可以看作新的一列開始,預設為"false".
10413
		#$conf["trClass"]="__withoutBorder";#<tr>要套用的css樣式,預設為"__withoutBorder",亦即沒有框線的樣式;"__withBorder"則爲有框線的樣式
10414
		#$conf["tdStart"]="true";#爲是否要以<td>開頭,"true"表示"是"。也可以看成列裏面的元素開始,預設為"false".
10415
		#$conf["tdClass"]="__withoutBorder";#<td>要套用的css樣式,"__withoutBorder"爲沒有框線的樣式;__withBorder爲有框線的樣式
10416
		#$conf["tdEnd"]="true";#爲是否要以</td>結尾,"true"表示"是"。也可以看成列裏面的元素結束,預設為"false".
10417
		#$conf["trEnd"]="true";#爲是否要以</tr>結尾,"true"表示"是"。也可以看作該列結束,預設為"false".
10418
		#$conf["tableEnd"]="true";#爲是否要表格結束。"false"代表否,"true"代表是,預設爲"false"。
10419
		$conf["form::button"]["formStart"]="true";#爲是否要表單開始,如果爲"true"則代表要表單開始,預設為"false".
10420
		$conf["form::button"]["action"]=$conf["goBackActionPage"];#爲表單要傳送到哪個頁面,須搭配$conf["formStart"]與$conf["formEnd"]參數使用
10421
		$conf["form::button"]["target"]=$conf["goBackActionPresentPage"];#為目標表單顯示的方式,若沒設定則預設爲"_self",其他可用的參數爲 "_blank"、"_parent"、"_top",也可以是iframe的名稱。須搭配$conf["formStart"]與$conf["formEnd"]參數使用
10422
		$conf["form::button"]["formEnd"]="true";#爲是否要表單結束,如果爲"true"則代表要表單結束,預設為"false".
10423
		#參考資料:
10424
		#http://stackoverflow.com/questions/3014649/how-to-disable-html-button-using-javascript
10425
		$backButton=form::button($conf["form::button"]);
10426
		unset($conf["form::button"]);
10427
 
10428
		#如果建立回上頁按鈕失敗
10429
		if($backButton["status"]=="false"){
10430
 
10431
			#設置執行不正常
10432
			$result["status"]="false";
10433
 
10434
			#程式停止執行
10435
			$result["error"]=$backButton;
10436
 
10437
			#回傳結果
10438
			return $result;
10439
 
10440
			}#if end
10441
 
10442
		#函式說明:
10443
		#建立列的元素,以及指定裏面要放什麼內容
10444
		#回傳的變數:
10445
		#$result["status"],執行是否正常,"true"為正常,"false"為不正常.
10446
		#$result["error"],錯誤訊息陣列.
10447
		#$result["function"],當前執行的函數名稱.
10448
		#$result["content"],建立列元素的語法.
10449
		#必填參數:
10450
		$conf["table"]["printRow"]["trClass"]="__withoutBorder";#列的樣式,"__withoutBorder"爲沒有框線的樣式;__withBorder爲有框線的樣式
10451
		$conf["table"]["printRow"]["tdClass"]="__withoutBorder";#行的樣式,"__withoutBorder"爲沒有框線的樣式;__withBorder爲有框線的樣式
10452
		$conf["table"]["printRow"]["tdContent"]=array($backButton["content"],$addButton["content"]);#列裏面要放的元素是?如果要空一列則可以輸array("&nbsp;")
10453
		#可省略參數:
10454
		$conf["table"]["printRow"]["tableStartClass"]="__withoutBorder";#列的樣式,"__withoutBorder"爲沒有框線的樣式;__withBorder爲有框線的樣式
10455
		#$conf["tableBorder"]="1px";#表格的厚度預設為"1px"
10456
		$conf["table"]["printRow"]["tableStart"]="true";#爲是否要表格開始,"true"表示"是"。
10457
		$conf["table"]["printRow"]["tableEnd"]="true";#爲是否要表格結束,"true"表示"是"。
10458
		#$conf["formStart"]="true";#是否要有表單的開始
10459
		#$conf["formName"]="";#該表單的名稱
10460
		#$conf["formAction"]="";#表單提交的目的地,若$conf["formStart"]有設置,則該參數也要設置
10461
		#$conf["formTarget"]="_self";#為顯示的方式,若沒設定則預設爲"_self",其他可用的參數爲 "_blank"、"_parent"、"_top",也可以是iframe的名稱。
10462
		#$conf["formEnd"]="true";#是否要有表單的結束
10463
		$printRow=table::printRow($conf["table"]["printRow"]);
10464
		unset($conf["table"]["printRow"]);
10465
 
10466
		#如果建立一列表格失敗
10467
		if($printRow["status"]=="false"){
10468
 
10469
			#設置執行不正常
10470
			$result["status"]="false";
10471
 
10472
			#程式停止執行
10473
			$result["error"]=$printRow;
10474
 
10475
			#回傳結果
10476
			return $result;
10477
 
10478
			}#if end
10479
 
10480
		#串接一列表格
10481
		$result["content"]=$result["content"].$printRow["content"];
10482
 
10483
		#設置執行成功
10484
		$result["status"]="true";
10485
 
10486
		#回傳結果
10487
		return $result;
10488
 
10489
		}#函式 simpleControlPanel 結束
10490
 
10491
	/*
10492
	#函式說明:
10493
	#移除東西的確認視窗.
10494
	#回傳結果:
10495
	#$result["status"],執行是否正常,"true"代表正常;"false"代表有問題
10496
	#$reuslt["error"],錯誤訊息陣列
10497
	#$result["function"],當前執行的函數名稱
10498
	#$result["content"],語法
10499
	#必填參數:
10500
	$conf["itemName"]="";#爲要刪除的物件提示名稱,格式爲字串。
10501
	$conf["cancleActionPage"]="";#爲按下取消按鈕後,要交給那個頁面處理。
10502
	$conf["removeActionPage"]="";#爲移除按鈕傳送的內容要交給哪一個頁面處理。
10503
	#可省略參數:
10504
	#$conf["itemNameFontColor"]="";#可省略預設爲 "#000000"(黑色),爲要刪除物件提示名稱文字的字型顏色,格式範圍爲 #000000~#FFFFFF。
10505
	#$conf["dbAddress"]=$dbAddress;#資料庫的位置.
10506
	#$conf["dbName"]=$dbName;#連線到資料庫的名稱.
10507
	#$conf["dtName"]="";#目標資料所屬資料表名稱.
10508
	#$conf["dbAccount"]=$dbAccount;#連線到資料庫的帳號名稱.
10509
	#$conf["dbPassword"]=$dbPassword;#連線到資料庫的帳號密碼.
10510
	#$conf["indexColumnName"]="id";#用於識別要移除資料的索引鍵欄位名稱,預設為"id".
10511
	#$conf["indexColumnValue"]="";#用於識別要移除資料的索引鍵欄位數值內容。
10512
	#$conf["columnForComment"]=array();#陣列字串,為要從資料庫取出作為要除物件的提示文字的資料表欄位名稱陣列。
10513
	#$conf["commentsName"]=array();#陣列字串,為要從資料庫取出作為要除物件的提示文字的資料表欄位名的顯示名稱,預設跟 $conf["columnForComment"] 一樣.
10514
	#$conf["cancleActionDisplayMethod"]="";#可省略,預設爲"_top",爲按下取消按鈕後,交給的處理的頁面要怎麼顯現,類型爲字串,可能值有 "_top" "_self" "_blank" "_blank"
10515
	#$conf["cancleButtonStyle"]="";#可省略,爲取消鈕的css樣式類別名稱,預設為"__qbpwcf_button".
10516
	#$conf["cancleButtonDisplayName"]="";#可省略,預設爲"取消",爲取消鈕的顯示名稱。
10517
	#$conf["cancleSendingVarName"]=array("");#爲按下取消按鈕後要傳送的數值名稱
10518
	#$conf["cancleSendingVarValue"]=array("");#爲按下取消按鈕後要傳送的數值內容
10519
	#$conf["removeActionDisplayMethod"]="";#可省略預設爲"_top",爲處理移除內容的頁面要如何顯現,類型爲字串,可能值有 "_top" "_self" "_blank" "_blank"
10520
	#$conf["removeButtonStyle"]="";#可省略,爲移除按鈕的css樣式類別名稱,,預設為"__qbpwcf_button".
10521
	#$conf["removeButtonDisplayName"]="";#可省略,預設爲"確認移除",爲移除按鈕的顯示文字內容
10522
	#$conf["removeSendingVarName"]=array("");#爲按下移除按鈕後要傳送的數值名稱
10523
	#$conf["removeSendingVarValue"]=array("");#爲按下移除按鈕後要傳送的數值內容
10524
	#參考資料:
10525
	#無.
10526
	#備註:
10527
	#建議參數 $conf["indexColumnName"] 與 $conf["indexColumnValue"] 的形態為字串陣列,以便擁有更多限制條件取得需要的資料.
10528
	*/
10529
	public static function removeConfirm(&$conf){
10530
 
10531
		#初始化要回傳的內容
10532
		$result=array();
10533
 
10534
		#初始化要回傳的語法
10535
		$result["content"]="";
10536
 
10537
		#記錄當前執行的函數名稱
10538
		$result["function"]=__FUNCTION__;
10539
 
10540
		#如果 $conf 不為陣列
10541
		if(gettype($conf)!="array"){
10542
 
10543
			#設置執行失敗
10544
			$result["status"]="false";
10545
 
10546
			#設置執行錯誤訊息
10547
			$result["error"][]="\$conf變數須為陣列形態";
10548
 
10549
			#如果傳入的參數為 null
10550
			if($conf==null){
10551
 
10552
				#設置執行錯誤訊息
10553
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
10554
 
10555
				}#if end
10556
 
10557
			#回傳結果
10558
			return $result;
10559
 
10560
			}#if end
10561
 
10562
		#檢查參數:
10563
		#函式說明:
10564
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
10565
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
10566
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
10567
		#$result["function"],當前執行的函式名稱.
10568
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
10569
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
10570
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
10571
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
10572
		#必填參數:
10573
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
10574
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
10575
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
10576
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("itemName","cancleActionPage","removeActionPage");
10577
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double");
10578
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string","string");
10579
		#可省略參數:
10580
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
10581
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
10582
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
10583
		#$conf["variableCheck::checkArguments"]["skipableVariableName"]=array();
10584
		$conf["variableCheck::checkArguments"]["skipableVariableName"][]="dbAddress";
10585
		$conf["variableCheck::checkArguments"]["skipableVariableName"][]="dbName";
10586
		$conf["variableCheck::checkArguments"]["skipableVariableName"][]="dbAccount";
10587
		$conf["variableCheck::checkArguments"]["skipableVariableName"][]="dbPassword";
10588
		$conf["variableCheck::checkArguments"]["skipableVariableName"][]="dtName";
10589
		$conf["variableCheck::checkArguments"]["skipableVariableName"][]="indexColumnName";
10590
		$conf["variableCheck::checkArguments"]["skipableVariableName"][]="indexColumnValue";
10591
		$conf["variableCheck::checkArguments"]["skipableVariableName"][]="columnForComment";
10592
		$conf["variableCheck::checkArguments"]["skipableVariableName"][]="commentsName";
10593
		$conf["variableCheck::checkArguments"]["skipableVariableName"][]="itemNameFontColor";
10594
		$conf["variableCheck::checkArguments"]["skipableVariableName"][]="cancleButtonDisplayName";
10595
		$conf["variableCheck::checkArguments"]["skipableVariableName"][]="cancleActionDisplayMethod";
10596
		$conf["variableCheck::checkArguments"]["skipableVariableName"][]="cancleButtonStyle";
10597
		$conf["variableCheck::checkArguments"]["skipableVariableName"][]="cancleSendingVarName";
10598
		$conf["variableCheck::checkArguments"]["skipableVariableName"][]="cancleSendingVarValue";
10599
		$conf["variableCheck::checkArguments"]["skipableVariableName"][]="removeButtonDisplayName";
10600
		$conf["variableCheck::checkArguments"]["skipableVariableName"][]="removeActionDisplayMethod";
10601
		$conf["variableCheck::checkArguments"]["skipableVariableName"][]="removeButtonStyle";
10602
		$conf["variableCheck::checkArguments"]["skipableVariableName"][]="removeSendingVarName";
10603
		$conf["variableCheck::checkArguments"]["skipableVariableName"][]="removeSendingVarValue";
10604
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
10605
		#$conf["variableCheck::checkArguments"]["skipableVariableType"]=array();
10606
		$conf["variableCheck::checkArguments"]["skipableVariableType"][]="string";
10607
		$conf["variableCheck::checkArguments"]["skipableVariableType"][]="string";
10608
		$conf["variableCheck::checkArguments"]["skipableVariableType"][]="string";
10609
		$conf["variableCheck::checkArguments"]["skipableVariableType"][]="string";
10610
		$conf["variableCheck::checkArguments"]["skipableVariableType"][]="string";
10611
		$conf["variableCheck::checkArguments"]["skipableVariableType"][]="string";
10612
		$conf["variableCheck::checkArguments"]["skipableVariableType"][]="string";
10613
		$conf["variableCheck::checkArguments"]["skipableVariableType"][]="array";
10614
		$conf["variableCheck::checkArguments"]["skipableVariableType"][]="array";
10615
		$conf["variableCheck::checkArguments"]["skipableVariableType"][]="string";
10616
		$conf["variableCheck::checkArguments"]["skipableVariableType"][]="string";
10617
		$conf["variableCheck::checkArguments"]["skipableVariableType"][]="string";
10618
		$conf["variableCheck::checkArguments"]["skipableVariableType"][]="string";
10619
		$conf["variableCheck::checkArguments"]["skipableVariableType"][]="array";
10620
		$conf["variableCheck::checkArguments"]["skipableVariableType"][]="array";
10621
		$conf["variableCheck::checkArguments"]["skipableVariableType"][]="string";
10622
		$conf["variableCheck::checkArguments"]["skipableVariableType"][]="string";
10623
		$conf["variableCheck::checkArguments"]["skipableVariableType"][]="string";
10624
		$conf["variableCheck::checkArguments"]["skipableVariableType"][]="array";
10625
		$conf["variableCheck::checkArguments"]["skipableVariableType"][]="array";
10626
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
10627
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array();
10628
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"][]=null;
10629
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"][]=null;
10630
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"][]=null;
10631
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"][]=null;
10632
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"][]=null;
10633
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"][]="id";
10634
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"][]=null;
10635
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"][]=null;
10636
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"][]="\$conf[\"columnForComment\"]";
10637
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"][]="#000000";
10638
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"][]="取消";
10639
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"][]="_top";
10640
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"][]="__qbpwcf_button";
10641
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"][]=null;
10642
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"][]=null;
10643
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"][]="確認移除";
10644
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"][]="_top";
10645
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"][]="__qbpwcf_button";
10646
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"][]=null;
10647
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"][]=null;
10648
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
10649
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
10650
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
10651
		#$conf["arrayCountEqualCheck"][]=array();
10652
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
10653
		unset($conf["variableCheck::checkArguments"]);
10654
 
10655
		#如果檢查出錯
10656
		if($checkResult["status"]=="false"){
10657
 
10658
			#設置執行錯誤
10659
			$result["status"]="false";
10660
 
10661
			#設置錯誤訊息
10662
			$result["error"]=$checkResult;
10663
 
10664
			#回傳結果
10665
			return $result;
10666
 
10667
			}#if end
10668
 
10669
		#如果檢查不通過
10670
		if($checkResult["passed"]=="false"){
10671
 
10672
			#設置執行錯誤
10673
			$result["status"]="false";
10674
 
10675
			#設置錯誤訊息
10676
			$result["error"]=$checkResult;
10677
 
10678
			#回傳結果
10679
			return $result;
10680
 
10681
			}#if end
10682
 
10683
		#取消移除的按鈕
10684
		#函式說明:
10685
		#一個簡單的按鈕,按了可以到指定的頁面,同時也可以傳送多個隱藏的變數
10686
		#回傳的結果
10687
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
10688
		#$result["error"],錯誤訊息陣列
10689
		#$result["function"],當前執行的函數名稱.
10690
		#$result["content"],語法內容
10691
		#必填參數:
10692
		$conf["form::sendHugeDataButton"]["buttonDisplayValue"]=$conf["cancleButtonDisplayName"];#按鈕上要顯示的文字
10693
		#可省略參數:
10694
		$conf["form::sendHugeDataButton"]["buttonStyleName"]=$conf["cancleButtonStyle"];#按鈕的css樣式應該爲何,若省略的話預設會採用 __simpleButtonLinkDefaultButtonCssStyle 的樣式,其設定為"width:100%;height:50;font-size:30;text-align:center;
10695
 
10696
		#如果 $conf["cancleSendingVarName"] 有存在
10697
		if(isset($conf["cancleSendingVarName"])){
10698
 
10699
			$conf["form::sendHugeDataButton"]["hiddenVarName"]=$conf["cancleSendingVarName"];#要傳送的隱藏變數名稱,與 $conf["hiddenVarContent"] 相對應。
10700
 
10701
			}#if end
10702
 
10703
		#如果 $conf["cancleSendingVarValue"] 有設定
10704
		if(isset($conf["cancleSendingVarValue"])){
10705
 
10706
			$conf["form::sendHugeDataButton"]["hiddenVarContent"]=$conf["cancleSendingVarValue"];#要傳誦的隱藏變數內容,與 $conf["hiddenVarName"] 相對應。
10707
 
10708
			}#if end
10709
 
10710
		#$conf["disabled"]="true";#可省略,為按鈕的功能是否要取消,若為"true"則代表要取消,若為"false"則代表功能正常,預設為"false".
10711
		$conf["form::sendHugeDataButton"]["formStart"]="true";#爲是否要表單開始,如果爲"true"則代表要表單開始,預設爲"false".
10712
		#$conf["form::sendHugeDataButton"]["method"]=;#爲傳輸的方法,若沒設定則預設爲post,其他可用的參數爲get。
10713
		#$conf["formName"]="";#該表單的名稱
10714
		$conf["form::sendHugeDataButton"]["actionPage"]=$conf["cancleActionPage"];#按鈕按了之後要到哪個地方?若爲 $_SERVER["PHP_SELF"],則爲回到目前頁面。
10715
		#$conf["buttonActionScriptFunction"]="";#可省略,爲按下按鈕時所要執行的javaScript函式,預設不設定。
10716
			#可以是"document.forms.formName.submit()"(傳送名爲testForm的表單內容).
10717
		$conf["form::sendHugeDataButton"]["formEnd"]="true";#爲是否要表單結束,如果爲"true"則代表要表單結束,預設爲"false"
10718
		#$conf["tableStart"]="true";#爲是否要表格開始,"true"表示"是",預設為"false".
10719
		#$conf["tableClass"]="__withoutBorder";#爲表格要採用的css樣式名稱,"__withoutBorder"代表沒有框線的預設樣式;"__withBorder"代表有框線的預設樣式,預設為"__withoutBorder".
10720
		#$conf["trStart"]="true";#爲是否要以<tr>開頭,"true"表示"是"。也可以看作新的一列開始,預設為"false".
10721
		#$conf["trClass"]="__withoutBorder";#列開始的css樣式,"__withoutBorder"代表沒有框線的預設樣式;"__withBorder"代表有框線的預設樣式,預設為"__withoutBorder"
10722
		#$conf["tdStart"]="true";#爲是否要以<td>開頭,"true"表示"是"。也可以看成列裏面的元素開始,預設為"false"
10723
		#$conf["tdClass"]="__withoutBorder";#行開始的css樣式,"__withoutBorder"代表沒有框線的預設樣式;"__withBorder"代表有框線的預設樣式,預設為"__withoutBorder"
10724
		#$conf["tdEnd"]="true";#爲是否要以</td>結尾,"true"表示"是"。也可以看成列裏面的元素結束,預設為"false".
10725
		#$conf["trEnd"]="true";#爲是否要以</tr>結尾,"true"表示"是"。也可以看作該列結束,預設為"false".
10726
		$conf["form::sendHugeDataButton"]["displayTarget"]=$conf["cancleActionDisplayMethod"];#頁面的呈現方法,可以是開新視窗(_blank)、在目前頁面、頁框裏面(_self)、在父頁面(_parent)、最上層頁面(_top),預設為"_top"。
10727
		#$conf["tableEnd"]="true";#爲是否要表格結束,"true"表示"是",預設為"false".
10728
		$cancleButton=form::sendHugeDataButton($conf["form::sendHugeDataButton"]);
10729
		unset($conf["form::sendHugeDataButton"]);
10730
 
10731
		#如果取消按鈕建立失敗
10732
		if($cancleButton["status"]==="false"){
10733
 
10734
			#設置執行錯誤
10735
			$result["status"]="false";
10736
 
10737
			#設置錯誤訊息
10738
			$result["error"]=$cancleButton;
10739
 
10740
			#回傳結果
10741
			return $result;
10742
 
10743
			}#if end
10744
 
10745
		#串接取消按鈕的語法
10746
		$conf["table.printColumn"]["tdContent"][]=$cancleButton["content"];
10747
 
10748
		#創建提示文字的css樣式
10749
		#函式說明:
10750
		#創建 css 樣式
10751
		#回傳結果:
10752
		#$result["css"],css設定內容
10753
		#$result["error"],函式錯誤訊息,若爲""則表示沒有錯誤
10754
		#必填參數:
10755
		$conf["css.createCssStyle"]["cssStyleName"]="__removeConfiremStrCssStyle";#為該 css 樣式的名稱,不能以數字開頭。
10756
		$conf["css.createCssStyle"]["attributes"]=array("text-align","font-size","color");#為屬性名稱,須為陣列值
10757
		$conf["css.createCssStyle"]["content"]=array("center","30px",$conf["itemNameFontColor"]);#為屬性值,須為陣列值
10758
		$css=css::createCssStyle($conf["css.createCssStyle"]);
10759
		unset($conf["css.createCssStyle"]);
10760
 
10761
		#如果css樣式建立失敗
10762
		if($css["status"]=="false"){
10763
 
10764
			#設置執行失敗
10765
			$result["status"]="false";
10766
 
10767
			#設置錯誤訊息
10768
			$result["error"]=$css;
10769
 
10770
			#回傳結果
10771
			return $result;
10772
 
10773
			}#if end
10774
 
10775
		#傳接css語法
10776
		$result["content"]=$result["content"].$css["content"];
10777
 
10778
		#確認移除的文字
10779
		#函式說明:
10780
		#<span>區塊,裡面可以指定css的class樣式,可以指定提示文字.
10781
		#$result["status"],字串,執行否正常,"true"代表正常,"false"代表不正常.
10782
		#$result["functin"],字串,當前函數的名稱.
10783
		#$result["error"],陣列,錯訊訊息.
10784
		#$result["content"],字串,含有<span>標籤的內容.
10785
		#必填參數:
10786
		#$conf["contentArray"],字串陣列,要放入的內容陣列.
10787
		$conf["css::spanSection"]["contentArray"]=array("您確定要移除該 「".$conf["itemName"]."」 嗎?");
10788
		#可省略參數
10789
		#$conf["class"],字串,div區段要套用的css樣式.
10790
		$conf["css::spanSection"]["class"]="__removeConfiremStrCssStyle";
10791
		#$conf["title"],陣列,滑鼠移到上面時要顯示的內容,每個元素代表一列內容
10792
		#$conf["title"]=array();
10793
		$spanSection=css::divSection($conf["css::spanSection"]);
10794
		unset($conf["css::spanSection"]);
10795
 
10796
		#如果 spanSection 建立失敗
10797
		if($spanSection["status"]=="false"){
10798
 
10799
			#設置執行失敗
10800
			$result["status"]="false";
10801
 
10802
			#設置錯誤訊息
10803
			$result["error"]=$spanSection;
10804
 
10805
			#回傳結果
10806
			return $result;
10807
 
10808
			}#if end
10809
 
10810
		#串接提示訊息
10811
		$conf["table.printColumn"]["tdContent"][]=$spanSection["content"];
10812
 
10813
		#如果 $conf["indexColumnValue"] 有設定
10814
		if(isset($conf["indexColumnValue"]) && isset($conf["dbName"]) && isset($conf["dbAddress"]) && isset($conf["dbAccount"]) && isset($conf["dtName"])){
10815
 
10816
			#如果 $conf["columnForComment"] 有設定
10817
			if(isset($conf["columnForComment"])){
10818
 
10819
				#函式說明:
10820
				#<span>區塊,裡面可以指定css的class樣式,可以指定提示文字.
10821
				#$result["status"],字串,執行否正常,"true"代表正常,"false"代表不正常.
10822
				#$result["functin"],字串,當前函數的名稱.
10823
				#$result["error"],陣列,錯訊訊息.
10824
				#$result["content"],字串,含有<span>標籤的內容.
10825
				#必填參數:
10826
				#$conf["contentArray"],字串陣列,要放入的內容陣列.
10827
				$conf["css::spanSection"]["contentArray"]=array("相關資訊如下所示:");
10828
				#可省略參數
10829
				#$conf["class"],字串,div區段要套用的css樣式.
10830
				$conf["css::spanSection"]["class"]="__removeConfiremStrCssStyle";
10831
				#$conf["title"],陣列,滑鼠移到上面時要顯示的內容,每個元素代表一列內容
10832
				#$conf["title"]=array();
10833
				$spanSection=css::divSection($conf["css::spanSection"]);
10834
				unset($conf["css::spanSection"]);
10835
 
10836
				#如果 spanSection 建立失敗
10837
				if($spanSection["status"]=="false"){
10838
 
10839
					#設置執行失敗
10840
					$result["status"]="false";
10841
 
10842
					#設置錯誤訊息
10843
					$result["error"]=$spanSection;
10844
 
10845
					#回傳結果
10846
					return $result;
10847
 
10848
					}#if end
10849
 
10850
				#串接提示訊息
10851
				$conf["table.printColumn"]["tdContent"][]=$spanSection["content"];
10852
 
10853
				#取得特定資料的指定欄位資料
10854
				#函式說明:
10855
				#一次取得資料庫、表的資料
10856
				#回傳的結果
10857
				#$result["status"],執行結果"true"為成功;"false"為執行失敗。
10858
				#$result["error"],錯誤訊息陣列。
10859
				#$result["dataColumnName"],抓取的資料欄位名稱陣列.
10860
					#$result["dataColumnName"][$i]代表第$i+1個欄位名稱
10861
				#$result["dataContent"],爲資料的內容。
10862
				#$result["dataContent"][$conf["WhereColumnName"][$i]][$dataSetNum]
10863
					#$dataSetNum 爲第$dataSetNum+1筆資料
10864
					#$conf["WhereColumnName"][$i] 爲第 $i+1 個欄位的名稱
10865
				#$result["dataCount"],爲取得的資料筆數。
10866
				#$result["sql"],執行的sql字串.
10867
				#必填參數:
10868
				$conf["db.fastGetDbData"]["dbAddress"]=$conf["dbAddress"];#爲dbServer的位置。
10869
				$conf["db.fastGetDbData"]["dbAccount"]=$conf["dbAccount"];#爲登入dbServer的帳號。
10870
				$conf["db.fastGetDbData"]["dbName"]=$conf["dbName"];#爲要存取的資料庫名稱
10871
				$conf["db.fastGetDbData"]["tableName"]=$conf["dtName"];#爲要存取的資料表名稱
10872
				$conf["db.fastGetDbData"]["columnYouWant"]=$conf["columnForComment"];#你想要的欄位!,若設為「array("*")」則代表全部欄位.
10873
				#可省略參數:
10874
 
10875
				#如果 $conf["dbPassword"] 有設定
10876
				if(isset($conf["dbPassword"])){
10877
 
10878
					$conf["db.fastGetDbData"]["dbPassword"]=$conf["dbPassword"];#爲要存取dbServer的密碼
10879
 
10880
					}#if end
10881
 
10882
				$conf["db.fastGetDbData"]["WhereColumnName"]=array($conf["indexColumnName"]);#用於判斷語句的欄位項目陣列。
10883
				$conf["db.fastGetDbData"]["WhereColumnValue"]=array($conf["indexColumnValue"]);#用於判斷語句的欄位數值陣列,若與LIKE搭配,則可以在關鍵自字串的左右名加上「%」符號,這樣就可以搜尋具有該字串的內容。
10884
				#$conf["WhereColumnCombine"]=array("");#用於判斷語句當中需要()起來的判斷式,須爲陣列值,"s"代表「(」,"e"代表「)」 ,若無則須設爲""。
10885
				#$conf["WhereColumnOperator"]=array("");#用於判斷語句的比較符號陣列,可以用的符號有「"="、">"、"<"、"LIKE"、"NOT LIKE"」,預設都爲「=」。
10886
				#$conf["WhereColumnAndOr"]=array("");#用於判斷語句條件之間成立的條件是AND還是OR,須爲陣列值。其數量應爲要判斷的欄位數量減一。
10887
				#$conf["orderItem"]="";#爲排序的項目依據,若要用隨機抽樣,可以用"rand()",可省略。
10888
				#$conf["ascORdesc"]="";#爲要低增還是遞減排序,asc爲遞增;desc爲遞減。
10889
				#$conf["numberStart"]="0";#為從第幾筆開始讀取,預設為0,代筆第一筆。
10890
				#$conf["numLimit"]="30";#為要取幾筆資料,可以省略,省略則表示不限制數目。
10891
				#$conf["groupBy"]=array("");#爲要以哪幾個欄爲作爲分羣的依據(欄位相同的數值僅會取出一筆)。
10892
				$getDbDataResult=db::fastGetDbData($conf["db.fastGetDbData"]);
10893
				unset($conf["db.fastGetDbData"]);
10894
 
10895
				#如果 查詢要刪除的資料失敗
10896
				if($getDbDataResult["status"]=="false"){
10897
 
10898
					#設置執行失敗
10899
					$result["status"]="false";
10900
 
10901
					#設置錯誤訊息
10902
					$result["error"]=$getDbDataResult;
10903
 
10904
					#回傳結果
10905
					return $result;
10906
 
10907
					}#if end
10908
 
10909
				#如果資料不足一筆
10910
				if($getDbDataResult["dataCount"]==0){
10911
 
10912
					#設置執行失敗
10913
					$result["status"]="false";
10914
 
10915
					#設置錯誤訊息
10916
					$result["error"][]="查不到要刪除的資料";
10917
 
10918
					#回傳結果
10919
					return $result;
10920
 
10921
					}#if end
10922
 
10923
				#有幾個欄位就執行幾次
10924
				for($i=0;$i<count($conf["columnForComment"]);$i++){
10925
 
10926
					#函式說明:
10927
					#可以輸入文字的區塊
10928
					#回傳結果:
10929
					#$result,語法
10930
					#必填參數:
10931
					$conf["form.inputTextArea"]["name"]="readOnly-".$i;#爲文字輸入框的名稱,供接收端辨識用。
10932
					$conf["form.inputTextArea"]["readOnly"]="true";#爲是否要爲唯讀,如果爲"true",則爲唯讀。反之則爲"false"。
10933
					#可省略參數:
10934
					#$conf["cols"]="";#爲文字輸入框的欄位數(寬),預設爲按照瀏覽器設定值。
10935
					#$conf["rows"]="";#爲文字輸入框的列數(高),預設爲按照瀏覽器設定值。
10936
					#$conf["maxInputLength"]="";#爲文字輸入的長度限制,預設無限制。
10937
					$conf["form.inputTextArea"]["defaultText"]=$getDbDataResult["dataContent"][$conf["columnForComment"][$i]][0];#爲文字輸入框裏面的預設文字內容,預設是空的。
10938
					#$conf["class"]=;#爲要套用的css樣式。如果沒有指定 ,則採用預設的css樣式,其屬性爲 "width:100%","height:120px","font-size:30px"
10939
					#$conf["jsActivitor"]="";#爲觸發js的條件,可以是"onChange"(已改變內容時)...,須搭配$conf["jsSubmitActionTarget"]參數。
10940
					#$conf["jsAction"]="";#爲該js是要做什麼,可以是"document.testForm.submit()"(傳送名爲testForm的表單內容)...,須搭配$conf["jsActivitor"]參數。
10941
					#$conf["comment"],字串,輸入方框上面要放哪些註解文字.
10942
					$conf["form.inputTextArea"]["comment"]=$conf["commentsName"][$i];
10943
					#$conf["trStart"]="true";#爲是否要以<tr>開頭,"true"表示"是"。也可以看作新的一列開始。
10944
					#$conf["tdStart"]="true";#爲是否要以<td>開頭,"true"表示"是"。也可以看成列裏面的元素開始
10945
					#$conf["tdEnd"]="true";#爲是否要以</td>結尾,"true"表示"是"。也可以看成列裏面的元素結束
10946
					#$conf["trEnd"]="true";#爲是否要以</tr>結尾,"true"表示"是"。也可以看作該列結束。
10947
					$columnData=form::inputTextArea($conf["form.inputTextArea"]);
10948
					unset($conf["form.inputTextArea"]);
10949
 
10950
					#如果 inputTextArea 建立失敗
10951
					if($columnData["status"]=="false"){
10952
 
10953
						#設置執行失敗
10954
						$result["status"]="false";
10955
 
10956
						#設置錯誤訊息
10957
						$result["error"]=$columnData;
10958
 
10959
						#回傳結果
10960
						return $result;
10961
 
10962
						}#if end
10963
 
10964
					#接上描述資訊
10965
					$conf["table.printColumn"]["tdContent"][]=$columnData["content"];
10966
 
10967
					}#for end
10968
 
10969
				}#if end
10970
 
10971
			}#if end
10972
 
10973
		#確認移除的按鈕
10974
		#函式說明:
10975
		#一個簡單的按鈕,按了可以到指定的頁面,同時也可以傳送多個隱藏的變數
10976
		#回傳的結果
10977
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
10978
		#$result["error"],錯誤訊息陣列
10979
		#$result["function"],當前執行的函數名稱.
10980
		#$result["content"],語法內容
10981
		#必填參數:
10982
		$conf["form::sendHugeDataButton"]["buttonDisplayValue"]=$conf["removeButtonDisplayName"];#按鈕上要顯示的文字
10983
		#可省略參數:
10984
		$conf["form::sendHugeDataButton"]["buttonStyleName"]=$conf["removeButtonStyle"];#按鈕的css樣式應該爲何,若省略的話預設會採用 __simpleButtonLinkDefaultButtonCssStyle 的樣式,其設定為"width:100%;height:50;font-size:30;text-align:center;
10985
 
10986
		#如果 $conf["removeSendingVarName"] 有存在
10987
		if(isset($conf["removeSendingVarName"])){
10988
 
10989
			$conf["form::sendHugeDataButton"]["hiddenVarName"]=$conf["removeSendingVarName"];#要傳送的隱藏變數名稱,與 $conf["hiddenVarContent"] 相對應。
10990
 
10991
			}#if end
10992
 
10993
		#如果 $conf["removeSendingVarValue"] 有設定
10994
		if(isset($conf["removeSendingVarValue"])){
10995
 
10996
			$conf["form::sendHugeDataButton"]["hiddenVarContent"]=$conf["removeSendingVarValue"];#要傳誦的隱藏變數內容,與 $conf["hiddenVarName"] 相對應。
10997
 
10998
			}#if end
10999
 
11000
		#$conf["disabled"]="true";#可省略,為按鈕的功能是否要取消,若為"true"則代表要取消,若為"false"則代表功能正常,預設為"false".
11001
		$conf["form::sendHugeDataButton"]["formStart"]="true";#爲是否要表單開始,如果爲"true"則代表要表單開始,預設爲"false".
11002
		#$conf["form::sendHugeDataButton"]["method"]=;#爲傳輸的方法,若沒設定則預設爲post,其他可用的參數爲get。
11003
		#$conf["formName"]="";#該表單的名稱
11004
		$conf["form::sendHugeDataButton"]["actionPage"]=$conf["removeActionPage"];#按鈕按了之後要到哪個地方?若爲 $_SERVER["PHP_SELF"],則爲回到目前頁面。
11005
		#$conf["buttonActionScriptFunction"]="";#可省略,爲按下按鈕時所要執行的javaScript函式,預設不設定。
11006
			#可以是"document.forms.formName.submit()"(傳送名爲testForm的表單內容).
11007
		$conf["form::sendHugeDataButton"]["formEnd"]="true";#爲是否要表單結束,如果爲"true"則代表要表單結束,預設爲"false"
11008
		#$conf["tableStart"]="true";#爲是否要表格開始,"true"表示"是",預設為"false".
11009
		#$conf["tableClass"]="__withoutBorder";#爲表格要採用的css樣式名稱,"__withoutBorder"代表沒有框線的預設樣式;"__withBorder"代表有框線的預設樣式,預設為"__withoutBorder".
11010
		#$conf["trStart"]="true";#爲是否要以<tr>開頭,"true"表示"是"。也可以看作新的一列開始,預設為"false".
11011
		#$conf["trClass"]="__withoutBorder";#列開始的css樣式,"__withoutBorder"代表沒有框線的預設樣式;"__withBorder"代表有框線的預設樣式,預設為"__withoutBorder"
11012
		#$conf["tdStart"]="true";#爲是否要以<td>開頭,"true"表示"是"。也可以看成列裏面的元素開始,預設為"false"
11013
		#$conf["tdClass"]="__withoutBorder";#行開始的css樣式,"__withoutBorder"代表沒有框線的預設樣式;"__withBorder"代表有框線的預設樣式,預設為"__withoutBorder"
11014
		#$conf["tdEnd"]="true";#爲是否要以</td>結尾,"true"表示"是"。也可以看成列裏面的元素結束,預設為"false".
11015
		#$conf["trEnd"]="true";#爲是否要以</tr>結尾,"true"表示"是"。也可以看作該列結束,預設為"false".
11016
		$conf["form::sendHugeDataButton"]["displayTarget"]=$conf["removeActionDisplayMethod"];#頁面的呈現方法,可以是開新視窗(_blank)、在目前頁面、頁框裏面(_self)、在父頁面(_parent)、最上層頁面(_top),預設為"_top"。
11017
		#$conf["tableEnd"]="true";#爲是否要表格結束,"true"表示"是",預設為"false".
11018
		$confirmButton=form::sendHugeDataButton($conf["form::sendHugeDataButton"]);
11019
		unset($conf["form::sendHugeDataButton"]);
11020
 
11021
		#如果取消按鈕建立失敗
11022
		if($confirmButton["status"]=="false"){
11023
 
11024
			#設置執行錯誤
11025
			$result["status"]="false";
11026
 
11027
			#設置錯誤訊息
11028
			$result["error"]=$confirmButton;
11029
 
11030
			#回傳結果
11031
			return $result;
11032
 
11033
			}#if end
11034
 
11035
		#串接確認移除按鈕的語法
11036
		$conf["table.printColumn"]["tdContent"][]=$confirmButton["content"];
11037
 
11038
		#函式說明:
11039
		#建立欄的元素,以及指定裏面要放什麼內容
11040
		#回傳的變數:
11041
		#$result["content"],建立欄元素的語法
11042
		#$result["status"],"true"代表執行成功;"false"代表執行失敗。
11043
		#$result["error"],錯誤訊息陣列
11044
		#必填參數:
11045
		$conf["table.printColumn"]["trClass"]="__withoutBorder";#列的樣式,"__withoutBorder"爲沒有框線的樣式;__withBorder爲有框線的樣式
11046
		$conf["table.printColumn"]["tdClass"]="__withoutBorder";#行的樣式,"__withoutBorder"爲沒有框線的樣式;__withBorder爲有框線的樣式
11047
		#列裏面要放的元素是?如果要空一列則可以輸array("&nbsp;")
11048
		#$conf["table.printColumn"]["tdContent"][]="";
11049
		#可省略參數:
11050
		$conf["table.printColumn"]["tableStartClass"]="__withoutBorder";#列的樣式,"__withoutBorder"爲沒有框線的樣式;__withBorder爲有框線的樣式
11051
		$conf["table.printColumn"]["tableStart"]="true";#爲是否要表格開始,"true"表示"是"。
11052
		$conf["table.printColumn"]["tableEnd"]="true";#爲是否要表格結束,"true"表示"是"。
11053
		#$conf["formStart"]="true";#是否要有表單的開始
11054
		#$conf["formName"]="";#該表單的名稱
11055
		#$conf["formAction"]="";#表單提交的目的地,若$conf["formStart"]有設置,則該參數也要設置
11056
		#$conf["formTarget"]="_self";#為顯示的方式,若沒設定則預設爲"_self",其他可用的參數爲 "_blank"、"_parent"、"_top",也可以是iframe的名稱。
11057
		#$conf["formEnd"]="true";#是否要有表單的結束
11058
		$conf["table.printColumn"]["spaceBlockAferPerElement"]="true";#是否每個欄元素(除了最後一個元素)後面都要空一列。"true"代表要空一列.預設是不空一列.
11059
		$fullTable=table::printColumn($conf["table.printColumn"]);
11060
		unset($conf["table.printColumn"]);
11061
 
11062
		#如果 表格建立失敗
11063
		if($fullTable["status"]=="false"){
11064
 
11065
			#設置執行失敗
11066
			$result["status"]="false";
11067
 
11068
			#設置錯誤訊息
11069
			$result["error"]=$fullTable;
11070
 
11071
			#回傳結果
11072
			return $result;
11073
 
11074
			}#if end
11075
 
11076
		#串接整個表格
11077
		$result["content"]=$result["content"].$fullTable["content"];
11078
 
11079
		#設置執行正常
11080
		$result["status"]="true";
11081
 
11082
		#回傳結果
11083
		return $result;
11084
 
11085
		}#function removeConfirm end
11086
 
11087
	/*
11088
	#函式說明:
11089
	#確認執行的視窗
11090
	#回傳結果:
11091
	#$result,確認執行的視窗語法
11092
	#必填參數:
11093
	$conf["actionName"]="";#要執行的動作
11094
	$conf["itemName"]="";#爲要執行的物件提示名稱,格式爲字串。
11095
	$conf["cancleActionPage"]="";#爲按下取消按鈕後,要交給那個頁面處理。
11096
	$conf["confirmActionPage"]="";#爲移除按鈕傳送的內容要交給哪一個頁面處理。
11097
	#可省略參數:
11098
	#$conf["actionFontCss"]="";#可省略,爲動作提示的字型css樣式,預設為"__actionFontCssStyle"
11099
	#$conf["itemNameFontCss"]="";#可省略預,爲物件提示的字型css樣式,預設為"__itemNameFontCssStyle"
11100
	#$conf["cancleActionDisplayMethod"]="";#可省略,預設爲"_self",爲按下取消按鈕後,交給的處理的頁面要怎麼顯現,類型爲字串,可能值有 "_top" "_self" "_blank" "_blank"
11101
	#$conf["cancleButtonStyle"]="";#可省略,爲取消鈕的css樣式類別名稱。
11102
	#$conf["cancleRequestMethod"],字串,取消要求的表單要用什麼方式傳送,預設為"post",也可以為"get".
11103
	#$conf["cancleRequestMethod"]="get";
11104
	#$conf["cancleButtonDisplayName"]="";#可省略,預設爲"取消",爲取消鈕的顯示名稱。
11105
	#$conf["cancleSendingVarName"]=array("");#爲按下取消按鈕後要傳送的數值名稱
11106
	#$conf["cancleSendingVarValue"]=array("");#爲按下取消按鈕後要傳送的數值內容
11107
	#$conf["confirmActionDisplayMethod"]="";#可省略預設爲"_self",爲處理移除內容的頁面要如何顯現,類型爲字串,可能值有 "_top" "_self" "_blank" "_blank"
11108
	#$conf["confirmButtonStyle"]="";#可省略,爲移除按鈕的css樣式類別名稱。
11109
	#$conf["confirmRequestMethod"],字串,確認要求的表單要用什麼方式傳送,預設為"post",也可以為"get".
11110
	#$conf["confirmRequestMethod"]="get";
11111
	#$conf["confirmButtonDisplayName"]="";#可省略,預設爲"確認移除",爲移除按鈕的顯示文字內容
11112
	#$conf["confirmSendingVarName"]=array("");#爲按下移除按鈕後要傳送的數值名稱
11113
	#$conf["confirmSendingVarValue"]=array("");#爲按下移除按鈕後要傳送的數值內容
11114
	#參考資料:
11115
	#無.
11116
	#備註:
11117
	#要執行動作的物件提示名稱,如果可以擺方多個資訊將會更方便。
11118
	*/
11119
	public static function customConfirm(&$conf){
11120
 
11121
		#初始化要回傳的內容
11122
		$result=array();
11123
 
11124
		#初始化要回傳的語法
11125
		$result["content"]="";
11126
 
11127
		#記錄當前執行的函數名稱
11128
		$result["function"]=__FUNCTION__;
11129
 
11130
		#如果 $conf 不為陣列
11131
		if(gettype($conf)!="array"){
11132
 
11133
			#設置執行失敗
11134
			$result["status"]="false";
11135
 
11136
			#設置執行錯誤訊息
11137
			$result["error"][]="\$conf變數須為陣列形態";
11138
 
11139
			#如果傳入的參數為 null
11140
			if($conf==null){
11141
 
11142
				#設置執行錯誤訊息
11143
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
11144
 
11145
				}#if end
11146
 
11147
			#回傳結果
11148
			return $result;
11149
 
11150
			}#if end
11151
 
11152
		#檢查參數
11153
		#函式說明:
11154
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
11155
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
11156
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
11157
		#$result["function"],當前執行的函式名稱.
11158
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
11159
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
11160
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
11161
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
11162
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
11163
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
11164
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
11165
		#必填參數:
11166
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
11167
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
11168
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
11169
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("actionName","itemName","cancleActionPage","confirmActionPage");
11170
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object");
11171
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string","string","string");
11172
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
11173
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
11174
		#可省略參數:
11175
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
11176
		#$conf["canBeEmptyString"]="false";
11177
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
11178
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("actionFontCss","itemNameFontCss","cancleActionDisplayMethod","cancleRequestMethod","confirmRequestMethod");
11179
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
11180
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string","string","string","string");
11181
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
11182
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("__qbpwcf_actionFontCssStyle","__qbpwcf_itemNameFontCssStyle","_self","post","post");
11183
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
11184
		#$conf["arrayCountEqualCheck"][]=array();
11185
		#參考資料:
11186
		#array_keys=>http://php.net/manual/en/function.array-keys.php
11187
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
11188
		unset($conf["variableCheck::checkArguments"]);
11189
 
11190
		#如果檢查不通過
11191
		if($checkResult["passed"]=="fasle"){
11192
 
11193
			#設置錯誤
11194
			$result["status"]="false";
11195
 
11196
			#設置錯誤訊息
11197
			$result["error"]=$checkResult;
11198
 
11199
			#回傳結果
11200
			return $result;
11201
 
11202
			}#if end
11203
 
11204
		#如果有指定 $conf["actionFontCss"]
11205
		if(isset($conf["actionFontCss"])){
11206
 
11207
			#套用其css樣式
11208
			$conf["actionName"]="<span class=".$conf["actionFontCss"].">".$conf["actionName"]."</span>";
11209
 
11210
			}#if end
11211
 
11212
		#如果有指定 $conf["itemNameFontCss"]
11213
		if(isset($conf["itemNameFontCss"])){
11214
 
11215
			#套用其css樣式
11216
			$conf["itemName"]="<span class=".$conf["itemNameFontCss"].">".$conf["itemName"]."</span>";
11217
 
11218
			}#if end
11219
 
11220
		#函式說明:
11221
		#表格形式的文字描述:
11222
		#回傳結果:
11223
		#$result["status"],執行是否正常,"true"代表正常;"false"代表不正常.
11224
		#$result["error"],函式錯誤訊息陣列.
11225
		#$result["content"],表格形式文字描述的語法.
11226
		#$result["function"],當前執行的函式名稱.
11227
		#必填參數:
11228
		$conf["table"]["text"]["outputString"]="您確定要 「".$conf["actionName"]."」 「".$conf["itemName"]."」 嗎?";#要印出來的文字
11229
		#可省略參數:
11230
		$conf["table"]["text"]["tableStart"]="true";#是否要表格開始<table>,"true"代表是。
11231
		$conf["table"]["text"]["tableClass"]="__withoutBorder";#為表格要套用的css樣式,若爲"__withoutBorder"的話則套用無框線的預設樣式;若爲"__withBorder"的話,則爲有框線的預設樣式。
11232
		$conf["table"]["text"]["trStart"]="true";#爲是否要以<tr>開頭,"true"表示"是"。也可以看作新的一列開始。
11233
		$conf["table"]["text"]["trClass"]="__textCssType";#爲tr的css樣式,若爲"__withoutBorder"的話則套用無框線的預設樣式;若爲"__withBorder"的話,則爲有框線的預設樣式。
11234
		$conf["table"]["text"]["tdStart"]="true";#爲是否要以<td>開頭,"true"表示"是"。也可以看成列裏面的元素開始
11235
		$conf["table"]["text"]["tdClass"]="__withoutBorder";#該 td 要套用套用的 css 樣式,若爲"__withoutBorder"的話則套用無框線的預設樣式;若爲"__withBorder"的話,則爲有框線的預設樣式。
11236
		$conf["table"]["text"]["tdEnd"]="true";#爲是否要以</td>結尾,"true"表示"是"。也可以看成列裏面的元素結束
11237
		$conf["table"]["text"]["trEnd"]="true";#爲是否要以</tr>結尾,"true"表示"是"。也可以看作該列結束。
11238
		$conf["table"]["text"]["tableEnd"]="true";#是否要表格結束</table>,"true"代表是。
11239
		$message=table::text($conf["table"]["text"]);
11240
		unset($conf["table"]);
11241
 
11242
		#如果表格文字建立失敗
11243
		if($message["status"]=="false"){
11244
 
11245
			#設置執行失敗
11246
			$result["status"]="false";
11247
 
11248
			#設置錯誤訊息
11249
			$result["error"]=$message;
11250
 
11251
			#回傳結果
11252
			return $result;
11253
 
11254
			}#if end
11255
 
11256
		#如果 $conf["cancleButtonDisplayName"] 沒有設定
11257
		if(!isset($conf["cancleButtonDisplayName"])){
11258
 
11259
			$conf["cancleButtonDisplayName"]="取消";
11260
 
11261
			}#if end
11262
 
11263
		#函式說明:
11264
		#一個簡單的按鈕,按了可以到指定的頁面。同時也可以傳送多個隱藏的變數
11265
		#回傳的結果
11266
		#$result,語法內容
11267
		#必填參數:
11268
		$conf["form"]["sendHugeDataButton"]["actionPage"]=$conf["cancleActionPage"];#按鈕按了之後要到哪個地方?若爲 $_SERVER["PHP_SELF"],則爲回到目前頁面。
11269
		$conf["form"]["sendHugeDataButton"]["buttonDisplayValue"]=$conf["cancleButtonDisplayName"];#按鈕上要顯示的文字
11270
		#可省略參數:
11271
 
11272
		#如果有設置 $conf["cancleButtonStyle"]
11273
		if(isset($conf["cancleButtonStyle"])){
11274
 
11275
			$conf["form"]["sendHugeDataButton"]["buttonStyleName"]=$conf["cancleButtonStyle"];#按鈕的css樣式應該爲何,若省略的話預設會採用 __simpleButtonLinkDefaultButtonCssStyle 的樣式
11276
			#其屬性爲   "width","height","font-size","text-align"
11277
			#其屬性值爲 "300"  ,  "50"  ,    "30"   ,   "center"
11278
		#備註:
11279
		# __simpleButtonLinkDefaultButtonCssStyle,爲預設的按鈕css樣式,請勿使用相同類別名稱的css樣式,以免衝突。
11280
 
11281
			}#if end
11282
 
11283
		#如果 $conf["cancleSendingVarName"] 有設定
11284
		if(isset($conf["cancleSendingVarName"])){
11285
 
11286
			$conf["form"]["sendHugeDataButton"]["hiddenVarName"]=$conf["cancleSendingVarName"];#要傳送的隱藏變數名稱,與 $conf["hiddenVarContent"] 相對應。
11287
 
11288
			}#if end
11289
 
11290
		#如果 $conf["cancleSendingVarValue"] 有設定
11291
		if(isset($conf["cancleSendingVarValue"])){
11292
 
11293
			$conf["form"]["sendHugeDataButton"]["hiddenVarContent"]=$conf["cancleSendingVarValue"];#要傳誦的隱藏變數內容,與 $conf["hiddenVarName"] 相對應。
11294
 
11295
			}#if end
11296
 
11297
		$conf["form"]["sendHugeDataButton"]["formStart"]="true";#爲是否要表單開始,如果爲"true"則代表要表單開始,預設爲"false".
11298
		$conf["form"]["sendHugeDataButton"]["formEnd"]="true";#爲是否要表單結束,如果爲"true"則代表要表單結束,預設爲"false"
11299
		#$conf["form"]["sendHugeDataButton"]["tableStart"]="true";#爲是否要表格開始,"true"表示"是"。
11300
		#$conf["form"]["sendHugeDataButton"]["tableClass"]="__withoutBorder";#爲表格要採用的css樣式名稱,"__withoutBorder"代表沒有框線的預設樣式;"__withBorder"代表有框線的預設樣式
11301
		#$conf["form"]["sendHugeDataButton"]["trStart"]="true";#爲是否要以<tr>開頭,"true"表示"是"。也可以看作新的一列開始。
11302
		#$conf["form"]["sendHugeDataButton"]["trClass"]="__withoutBorder";#列開始的css樣式,"__withoutBorder"代表沒有框線的預設樣式;"__withBorder"代表有框線的預設樣式
11303
		#$conf["form"]["sendHugeDataButton"]["tdStart"]="true";#爲是否要以<td>開頭,"true"表示"是"。也可以看成列裏面的元素開始
11304
		#$conf["form"]["sendHugeDataButton"]["tdClass"]="__withoutBorder";#行開始的css樣式,"__withoutBorder"代表沒有框線的預設樣式;"__withBorder"代表有框線的預設樣式
11305
		#$conf["form"]["sendHugeDataButton"]["tdEnd"]="true";#爲是否要以</td>結尾,"true"表示"是"。也可以看成列裏面的元素結束
11306
		#$conf["form"]["sendHugeDataButton"]["trEnd"]="true";#爲是否要以</tr>結尾,"true"表示"是"。也可以看作該列結束。
11307
 
11308
		$conf["form"]["sendHugeDataButton"]["method"]=$conf["cancleRequestMethod"];#爲傳輸的方法,若沒設定則預設爲post,其他可用的參數爲get。
11309
 
11310
		#如果 $conf["confirmActionDisplayMethod"] 有設定
11311
		if(isset($conf["confirmActionDisplayMethod"])){
11312
 
11313
			$conf["form"]["sendHugeDataButton"]["displayTarget"]=$conf["confirmActionDisplayMethod"];#頁面的呈現方法,可以是開新視窗(_blank)、在目前頁面、頁框裏面(_self)、在父頁面(_parent)、最上層頁面(_top)。
11314
 
11315
			}#if end
11316
 
11317
		#$conf["form"]["sendHugeDataButton"]["tableEnd"]="true";#爲是否要表格結束,"true"表示"是"。
11318
		$cancle=form::sendHugeDataButton($conf["form"]["sendHugeDataButton"]);
11319
		unset($conf["form"]["sendHugeDataButton"]);
11320
 
11321
		#如果取消的按鈕建立失敗
11322
		if($cancle["status"]=="false"){
11323
 
11324
			#設置執行失敗
11325
			$result["status"]="false";
11326
 
11327
			#設置錯誤訊息
11328
			$result["error"]=$cancle;
11329
 
11330
			#回傳結果
11331
			return $result;
11332
 
11333
			}#if end
11334
 
11335
		#如果 $conf["confirmButtonDisplayName"] 沒有設定
11336
		if(!isset($conf["confirmButtonDisplayName"])){
11337
 
11338
			$conf["confirmButtonDisplayName"]="確認";
11339
 
11340
			}#if end
11341
 
11342
		#函式說明:
11343
		#一個簡單的按鈕,按了可以到指定的頁面。同時也可以傳送多個隱藏的變數
11344
		#回傳的結果
11345
		#$result,語法內容
11346
		#必填參數:
11347
		$conf["form"]["sendHugeDataButton"]["actionPage"]=$conf["confirmActionPage"];#按鈕按了之後要到哪個地方?若爲 $_SERVER["PHP_SELF"],則爲回到目前頁面。
11348
		$conf["form"]["sendHugeDataButton"]["buttonDisplayValue"]=$conf["confirmButtonDisplayName"];#按鈕上要顯示的文字
11349
		#可省略參數:
11350
 
11351
		#如果 $conf["confirmButtonStyle"] 存在
11352
		if(isset($conf["confirmButtonStyle"])){
11353
 
11354
			$conf["form"]["sendHugeDataButton"]["buttonStyleName"]=$conf["confirmButtonStyle"];#按鈕的css樣式應該爲何,若省略的話預設會採用 __simpleButtonLinkDefaultButtonCssStyle 的樣式
11355
			#其屬性爲   "width","height","font-size","text-align"
11356
			#其屬性值爲 "300"  ,  "50"  ,    "30"   ,   "center"
11357
		#備註:
11358
		# __simpleButtonLinkDefaultButtonCssStyle,爲預設的按鈕css樣式,請勿使用相同類別名稱的css樣式,以免衝突。
11359
 
11360
			}#if end
11361
 
11362
		#如果 $conf["confirmSendingVarName"] 有設定
11363
		if(isset($conf["confirmSendingVarName"])){
11364
 
11365
			$conf["form"]["sendHugeDataButton"]["hiddenVarName"]=$conf["confirmSendingVarName"];#要傳送的隱藏變數名稱,與 $conf["hiddenVarContent"] 相對應。
11366
 
11367
			}#if end
11368
 
11369
		#如果 $conf["confirmSendingVarValue"] 有設定
11370
		if(isset($conf["confirmSendingVarValue"])){
11371
 
11372
			$conf["form"]["sendHugeDataButton"]["hiddenVarContent"]=$conf["confirmSendingVarValue"];#要傳誦的隱藏變數內容,與 $conf["hiddenVarName"] 相對應。
11373
 
11374
			}#if end
11375
 
11376
		$conf["form"]["sendHugeDataButton"]["method"]=$conf["confirmRequestMethod"];#爲傳輸的方法,若沒設定則預設爲post,其他可用的參數爲get。
11377
		$conf["form"]["sendHugeDataButton"]["formStart"]="true";#爲是否要表單開始,如果爲"true"則代表要表單開始,預設爲"false".
11378
		$conf["form"]["sendHugeDataButton"]["formEnd"]="true";#爲是否要表單結束,如果爲"true"則代表要表單結束,預設爲"false"
11379
		#$conf["form"]["sendHugeDataButton"]["tableStart"]="true";#爲是否要表格開始,"true"表示"是"。
11380
		#$conf["form"]["sendHugeDataButton"]["tableClass"]="__withoutBorder";#爲表格要採用的css樣式名稱,"__withoutBorder"代表沒有框線的預設樣式;"__withBorder"代表有框線的預設樣式
11381
		#$conf["form"]["sendHugeDataButton"]["trStart"]="true";#爲是否要以<tr>開頭,"true"表示"是"。也可以看作新的一列開始。
11382
		#$conf["form"]["sendHugeDataButton"]["trClass"]="__withoutBorder";#列開始的css樣式,"__withoutBorder"代表沒有框線的預設樣式;"__withBorder"代表有框線的預設樣式
11383
		#$conf["form"]["sendHugeDataButton"]["tdStart"]="true";#爲是否要以<td>開頭,"true"表示"是"。也可以看成列裏面的元素開始
11384
		#$conf["form"]["sendHugeDataButton"]["tdClass"]="__withoutBorder";#行開始的css樣式,"__withoutBorder"代表沒有框線的預設樣式;"__withBorder"代表有框線的預設樣式
11385
		#$conf["form"]["sendHugeDataButton"]["tdEnd"]="true";#爲是否要以</td>結尾,"true"表示"是"。也可以看成列裏面的元素結束
11386
		#$conf["form"]["sendHugeDataButton"]["trEnd"]="true";#爲是否要以</tr>結尾,"true"表示"是"。也可以看作該列結束。
11387
 
11388
		#如果 $conf["confirmActionDisplayMethod"] 有設定
11389
		if(isset($conf["confirmActionDisplayMethod"])){
11390
 
11391
			$conf["form"]["sendHugeDataButton"]["displayTarget"]=$conf["confirmActionDisplayMethod"];#頁面的呈現方法,可以是開新視窗(_blank)、在目前頁面、頁框裏面(_self)、在父頁面(_parent)、最上層頁面(_top)。
11392
 
11393
			}#if end
11394
 
11395
		#$conf["form"]["sendHugeDataButton"]["tableEnd"]="true";#爲是否要表格結束,"true"表示"是"。
11396
		$confirm=form::sendHugeDataButton($conf["form"]["sendHugeDataButton"]);
11397
		unset($conf["form"]["sendHugeDataButton"]);
11398
 
11399
		#如果確認的按鈕建立失敗
11400
		if($confirm["status"]=="false"){
11401
 
11402
			#設置執行失敗
11403
			$result["status"]="false";
11404
 
11405
			#設置錯誤訊息
11406
			$result["error"]=$confirm;
11407
 
11408
			#回傳結果
11409
			return $result;
11410
 
11411
			}#if end
11412
 
11413
		#建立一欄表格
11414
		#函式說明:
11415
		#建立欄的元素,以及指定裏面要放什麼內容
11416
		#回傳的變數:
11417
		#$result["content"],建立欄元素的語法
11418
		#$result["status"],"true"代表執行成功;"false"代表執行失敗。
11419
		#$result["error"],錯誤訊息陣列
11420
		#必填參數:
11421
		$conf["table::printColumn"]["trClass"]="__withoutBorder";#列的樣式,"__withoutBorder"爲沒有框線的樣式;__withBorder爲有框線的樣式
11422
		$conf["table::printColumn"]["tdClass"]="__withoutBorder";#行的樣式,"__withoutBorder"爲沒有框線的樣式;__withBorder爲有框線的樣式
11423
		$conf["table::printColumn"]["tdContent"]=array($cancle["content"],$message["content"],$confirm["content"]);#列裏面要放的元素是?如果要空一列則可以輸array("&nbsp;")
11424
		#可省略參數:
11425
		$conf["table::printColumn"]["tableStartClass"]="__withoutBorder";#列的樣式,預設為"__withoutBorder"爲沒有框線的樣式;__withBorder爲有框線的樣式
11426
		$conf["table::printColumn"]["tableStart"]="true";#爲是否要表格開始,"true"表示"是",預設為"false".
11427
		$conf["table::printColumn"]["tableEnd"]="true";#爲是否要表格結束,"true"表示"是",預設為"false".
11428
		#$conf["formStart"]="true";#是否要有表單的開始,預設為"false".
11429
		#$conf["formName"]="";#該表單的名稱
11430
		#$conf["formAction"]="";#表單提交的目的地,若$conf["formStart"]有設置,則該參數也要設置
11431
		#$conf["formTarget"]="_self";#為顯示的方式,若沒設定則預設爲"_self",其他可用的參數爲 "_blank"、"_parent"、"_top",也可以是iframe的名稱。
11432
		#$conf["formEnd"]="true";#是否要有表單的結束,預設為"false".
11433
		$conf["spaceBlockAferPerElement"]="true";#是否每個欄元素(除了最後一個元素)後面都要空一列。"true"代表要空一列.預設是不空一列.
11434
		$printColumn=table::printColumn($conf["table::printColumn"]);
11435
		unset($conf["table::printColumn"]);
11436
 
11437
		#如果建立一欄表格失敗
11438
		if($printColumn["status"]=="false"){
11439
 
11440
			#設置執行失敗
11441
			$result["status"]="false";
11442
 
11443
			#設置錯誤訊息
11444
			$result["error"]=$printColumn;
11445
 
11446
			#回傳結果
11447
			return $result;
11448
 
11449
			}#if end
11450
 
11451
		#取得一欄表格的語法
11452
		$result["content"]=$result["content"].$printColumn["content"];
11453
 
11454
		#設置執行正常
11455
		$result["status"]="true";
11456
 
11457
		#回傳結果
11458
		return $result;
11459
 
11460
		}#function customConfirm end
11461
 
11462
	/*
11463
	#函式說明:
11464
	#上傳檔案的表單
11465
	#回傳結果:
11466
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
11467
	#$result["function"],當前執行的函數.
11468
	#$result["error"],錯誤訊息陣列.
11469
	#$result["content"],上傳檔案的語法.
11470
	#必填參數:
11471
	#$conf["formFileName"],字串,該檔案上傳時的表單名稱。
11472
	$conf["formFileName"]="";
11473
	#可省略參數:
11474
	#$conf["acceptType"],字串,限定檔案的類型為"video/*","audio/*","image/*",預設不限定.
11475
	#$conf["acceptType"]="";
11476
	#$conf["class"],字串,該上傳表單所要套用的css樣式,若省略則採用預設的css樣式"__qbpwcf_inputFileCssStyle",其屬性爲 width:100% font-size:30px
11477
	#$conf["class"]="";
11478
	#$conf["id"],字串,爲該上傳表單的id,預設跟$conf["formFileName"]一樣.
11479
	#$conf["id"]="";
11480
	#$conf["required"],字串,該欄位是否必填,"true"為必填,"false"為可留空,預設為"false".
11481
	#$conf["required"]="true";
11482
	#$conf["comment"],字串,輔助說明的文字,會出現在檔案上傳的上一行.
11483
	#$conf["comment"]="";
11484
	#$conf["formStart"],字串,爲是否要以<form>開頭,"true"表示"是",也可以看成表單的開始,預設為"false".
11485
	#$conf["formStart"]="true";
11486
	#$conf["formAction"],字串,表單遞交的目的地,若$conf["formStart"]為"true",則該參數不能省略,預設為"false".
11487
	#$conf["formAction"]="";
11488
	#$conf["formName"],字串,爲該表單的名稱
11489
	#$conf["formName"]="";
11490
	#$conf["formMethod"],字串,爲傳輸的方法,若沒設定則預設爲post,其他可用的參數爲get。
11491
	#$conf["formMethod"]="";
11492
	#$conf["formTarget"],字串,為顯示的方式,若沒設定則預設爲"_self",其他可用的參數爲 "_blank"、"_parent"、"_top",也可以是iframe的名稱。
11493
	#$conf["formTarget"]="";
11494
	#$conf["formEnd"],字串,爲是否要以<form>結尾,"true"表示"是",也可以看成表單的結束,預設為"false".
11495
	#$conf["formEnd"]="true";
11496
	#參考資料:
11497
	#http://www.w3schools.com/tags/tag_input.asp
11498
	#備註:
11499
	#無.
11500
	*/
11501
	public static function inputFile(&$conf){
11502
 
11503
		#初始化要回傳的變數
11504
		$result=array();
11505
 
11506
		#設置當前執行的函式
11507
		$result["function"]=__FUNCTION__;
11508
 
11509
		#初始化表單開始的語法
11510
		$result["content"]="";
11511
 
11512
		#如果 $conf 不為陣列
11513
		if(gettype($conf)!="array"){
11514
 
11515
			#設置執行失敗
11516
			$result["status"]="false";
11517
 
11518
			#設置執行錯誤訊息
11519
			$result["error"][]="\$conf變數須為陣列形態";
11520
 
11521
			#如果傳入的參數為 null
11522
			if($conf==null){
11523
 
11524
				#設置執行錯誤訊息
11525
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
11526
 
11527
				}#if end
11528
 
11529
			#回傳結果
11530
			return $result;
11531
 
11532
			}#if end
11533
 
11534
		#檢查參數
11535
		#函式說明:
11536
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
11537
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
11538
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
11539
		#$result["function"],當前執行的函式名稱.
11540
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
11541
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
11542
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
11543
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
11544
		#必填參數:
11545
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
11546
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
11547
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
11548
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("formFileName");
11549
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double");
11550
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string");
11551
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
11552
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
11553
		#可省略參數:
11554
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
11555
		#$conf["canBeEmptyString"]="false";
11556
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
11557
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("acceptType","class","id","comment","formStart","formAction","formName","formMethod","formTarget","formEnd","required");
11558
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
11559
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string","string","string","string","string","string","string","string","string","string");
11560
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,"null"代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
11561
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,"__qbpwcf_inputFileCssStyle","\$conf[\"formFileName\"]",null,"false",null,null,"post","_self","false","false");
11562
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
11563
		#$conf["arrayCountEqualCheck"][]=array();
11564
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
11565
		unset($conf["variableCheck::checkArguments"]);
11566
 
11567
		#如果檢查參數失敗
11568
		if($checkResult["status"]=="false"){
11569
 
11570
			#設置執行失敗
11571
			$result["status"]="false";
11572
 
11573
			#設置執行錯誤
11574
			$result["error"]=$checkResult;
11575
 
11576
			#回傳結果
11577
			return $result;
11578
 
11579
			}#if end
11580
 
11581
		#如果檢查參數不通過
11582
		if($checkResult["passed"]=="false"){
11583
 
11584
			#設置執行失敗
11585
			$result["status"]="false";
11586
 
11587
			#設置執行錯誤
11588
			$result["error"]=$checkResult;
11589
 
11590
			#回傳結果
11591
			return $result;
11592
 
11593
			}#if end
11594
 
11595
		#如果 $conf["formStart"] 等於 "true"
11596
		if($conf["formStart"]=="true"){
11597
 
11598
			#函式說明:
11599
			#表單開始
11600
			#回傳結果:
11601
			#$result,表單開始的語法
11602
			#必填參數:
11603
			$conf["form"]["start"]["action"]=$conf["formAction"];#爲要交給那個檔案處理該表單傳送的內容
11604
			#可省略參數:
11605
 
11606
			#如果 $conf["formName"] 有設置
11607
			if(isset($conf["formName"])){
11608
 
11609
				#則設定其數值
11610
				$conf["form"]["start"]["name"]=$conf["formName"];#爲該表單的名稱
11611
 
11612
				}#if end
11613
 
11614
			#設定 method 參數
11615
			$conf["form"]["start"]["method"]=$conf["formMethod"];#爲傳輸的方法,若沒設定則預設爲post,其他可用的參數爲get。
11616
 
11617
			#設定 "formTarget" 參數
11618
			$conf["form"]["start"]["target"]=$conf["formTarget"];#為顯示的方式,若沒設定則預設爲"_self",其他可用的參數爲 "_blank"、"_parent"、"_top",也可以是iframe的名稱。
11619
 
11620
			#$conf["form"]["start"]["tableStart"]="true";#爲該表單是否要以<table>開始。"true"爲是;
11621
			#$conf["form"]["start"]["tableClass"]=$conf["tableClass"];#表格要套用的css樣式,若爲"__withoutBorder"的話則套用無框線的預設樣式;若爲"__withBorder"的話,則爲有框線的預設樣式。
11622
			$formStart=form::start($conf["form"]["start"]);
11623
			unset($conf["form"]["start"]);
11624
 
11625
			#串接表單開始
11626
			$result["content"]=$result["content"].$formStart["content"];
11627
 
11628
			}#if end
11629
 
11630
		#過濾 $conf["formFileName"] 避免錯誤
11631
		#函式說明:
11632
		#處理字串避免網頁出錯
11633
		#回傳結果:
11634
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
11635
		#$result["function"],當前執行的函數.
11636
		#$result["content"],爲處理好的字串.
11637
		#$result["error"],錯誤訊息陣列.
11638
		#必填參數:
11639
		$conf["stringProcess::correctCharacter"]["stringIn"]=$conf["formFileName"];#爲要處理的字串
11640
		#可省略的參數:
11641
		$conf["stringProcess::correctCharacter"]["selectedCharacter"]=array("<",">","=","//","'","$","%","&","|","/*","*\/","#","\""," ");#爲被選擇要處理的字串/字元,須爲陣列值。
11642
			#若不設定則預設爲要將這些字串作替換("<",">","=","//","'","$","%","&","|","/*","*\/","#","\"")。
11643
			#特殊字元,「\n」代表換行,「\t」代表tab鍵的間隔
11644
		#$conf["stringProcess::correctCharacter"]["changeTo"]=array("","","","","","","","","","","","","");#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
11645
		$correctCharacter=stringProcess::correctCharacter($conf["stringProcess::correctCharacter"]);
11646
		unset($conf["stringProcess::correctCharacter"]);
11647
 
11648
		#debug
11649
		#var_dump($correctCharacter);
11650
 
11651
		#如果過濾字串失敗
11652
		if($correctCharacter["status"]=="false"){
11653
 
11654
			#設置執行失敗
11655
			$result["status"]="false";
11656
 
11657
			#設置執行錯誤訊息
11658
			$result["error"]=$correctCharacter;
11659
 
11660
			#回傳結果
11661
			return $result;
11662
 
11663
			}#if end
11664
 
11665
		#置換過濾好了的$conf["name"]
11666
		$conf["formFileName"]=$correctCharacter["content"];
11667
 
11668
		#過濾 $conf["id"] 避免錯誤
11669
		#函式說明:
11670
		#處理字串避免網頁出錯
11671
		#回傳結果:
11672
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
11673
		#$result["function"],當前執行的函數.
11674
		#$result["content"],爲處理好的字串.
11675
		#$result["error"],錯誤訊息陣列.
11676
		#必填參數:
11677
		$conf["stringProcess::correctCharacter"]["stringIn"]=$conf["id"];#爲要處理的字串
11678
		#可省略的參數:
11679
		$conf["stringProcess::correctCharacter"]["selectedCharacter"]=array("<",">","=","//","'","$","%","&","|","/*","*\/","#","\""," ");#爲被選擇要處理的字串/字元,須爲陣列值。
11680
			#若不設定則預設爲要將這些字串作替換("<",">","=","//","'","$","%","&","|","/*","*\/","#","\"")。
11681
			#特殊字元,「\n」代表換行,「\t」代表tab鍵的間隔
11682
		#$conf["stringProcess::correctCharacter"]["changeTo"]=array("","","","","","","","","","","","","");#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
11683
		$correctCharacter=stringProcess::correctCharacter($conf["stringProcess::correctCharacter"]);
11684
		unset($conf["stringProcess::correctCharacter"]);
11685
 
11686
		#debug
11687
		#var_dump($correctCharacter);
11688
 
11689
		#如果過濾字串失敗
11690
		if($correctCharacter["status"]=="false"){
11691
 
11692
			#設置執行失敗
11693
			$result["status"]="false";
11694
 
11695
			#設置執行錯誤訊息
11696
			$result["error"]=$correctCharacter;
11697
 
11698
			#回傳結果
11699
			return $result;
11700
 
11701
			}#if end
11702
 
11703
		#置換過濾好了的$conf["id"]
11704
		$conf["id"]=$correctCharacter["content"];
11705
 
11706
		#設定id
11707
		$conf["id"]=" id=".$conf["id"]." ";
11708
 
11709
		#設定 css 樣式
11710
		$conf["class"]=" class=".$conf["class"]." ";
11711
 
11712
		#如果 $conf["comment"] 有設置
11713
		if(isset($conf["comment"])){
11714
 
11715
			#放置說明文字
11716
			$result["content"]=$result["content"]."<span ".$conf["class"]." >".$conf["comment"]."</span><br>";
11717
 
11718
			}#if end
11719
 
11720
		#如果有設置 $conf["acceptType"]
11721
		if(isset($conf["acceptType"])){
11722
 
11723
			#設置 "accept" 屬性
11724
			$conf["acceptType"]=" accept=".$conf["acceptType"]." ";
11725
 
11726
			}#if end
11727
 
11728
		#反之
11729
		else{
11730
 
11731
			#設置為 ""
11732
			$conf["acceptType"]="";
11733
 
11734
			}#else end
11735
 
11736
		#如果 $conf["required"] 為 "true"
11737
		if($conf["required"]=="true"){
11738
 
11739
			#設置 "required" 屬性
11740
			$conf["required"]="required";
11741
 
11742
			}#if end
11743
 
11744
		#反之
11745
		else{
11746
 
11747
			#設置為 ""
11748
			$conf["required"]="";
11749
 
11750
			}#else end
11751
 
11752
		#放置上傳檔案表單的語法
11753
		$result["content"]=$result["content"]."<input type = file ".$conf["class"]." name = ".$conf["formFileName"]." ".$conf["id"]." ".$conf["acceptType"]." ".$conf["required"]." >";
11754
 
11755
		#如果 $conf["formEnd"] 等於 "true"
11756
		if($conf["formEnd"]=="true"){
11757
 
11758
			$conf["form"]["end"]["tableEnd"]="false";#爲該表單是否要以</table>結尾。"true"爲是;"false"爲否。
11759
			$formEnd=form::end($conf["form"]["end"]);
11760
			unset($conf["form"]["end"]);
11761
 
11762
			#如果表單結束失敗
11763
			if($formEnd["status"]=="false"){
11764
 
11765
				#設置執行失敗
11766
				$result["status"]="false";
11767
 
11768
				#設置執行錯誤
11769
				$result["error"]=$formEnd;
11770
 
11771
				#回傳結果
11772
				return $result;
11773
 
11774
				}#if end
11775
 
11776
			#串接表單結束
11777
			$result["content"]=$result["content"].$formEnd["content"];
11778
 
11779
			}#if end
11780
 
11781
		#設置執行正常
11782
		$result["status"]="true";
11783
 
11784
		#回傳語法
11785
		return $result;
11786
 
11787
		}#function inputFile end
11788
 
11789
	/*
11790
	#函式說明:
11791
	#可以瀏覽要上傳的檔案
11792
	#回傳結果:
11793
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
11794
	#$result["function"],當前執行的函數.
11795
	#$result["error"],錯誤訊息陣列.
11796
	#$result["content"],上傳檔案的語法.
11797
	#必填參數:
11798
	#$conf["formFileName"],字串,該上傳檔案的表單名稱.
11799
	$conf["formFileName"]="";
11800
	#可省略參數:
11801
	#$conf["maxFileSize"],字串,檔案的最大限制,單位是位元組(byte)。1kb = 1024 byte ; 1mb = 1024 kb 約等與 1024000 byte,預設是10240000(10MB)
11802
	#$conf["maxFileSize"]="10240000";
11803
	#$conf["browseButtonClass"],字串,瀏覽檔案的按鈕樣式,預設為"__qbpwcf_inputFileCssStyle".
11804
	#$conf["browseButtonClass"]="__inputFileCssStyle";
11805
	#$conf["acceptType"],字串,限定檔案的類型為"video/*","audio/*","image/*",預設不限定.
11806
	#$conf["acceptType"]="";
11807
	#$conf["required"],字串,該欄位是否必填,"true"為必填,"false"為可留空,預設為"false".
11808
	#$conf["required"]="true";
11809
	#$conf["trStart"],字串,爲是否要以<tr>開頭,"true"表示"是",也可以看作新的一列開始,預設為"false".
11810
	#$conf["trStart"]="true";
11811
	#$conf["trClass"],字串,列的樣式,"__withoutBorder"爲沒有框線的樣式;"__withBorder",有框線的樣式,預設為"__withoutBorder".
11812
	#$conf["trClass"]="__withoutBorder";
11813
	#$conf["tdStart"],字串,爲是否要以<td>開頭,"true"表示"是",也可以看成列裏面的元素開始,預設為"false".
11814
	#$conf["tdStart"]="false";
11815
	#$conf["tdClass"],字串,行的樣式,"__withoutBorder"爲沒有框線的樣式;"__withBorder",有框線的樣式,預設為"__withoutBorder".
11816
	#$conf["tdClass"]="__withoutBorder";
11817
	#$conf["tdEnd"],字串,爲是否要以</td>結尾,"true"表示"是",也可以看成列裏面的元素結束,預設為"false".
11818
	#$conf["tdEnd"]="true";
11819
	#$conf["trEnd"],字串,爲是否要以</tr>結尾,"true"表示"是",也可以看作該列結束,預設為"false".
11820
	#$conf["trEnd"]="true";
11821
	#$conf["formStart"],字串,是否為表單的開始,"true"為是,預設為"false".
11822
	#$conf["formStart"]="true";
11823
	#$conf["formName"],字串,表單的名稱
11824
	#$conf["formName"]="";
11825
	#$conf["formAction"],字串,表單的目標,若有設置$conf["formStart"]為"true",則預設為php檔案自己
11826
	#$conf["formAction"]="";
11827
	#$conf["formTarget"],字串,表單要呈現回應的位置,預設為"_self".
11828
	#$conf["formTarget"]="_self";
11829
	#$conf["formEnd"],字串,是否為表單的結束,"true"為是,預設為"false".
11830
	#$conf["formEnd"]="true";
11831
	#$conf["comment"],字串,該上傳檔案的註解,預設不顯示.
11832
	#$conf["comment"]="";
11833
	#參考資料:
11834
	#無.
11835
	#備註:
11836
	#無.
11837
	*/
11838
	public static function uploadOneFile(&$conf){
11839
 
11840
		#初始化要回傳的變數
11841
		$result=array();
11842
 
11843
		#設置當前執行的函式
11844
		$result["function"]=__FUNCTION__;
11845
 
11846
		#初始化表單開始的語法
11847
		$result["content"]="";
11848
 
11849
		#如果 $conf 不為陣列
11850
		if(gettype($conf)!="array"){
11851
 
11852
			#設置執行失敗
11853
			$result["status"]="false";
11854
 
11855
			#設置執行錯誤訊息
11856
			$result["error"][]="\$conf變數須為陣列形態";
11857
 
11858
			#如果傳入的參數為 null
11859
			if($conf==null){
11860
 
11861
				#設置執行錯誤訊息
11862
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
11863
 
11864
				}#if end
11865
 
11866
			#回傳結果
11867
			return $result;
11868
 
11869
			}#if end
11870
 
11871
		#檢查參數
11872
		#函式說明:
11873
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
11874
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
11875
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
11876
		#$result["function"],當前執行的函式名稱.
11877
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
11878
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
11879
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
11880
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
11881
		#必填參數:
11882
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
11883
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
11884
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
11885
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("formFileName");
11886
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double");
11887
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string");
11888
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
11889
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
11890
		#可省略參數:
11891
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
11892
		#$conf["canBeEmptyString"]="false";
11893
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
11894
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("maxFileSize","browseButtonClass","trStart","trClass","tdStart","tdClass","tdEnd","trEnd","formStart","formAction","formTarget","formEnd","comment","formName","acceptType","required");
11895
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
11896
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string","string","string","string","string","string","string","string","string","string","string","string","string","string","string");
11897
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,"null"代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
11898
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("10240000","__qbpwcf_inputFileCssStyle","false","withoutBorder","false","withoutBorder","false","false","false",null,"_self","false",null,null,null,"false");
11899
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
11900
		#$conf["arrayCountEqualCheck"][]=array();
11901
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
11902
		unset($conf["variableCheck::checkArguments"]);
11903
 
11904
		#如果檢查參數失敗
11905
		if($checkResult["status"]=="false"){
11906
 
11907
			#設置執行失敗
11908
			$result["status"]="false";
11909
 
11910
			#設置執行錯誤
11911
			$result["error"]=$checkResult;
11912
 
11913
			#回傳結果
11914
			return $result;
11915
 
11916
			}#if end
11917
 
11918
		#如果檢查參數不通過
11919
		if($checkResult["passed"]=="false"){
11920
 
11921
			#設置執行失敗
11922
			$result["status"]="false";
11923
 
11924
			#設置執行錯誤
11925
			$result["error"]=$checkResult;
11926
 
11927
			#回傳結果
11928
			return $result;
11929
 
11930
			}#if end
11931
 
11932
		#建立沒有框線的表單css樣式
11933
		#函式說明:
11934
		#創建 css 樣式
11935
		#必填參數:
11936
		$conf_createCssStyle["cssStyleName"]="__withoutBorderUploadOneFileCssStyle";#為該 css 樣式的名稱,不能以數字開頭。
11937
		$conf_createCssStyle["attributes"]=array("width","font-size","border","border-style");#為屬性名稱,須為陣列值
11938
		$conf_createCssStyle["content"]=array("100%","30px","0px","solid");#為屬性值,須為陣列值
11939
		$css=css::createCssStyle($conf_createCssStyle);
11940
		unset($conf_createCssStyle);
11941
 
11942
		#若創建css樣式失敗
11943
		if($css["status"]=="false"){
11944
 
11945
			#設置執行失敗
11946
			$result["status"]="false";
11947
 
11948
			#設置執行錯誤
11949
			$result["error"]=$css;
11950
 
11951
			#回傳結果
11952
			return $result;
11953
 
11954
			}#if end
11955
 
11956
		#串接css語法
11957
		$result["content"]=$result["content"].$css["content"];
11958
 
11959
		#建立有框線的表單css樣式
11960
		#函式說明:
11961
		#創建 css 樣式
11962
		#必填參數:
11963
		$conf_createCssStyle["cssStyleName"]="__withBorderUploadOneFileCssStyle";#為該 css 樣式的名稱,不能以數字開頭。
11964
		$conf_createCssStyle["attributes"]=array("width","font-size","border","border-style");#為屬性名稱,須為陣列值
11965
		$conf_createCssStyle["content"]=array("100%","30px","1px","solid");#為屬性值,須為陣列值
11966
		$css=css::createCssStyle($conf_createCssStyle);
11967
		unset($conf_createCssStyle);
11968
 
11969
		#若創建css樣式失敗
11970
		if($css["status"]=="false"){
11971
 
11972
			#設置執行失敗
11973
			$result["status"]="false";
11974
 
11975
			#設置執行錯誤
11976
			$result["error"]=$css;
11977
 
11978
			#回傳結果
11979
			return $result;
11980
 
11981
			}#if end
11982
 
11983
		#串接css語法
11984
		$result["content"]=$result["content"].$css["content"];
11985
 
11986
		#如果 $conf["trStart"] 等於 "true"
11987
		if($conf["trStart"]=="true"){
11988
 
11989
			#套用指定的css樣式
11990
			$conf["table"]["trStart"]["class"]=$conf["trClass"];
11991
 
11992
			#函式說明:
11993
			#列開始
11994
			#回傳結果:
11995
			#$result,列開始的語法
11996
			#必填寫的參數:
11997
			#$conf["table"]["trStart"]["class"]="";#該 tr 要套用套用的 css 樣式若爲 "" 則會採用預設的css樣式 __defaultTrCsssStyle,其屬性爲 border:1px solid blue
11998
			$trStart=table::trStart($conf["table"]["trStart"]);
11999
			unset($conf["table"]["trStart"]);
12000
 
12001
			#如果列歐開始結束
12002
			if($trStart["status"]=="false"){
12003
 
12004
				#設置執行失敗
12005
				$result["status"]="false";
12006
 
12007
				#設置執行錯誤
12008
				$result["error"]=$trStart;
12009
 
12010
				#回傳結果
12011
				return $result;
12012
 
12013
				}#if end
12014
 
12015
			#串接列開始
12016
			$result["content"]=$result["content"].$trStart["content"];
12017
 
12018
			}#if end
12019
 
12020
		#如果 $conf["tdStart"] 等於 "true"
12021
		if($conf["tdStart"]=="true"){
12022
 
12023
			#套用指定的css樣式
12024
			$conf["table"]["tdStart"]["class"]=$conf["tdClass"];
12025
 
12026
			#函式說明:
12027
			#列開始
12028
			#回傳結果:
12029
			#$result,列開始的語法
12030
			#必填寫的參數:
12031
			#$conf["table"]["tdStart"]["class"]="";#該 td 要套用套用的 css 樣式若爲 "" 則會採用預設的css樣式 __defaultTrCsssStyle,其屬性爲 border:1px solid blue
12032
			$tdStart=table::tdStart($conf["table"]["tdStart"]);
12033
			unset($conf["table"]["tdStart"]);
12034
 
12035
			#如果欄開始結束
12036
			if($tdStart["status"]=="false"){
12037
 
12038
				#設置執行失敗
12039
				$result["status"]="false";
12040
 
12041
				#設置執行錯誤
12042
				$result["error"]=$tdStart;
12043
 
12044
				#回傳結果
12045
				return $result;
12046
 
12047
				}#if end
12048
 
12049
			#串接欄開始
12050
			$result["content"]=$result["content"].$tdStart["content"];
12051
 
12052
			}#if end
12053
 
12054
		#如果 $conf["formStart"] 為 "true"
12055
		if($conf["formStart"]=="true"){
12056
 
12057
			#函式說明:
12058
			#表單開始
12059
			#回傳結果:
12060
			#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
12061
			#$result["error"],錯誤訊息陣列.
12062
			#$resutl["function"],當前執行的函式名稱.
12063
			#$result["content"],表單開始的語法.
12064
			#必填參數:
12065
			$conf["form::start"]["action"]=$conf["formAction"];#爲要交給那個檔案處理該表單傳送的內容
12066
			#可省略參數:
12067
			#$conf["legend"]="";#顯示表單的標題
12068
 
12069
			#如果 $conf["formName"] 有設置
12070
			if(isset($conf["formName"])){
12071
 
12072
				$conf["form::start"]["name"]=$conf["formName"];#爲該表單的名稱
12073
 
12074
				}#if end
12075
 
12076
			#$conf["method"]="";#爲傳輸的方法,若沒設定則預設爲post,其他可用的參數爲get。
12077
			$conf["form::start"]["target"]=$conf["formTarget"];#為顯示的方式,若沒設定則預設爲"_self",其他可用的參數爲 "_blank"、"_parent"、"_top",也可以是iframe的名稱。
12078
			#$conf["tableStart"]="true";#爲該表單是否要以<table>開始。"true"爲是,"false"為否,預設為"false".
12079
			#$conf["tableClass"]="";#表格要套用的css樣式,預設爲"__withoutBorder"無框線的預設樣式;若爲"__withBorder"的話,則爲有框線的預設樣式。
12080
			#$conf["showFieldsetBorder"]="false";#是否要顯示表單區域的框線,預設為"false"不顯示,"true"代表要顯示.
12081
			#參考資料:
12082
			#http://www.w3schools.com/html/html_forms.asp
12083
			#http://www.w3schools.com/tags/tag_fieldset.asp
12084
			$formStart=form::start($conf["form::start"]);
12085
			unset($conf["form::start"]);
12086
 
12087
			#如果表單開始失敗
12088
			if($formStart["status"]=="false"){
12089
 
12090
				#設置執行失敗
12091
				$result["status"]="false";
12092
 
12093
				#設置執行錯誤
12094
				$result["error"]=$formStart;
12095
 
12096
				#回傳結果
12097
				return $result;
12098
 
12099
				}#if end
12100
 
12101
			#串接表單的開始
12102
			$result["content"]=$result["content"].$formStart["content"];
12103
 
12104
			}#if end
12105
 
12106
		#設定上傳到檔案最大大小限制,單位爲byte
12107
		$conf_inputHidden["name"]="max_file_size";
12108
		$conf_inputHidden["value"]=$conf["maxFileSize"];
12109
		$hiddenVar=form::inputHidden($conf_inputHidden);
12110
		unset($conf_inputHidden);#清空變數避免出錯
12111
 
12112
		#建立隱藏的表單失敗
12113
		if($hiddenVar["status"]=="false"){
12114
 
12115
			#設置執行失敗
12116
			$result["status"]="false";
12117
 
12118
			#設置執行錯誤
12119
			$result["error"]=$hiddenVar;
12120
 
12121
			#回傳結果
12122
			return $result;
12123
 
12124
			}#if end
12125
 
12126
		#串接檔案大小的限制
12127
		$result["content"]=$result["content"].$hiddenVar["content"];
12128
 
12129
		#函式說明:
12130
		#上傳檔案的表單
12131
		#回傳結果:
12132
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
12133
		#$result["function"],當前執行的函數.
12134
		#$result["error"],錯誤訊息陣列.
12135
		#$result["content"],上傳檔案的語法.
12136
		#必填參數:
12137
		#$conf["formFileName"],字串,該檔案上傳時的表單名稱。
12138
		$conf["form::inputFile"]["formFileName"]=$conf["formFileName"];
12139
		#可省略參數:
12140
 
12141
		#如果已有設置 $conf["acceptType"]
12142
		if(isset($conf["acceptType"])){
12143
 
12144
			#$conf["form::inputFile"]["acceptType"],字串,限定檔案的類型為"video/*","audio/*","image/*",預設不限定.
12145
			$conf["form::inputFile"]["acceptType"]=$conf["acceptType"];
12146
 
12147
			}#if end
12148
 
12149
		#$conf["form::inputFile"]["class"],字串,該上傳表單所要套用的css樣式,若省略則採用預設的css樣式"__inputFileCssStyle",其屬性爲 width:100% font-size:30px
12150
		$conf["form::inputFile"]["class"]=$conf["browseButtonClass"];
12151
		#$conf["id"],字串,爲該上傳表單的id,預設跟$conf["formFileName"]一樣.
12152
		#$conf["id"]="";
12153
 
12154
		#如果有設置 $conf["required"]
12155
		if(isset($conf["required"])){
12156
 
12157
			#$conf["form::inputFile"]["required"],字串,該欄位是否必填,"true"為必填,"false"為可留空,預設為"false".
12158
			$conf["form::inputFile"]["required"]=$conf["required"];
12159
 
12160
			}#if end
12161
 
12162
		#有設置註解
12163
		if(isset($conf["comment"])){
12164
 
12165
			#$conf["form::inputFile"]["comment"],字串,輔助說明的文字,會出現在檔案上傳的上一行.
12166
			$conf["form::inputFile"]["comment"]=$conf["comment"];
12167
 
12168
			}#if end
12169
 
12170
		#$conf["form::inputFile"]["formStart"],字串,爲是否要以<form>開頭,"true"表示"是",也可以看成表單的開始,預設為"false".
12171
		#$conf["form::inputFile"]["formStart"]=$conf["formStart"];
12172
		#$conf["form::inputFile"]["formAction"],字串,表單遞交的目的地,若$conf["formStart"]為"true",則該參數不能省略,預設為"false".
12173
		#$conf["form::inputFile"]["formAction"]=$conf["formAction"];
12174
		#$conf["form::inputFile"]["formName"],字串,爲該表單的名稱
12175
		#$conf["form::inputFile"]["formName"]=$conf["formName"];
12176
		#$conf["form::inputFile"]["formMethod"],字串,爲傳輸的方法,若沒設定則預設爲post,其他可用的參數爲get。
12177
		#$conf["form::inputFile"]["formMethod"]="";
12178
		#$conf["form::inputFile"]["formTarget"],字串,為顯示的方式,若沒設定則預設爲"_self",其他可用的參數爲 "_blank"、"_parent"、"_top",也可以是iframe的名稱。
12179
		#$conf["form::inputFile"]["formTarget"]=$conf["formTarget"];
12180
		#$conf["form::inputFile"]["formEnd"],字串,爲是否要以<form>結尾,"true"表示"是",也可以看成表單的結束,預設為"false".
12181
		$conf["form::inputFile"]["formEnd"]=$conf["formEnd"];
12182
		#參考資料:
12183
		#http://www.w3schools.com/tags/tag_input.asp
12184
		$inputFile=form::inputFile($conf["form::inputFile"]);
12185
		unset($conf["form::inputFile"]);
12186
 
12187
		#如果上傳檔案的表單建立失敗
12188
		if($inputFile["status"]=="false"){
12189
 
12190
			#設置執行失敗
12191
			$result["status"]="false";
12192
 
12193
			#設置執行錯誤
12194
			$result["error"]=$inputFile;
12195
 
12196
			#回傳結果
12197
			return $result;
12198
 
12199
			}#if end
12200
 
12201
		#串接上傳檔案的表單
12202
		$result["content"]=$result["content"].$inputFile["content"];
12203
 
12204
		#如果 $conf["tdEnd"] 等於 "true"
12205
		if($conf["tdEnd"]=="true"){
12206
 
12207
			#串接欄的結束tag
12208
			$result["content"]=$result["content"]."</td>";
12209
 
12210
			}#if end
12211
 
12212
		#如果 $conf["trEnd"] 等於 "true"
12213
		if($conf["trEnd"]=="true"){
12214
 
12215
			#串接列的結束tag
12216
			$result["content"]=$result["content"]."</tr>";
12217
 
12218
			}#if end
12219
 
12220
		#設置執行正常
12221
		$result["status"]="true";
12222
 
12223
		#回傳結果
12224
		return $result;
12225
 
12226
		}#function uploadOneFile end
12227
 
12228
	/*
12229
	#函式說明:
12230
	#上傳一個檔案,包含送出鈕與回上頁的按鈕
12231
	#回傳結果:
12232
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
12233
	#$result["function"],當前執行的函數.
12234
	#$result["error"],錯誤訊息陣列.
12235
	#$result["content"],語法.
12236
	#必填參數:
12237
	#$conf["formFileName"],字串,該上傳檔案的表單名稱.
12238
	$conf["formFileName"]="";
12239
	#$conf["actionPage"],字串,處理表單資訊的頁面.
12240
	$conf["actionPage"]="";
12241
	#可省略參數:
12242
	#$conf["backButtonName"],字串,退回上一頁的按鈕要顯示的名稱,預設爲"回上頁"
12243
	#$conf["backButtonName"]="回上頁";
12244
	#$conf["backPage"],字串,返回的按鈕點了之後要到哪個頁面,預設是不使用.
12245
	#$conf["backPage"]="";
12246
	#$conf["backTarget"],字串,返回按鈕的顯示區塊.
12247
	#$conf["backTarget"]="";
12248
	#$conf["backButtonClass"],字串,回上頁按鈕的css樣式,預設為"__simpleButtonLinkDefaultButtonCssStyle".
12249
	#$conf["backButtonClass"]="__simpleButtonLinkDefaultButtonCssStyle";
12250
	#$conf["comment"],字串,該上傳檔案的註解,預設不顯示.
12251
	#$conf["comment"]="";
12252
	#$conf["formName"],字串,表單的名稱
12253
	#$conf["formName"]="";
12254
	#$conf["formTarget"],字串,表單要呈現回應的位置,預設為"_self".
12255
	#$conf["formTarget"]="_self";
12256
	#$conf["acceptType"],字串,限定檔案的類型為"video/*","audio/*","image/*",預設不限定.
12257
	#$conf["acceptType"]="";
12258
	#$conf["required"],字串,該欄位是否必填,"true"為必填,"false"為可留空,預設為"false".
12259
	#$conf["required"]="true";
12260
	#$conf["maxFileSize"],字串,檔案的最大限制,單位是位元組(byte),1kb = 1024 byte ; 1mb = 1024 kb 約等與 1024000 byte,預設爲"102400000"(100MB)
12261
	#$conf["maxFileSize"]="102400000";
12262
	#$conf["browseButtonClass"],字串,瀏覽要上傳檔案的css樣式,預設為"__qbpwcf_inputFileCssStyle".
12263
	#$conf["browseButtonClass"]="__inputFileCssStyle";
12264
	#$conf["submitButtonClass"],字串,上傳按鈕的css樣式,預設為"__simpleButtonLinkDefaultButtonCssStyle".
12265
	#$conf["submitButtonClass"]="__simpleButtonLinkDefaultButtonCssStyle";
12266
	#$conf["submitButtonName"],字串,送出鈕要顯示的名稱,預設爲"上傳"
12267
	#$conf["submitButtonName"]="上傳";
12268
	#參考資料:
12269
	#無.
12270
	#備註:
12271
	#無.
12272
	*/
12273
	public static function uploadOneFileCom(&$conf){
12274
 
12275
		#初始化要回傳的變數
12276
		$result=array();
12277
 
12278
		#設置當前執行的函式
12279
		$result["function"]=__FUNCTION__;
12280
 
12281
		#初始化表單開始的語法
12282
		$result["content"]="";
12283
 
12284
		#如果 $conf 不為陣列
12285
		if(gettype($conf)!="array"){
12286
 
12287
			#設置執行失敗
12288
			$result["status"]="false";
12289
 
12290
			#設置執行錯誤訊息
12291
			$result["error"][]="\$conf變數須為陣列形態";
12292
 
12293
			#如果傳入的參數為 null
12294
			if($conf==null){
12295
 
12296
				#設置執行錯誤訊息
12297
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
12298
 
12299
				}#if end
12300
 
12301
			#回傳結果
12302
			return $result;
12303
 
12304
			}#if end
12305
 
12306
		#檢查參數
12307
		#函式說明:
12308
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
12309
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
12310
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
12311
		#$result["function"],當前執行的函式名稱.
12312
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
12313
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
12314
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
12315
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
12316
		#必填參數:
12317
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
12318
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
12319
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
12320
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("formFileName","actionPage");
12321
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double");
12322
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
12323
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
12324
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
12325
		#可省略參數:
12326
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
12327
		#$conf["canBeEmptyString"]="false";
12328
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
12329
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("browseButtonClass","submitButtonClass","backPage","backButtonClass","maxFileSize","submitButtonName","backButtonName","comment","formTarget","acceptType","required","formName","backTarget");
12330
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
12331
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string","string","string","string","string","string","string","string","string","string","string","string");
12332
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,"null"代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
12333
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("__qbpwcf_inputFileCssStyle","__qbpwcf_button",null,"__qbpwcf_button","102400000","上傳","回上頁",null,"_self",null,"false",null,"_self");
12334
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
12335
		#$conf["arrayCountEqualCheck"][]=array();
12336
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
12337
		unset($conf["variableCheck::checkArguments"]);
12338
 
12339
		#如果檢查參數失敗
12340
		if($checkResult["status"]=="false"){
12341
 
12342
			#設置執行失敗
12343
			$result["status"]="false";
12344
 
12345
			#設置執行錯誤
12346
			$result["error"]=$checkResult;
12347
 
12348
			#回傳結果
12349
			return $result;
12350
 
12351
			}#if end
12352
 
12353
		#如果檢查參數不通過
12354
		if($checkResult["passed"]=="false"){
12355
 
12356
			#設置執行失敗
12357
			$result["status"]="false";
12358
 
12359
			#設置執行錯誤
12360
			$result["error"]=$checkResult;
12361
 
12362
			#回傳結果
12363
			return $result;
12364
 
12365
			}#if end
12366
 
12367
		#如果$conf["backPage"]有存在,則放置回上頁的按鈕
12368
		if(isset($conf["backPage"])){
12369
 
12370
			#函式說明:
12371
			#放置按鈕
12372
			#回傳結果:
12373
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
12374
			#$result["function"],當前執行的函數.
12375
			#$result["error"],錯誤訊息陣列.
12376
			#$result["content"],按鈕語法.
12377
			#必填參數:
12378
			$conf["form::button"]["buttonDisplayValue"]=$conf["backButtonName"];#爲按鈕上顯示的文字。
12379
			#可省略參數:
12380
			$conf["form::button"]["buttonStyleName"]=$conf["backButtonClass"];#可省略,爲按鈕所要使用的css樣式類別名稱,預設的css樣式爲 __simpleButtonLinkDefaultButtonCssStyle 。
12381
				#其屬性爲   "width","height","font-size","text-align"
12382
				#其屬性值爲 "100%" ,  "50"  ,    "30"   ,   "center"
12383
			#$conf["buttonActionScriptFunction"]="";#可省略,爲按下按鈕時所要執行的javaScript函式,預設不設定。
12384
				#"document.forms.formName.submit()"爲傳送名爲testForm的表單內容
12385
				#"window.print()"爲使用瀏覽器內建工具列印當前網頁
12386
			#$conf["buttonBorder"]="";#可省略,爲IE9內會自動產生外框,此爲外框的厚度,屬性值爲正整數,預設爲0。
12387
			#$conf["disabled"]="true";#可省略,為按鈕的功能是否要取消,若為"true"則代表要取消,若為"false"則代表功能正常,預設為"false".
12388
			#$conf["tableStart"]="true";#爲是否要表格開始。"false"代表否,"true"代表是。預設爲"false"。
12389
			#$conf["tableClass"]="";#表格要套用的css樣式,若省略的話,則預設爲 __defaultTbaleCsssStyle 其屬性爲 table-layout:fixed word-break:break-all width:100% ,須搭配 $conf["tablStart"] 與 $conf["tableEnd"] 使用。
12390
			#$conf["trStart"]="true";#爲是否要以<tr>開頭,"true"表示"是"。也可以看作新的一列開始,預設為"false".
12391
			#$conf["trClass"]="__withoutBorder";#<tr>要套用的css樣式,預設為"__withoutBorder",亦即沒有框線的樣式;"__withBorder"則爲有框線的樣式
12392
			#$conf["tdStart"]="true";#爲是否要以<td>開頭,"true"表示"是"。也可以看成列裏面的元素開始,預設為"false".
12393
			#$conf["tdClass"]="__withoutBorder";#<td>要套用的css樣式,"__withoutBorder"爲沒有框線的樣式;__withBorder爲有框線的樣式
12394
			#$conf["tdEnd"]="true";#爲是否要以</td>結尾,"true"表示"是"。也可以看成列裏面的元素結束,預設為"false".
12395
			#$conf["trEnd"]="true";#爲是否要以</tr>結尾,"true"表示"是"。也可以看作該列結束,預設為"false".
12396
			#$conf["tableEnd"]="true";#爲是否要表格結束。"false"代表否,"true"代表是,預設爲"false"。
12397
			$conf["form::button"]["formStart"]="true";#爲是否要表單開始,如果爲"true"則代表要表單開始,預設為"false".
12398
			$conf["form::button"]["action"]=$conf["backPage"];#爲表單要傳送到哪個頁面,須搭配$conf["formStart"]與$conf["formEnd"]參數使用
12399
			$conf["form::button"]["target"]=$conf["backTarget"];#為目標表單顯示的方式,若沒設定則預設爲"_self",其他可用的參數爲 "_blank"、"_parent"、"_top",也可以是iframe的名稱。須搭配$conf["formStart"]與$conf["formEnd"]參數使用
12400
			$conf["form::button"]["formEnd"]="true";#爲是否要表單結束,如果爲"true"則代表要表單結束,預設為"false".
12401
			#參考資料:
12402
			#http://stackoverflow.com/questions/3014649/how-to-disable-html-button-using-javascript
12403
			$prePageButton=form::button($conf["form::button"]);
12404
			unset($conf["form::button"]);
12405
 
12406
			#如果回上頁的按鈕建立失敗
12407
			if($prePageButton["status"]=="false"){
12408
 
12409
				#設置執行失敗
12410
				$result["status"]="false";
12411
 
12412
				#設置執行錯誤
12413
				$result["error"]=$prePageButton;
12414
 
12415
				#回傳結果
12416
				return $result;
12417
 
12418
				}#if end
12419
 
12420
			#放置回上頁的按鈕
12421
			$conf["table::printColumn"]["tdContent"][]=$prePageButton["content"];
12422
 
12423
			}#if end
12424
 
12425
		#上傳檔案的表單
12426
		#函式說明:
12427
		#可以瀏覽要上傳的檔案
12428
		#回傳結果:
12429
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
12430
		#$result["function"],當前執行的函數.
12431
		#$result["error"],錯誤訊息陣列.
12432
		#$result["content"],上傳檔案的語法.
12433
		#必填參數:
12434
		#$conf["formFileName"],字串,該上傳檔案的表單名稱.
12435
		$conf["form::uploadOneFile"]["formFileName"]=$conf["formFileName"];
12436
		#可省略參數:
12437
		#$conf["form::uploadOneFile"]["maxFileSize"],字串,檔案的最大限制,單位是位元組(byte)。1kb = 1024 byte ; 1mb = 1024 kb 約等與 1024000 byte,預設是10240000(10MB)
12438
		$conf["form::uploadOneFile"]["maxFileSize"]=$conf["maxFileSize"];
12439
		#$conf["browseButtonClass"],字串,瀏覽檔案的按鈕樣式,預設為"__inputFileCssStyle".
12440
		$conf["form::uploadOneFile"]["browseButtonClass"]=$conf["browseButtonClass"];
12441
 
12442
		#如果有設定 $conf["acceptType"]
12443
		if(isset($conf["acceptType"])){
12444
 
12445
			#$conf["form::uploadOneFile"][["acceptType"],字串,限定檔案的類型為"video/*","audio/*","image/*",預設不限定.
12446
			$conf["form::uploadOneFile"]["acceptType"]=$conf["acceptType"];
12447
 
12448
			}#if end
12449
 
12450
		#$conf["form::uploadOneFile"]["required"],字串,該欄位是否必填,"true"為必填,"false"為可留空,預設為"false".
12451
		$conf["form::uploadOneFile"]["required"]=$conf["required"];
12452
 
12453
		#$conf["trStart"],字串,爲是否要以<tr>開頭,"true"表示"是",也可以看作新的一列開始,預設為"false".
12454
		#$conf["trStart"]="true";
12455
		#$conf["trClass"],字串,列的樣式,"__withoutBorder"爲沒有框線的樣式;"__withBorder",有框線的樣式,預設為"__withoutBorder".
12456
		#$conf["trClass"]="__withoutBorder";
12457
		#$conf["tdStart"],字串,爲是否要以<td>開頭,"true"表示"是",也可以看成列裏面的元素開始,預設為"false".
12458
		#$conf["tdStart"]="false";
12459
		#$conf["tdClass"],字串,行的樣式,"__withoutBorder"爲沒有框線的樣式;"__withBorder",有框線的樣式,預設為"__withoutBorder".
12460
		#$conf["tdClass"]="__withoutBorder";
12461
		#$conf["tdEnd"],字串,爲是否要以</td>結尾,"true"表示"是",也可以看成列裏面的元素結束,預設為"false".
12462
		#$conf["tdEnd"]="true";
12463
		#$conf["trEnd"],字串,爲是否要以</tr>結尾,"true"表示"是",也可以看作該列結束,預設為"false".
12464
		#$conf["trEnd"]="true";
12465
		#$conf["formStart"],字串,是否為表單的開始,"true"為是,預設為"false".
12466
		$conf["form::uploadOneFile"]["formStart"]="true";
12467
 
12468
		#如果有設置 $conf["formName"]
12469
		if(isset($conf["formName"])){
12470
 
12471
			#$conf["formName"],字串,表單的名稱
12472
			$conf["form::uploadOneFile"]["formName"]=$conf["formName"];
12473
 
12474
			}#if end
12475
 
12476
		#$conf["formAction"],字串,表單的目標,若有設置$conf["formStart"]為"true",則預設為php檔案自己
12477
		$conf["form::uploadOneFile"]["formAction"]=$conf["actionPage"];
12478
		#$conf["form::uploadOneFile"]["formTarget"],字串,表單要呈現回應的位置,預設為"_self".
12479
		$conf["form::uploadOneFile"]["formTarget"]=$conf["formTarget"];
12480
		#$conf["formEnd"],字串,是否為表單的結束,"true"為是,預設為"false".
12481
		#$conf["form::uploadOneFile"]["formEnd"]="false";
12482
 
12483
		#如果 $conf["comment"] 有設定
12484
		if(isset($conf["comment"])){
12485
 
12486
			#$conf["form::uploadOneFile"]["comment"],字串,該上傳檔案的註解,預設不顯示.
12487
			$conf["form::uploadOneFile"]["comment"]=$conf["comment"];
12488
 
12489
			}#if end
12490
 
12491
		$uploadOneFile=form::uploadOneFile($conf["form::uploadOneFile"]);
12492
		unset($conf["form::uploadOneFile"]);
12493
 
12494
		#如果建立上傳的表單失敗
12495
		if($uploadOneFile["status"]=="false"){
12496
 
12497
			#設置執行失敗
12498
			$result["status"]="false";
12499
 
12500
			#設置執行錯誤
12501
			$result["error"]=$uploadOneFile;
12502
 
12503
			#回傳結果
12504
			return $result;
12505
 
12506
			}#if end
12507
 
12508
		#放置上傳檔案的表單
12509
		$conf["table::printColumn"]["tdContent"][]=$uploadOneFile["content"];
12510
 
12511
		#上傳的按鈕
12512
		#函式說明:
12513
		#放置按鈕
12514
		#回傳結果:
12515
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
12516
		#$result["function"],當前執行的函數.
12517
		#$result["error"],錯誤訊息陣列.
12518
		#$result["content"],按鈕語法.
12519
		#必填參數:
12520
		$conf["form::button"]["buttonDisplayValue"]=$conf["submitButtonName"];#爲按鈕上顯示的文字。
12521
		#可省略參數:
12522
		$conf["form::button"]["buttonStyleName"]=$conf["submitButtonClass"];#可省略,爲按鈕所要使用的css樣式類別名稱,預設的css樣式爲 __simpleButtonLinkDefaultButtonCssStyle 。
12523
			#其屬性爲   "width","height","font-size","text-align"
12524
			#其屬性值爲 "100%" ,  "50"  ,    "30"   ,   "center"
12525
		#$conf["buttonActionScriptFunction"]="";#可省略,爲按下按鈕時所要執行的javaScript函式,預設不設定。
12526
			#"document.forms.formName.submit()"爲傳送名爲testForm的表單內容
12527
			#"window.print()"爲使用瀏覽器內建工具列印當前網頁
12528
		#$conf["buttonBorder"]="";#可省略,爲IE9內會自動產生外框,此爲外框的厚度,屬性值爲正整數,預設爲0。
12529
		#$conf["disabled"]="true";#可省略,為按鈕的功能是否要取消,若為"true"則代表要取消,若為"false"則代表功能正常,預設為"false".
12530
		#$conf["tableStart"]="true";#爲是否要表格開始。"false"代表否,"true"代表是。預設爲"false"。
12531
		#$conf["tableClass"]="";#表格要套用的css樣式,若省略的話,則預設爲 __defaultTbaleCsssStyle 其屬性爲 table-layout:fixed word-break:break-all width:100% ,須搭配 $conf["tablStart"] 與 $conf["tableEnd"] 使用。
12532
		#$conf["trStart"]="true";#爲是否要以<tr>開頭,"true"表示"是"。也可以看作新的一列開始,預設為"false".
12533
		#$conf["trClass"]="__withoutBorder";#<tr>要套用的css樣式,預設為"__withoutBorder",亦即沒有框線的樣式;"__withBorder"則爲有框線的樣式
12534
		#$conf["tdStart"]="true";#爲是否要以<td>開頭,"true"表示"是"。也可以看成列裏面的元素開始,預設為"false".
12535
		#$conf["tdClass"]="__withoutBorder";#<td>要套用的css樣式,"__withoutBorder"爲沒有框線的樣式;__withBorder爲有框線的樣式
12536
		#$conf["tdEnd"]="true";#爲是否要以</td>結尾,"true"表示"是"。也可以看成列裏面的元素結束,預設為"false".
12537
		#$conf["trEnd"]="true";#爲是否要以</tr>結尾,"true"表示"是"。也可以看作該列結束,預設為"false".
12538
		#$conf["tableEnd"]="true";#爲是否要表格結束。"false"代表否,"true"代表是,預設爲"false"。
12539
		#$conf["form::button"]["formStart"]="true";#爲是否要表單開始,如果爲"true"則代表要表單開始,預設為"false".
12540
		#$conf["form::button"]["action"]=$conf["backPage"];#爲表單要傳送到哪個頁面,須搭配$conf["formStart"]與$conf["formEnd"]參數使用
12541
		#$conf["target"]="";#為目標表單顯示的方式,若沒設定則預設爲"_self",其他可用的參數爲 "_blank"、"_parent"、"_top",也可以是iframe的名稱。須搭配$conf["formStart"]與$conf["formEnd"]參數使用
12542
		$conf["form::button"]["formEnd"]="true";#爲是否要表單結束,如果爲"true"則代表要表單結束,預設為"false".
12543
		#參考資料:
12544
		#http://stackoverflow.com/questions/3014649/how-to-disable-html-button-using-javascript
12545
		$submitButton=form::button($conf["form::button"]);
12546
		unset($conf["form::button"]);
12547
 
12548
		#如果回上頁的按鈕建立失敗
12549
		if($submitButton["status"]=="false"){
12550
 
12551
			#設置執行失敗
12552
			$result["status"]="false";
12553
 
12554
			#設置執行錯誤
12555
			$result["error"]=$submitButton;
12556
 
12557
			#回傳結果
12558
			return $result;
12559
 
12560
			}#if end
12561
 
12562
		#放置上傳的按鈕
12563
		$conf["table::printColumn"]["tdContent"][]=$submitButton["content"];
12564
 
12565
		#建立一欄表格
12566
		#函式說明:
12567
		#建立欄的元素,以及指定裏面要放什麼內容
12568
		#回傳的變數:
12569
		#$result["content"],建立欄元素的語法
12570
		#$result["status"],"true"代表執行成功;"false"代表執行失敗。
12571
		#$result["error"],錯誤訊息陣列
12572
		#必填參數:
12573
		$conf["table::printColumn"]["trClass"]="__withoutBorder";#列的樣式,"__withoutBorder"爲沒有框線的樣式;__withBorder爲有框線的樣式
12574
		$conf["table::printColumn"]["tdClass"]="__withoutBorder";#行的樣式,"__withoutBorder"爲沒有框線的樣式;__withBorder爲有框線的樣式
12575
		#$conf["table::printColumn"]["tdContent"]=array();#列裏面要放的元素是?如果要空一列則可以輸array("&nbsp;")
12576
		#可省略參數:
12577
		#$conf["table::printColumn"]["formData"],字串,$conf["tdContent"]裡面要放的元素是否含有表單,"true"代表有,"false"代表沒有,預設為"false".
12578
		$conf["table::printColumn"]["formData"]="true";
12579
		$conf["table::printColumn"]["tableStartClass"]="__withoutBorder";#列的樣式,預設為"__withoutBorder"爲沒有框線的樣式;__withBorder爲有框線的樣式
12580
		$conf["table::printColumn"]["tableStart"]="true";#爲是否要表格開始,"true"表示"是",預設為"false".
12581
		$conf["table::printColumn"]["tableEnd"]="true";#爲是否要表格結束,"true"表示"是",預設為"false".
12582
		#$conf["formStart"]="true";#是否要有表單的開始,預設為"false".
12583
		#$conf["formName"]="";#該表單的名稱
12584
		#$conf["formAction"]="";#表單提交的目的地,若$conf["formStart"]有設置,則該參數也要設置
12585
		#$conf["formTarget"]="_self";#為顯示的方式,若沒設定則預設爲"_self",其他可用的參數爲 "_blank"、"_parent"、"_top",也可以是iframe的名稱。
12586
		#$conf["formEnd"]="true";#是否要有表單的結束,預設為"false".
12587
		#$conf["table::printColumn"]["spaceBlockAferPerElement"]="true";#是否每個欄元素(除了最後一個元素)後面都要空一列。"true"代表要空一列.預設是不空一列.
12588
		$printColumn=table::printColumn($conf["table::printColumn"]);
12589
		unset($conf["table::printColumn"]);
12590
 
12591
		#串接一欄表格
12592
		$result["content"]=$result["content"].$printColumn["content"];
12593
 
12594
		#設置執行正常
12595
		$result["status"]="true";
12596
 
12597
		#回傳結果
12598
		return $result;
12599
 
12600
		}#function uploadOneFileCom end
12601
 
12602
	/*
12603
	#函式說明:
12604
	#檢測接收的檔案是否符合條件
12605
	#回傳的內容:
12606
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
12607
	#$result["function"],當前執行的函數.
12608
	#$result["error"],錯誤訊息陣列.
12609
	#$result["passed"],檢查是否都通過.
12610
	#$result["fileNameCheck"],若爲"true"則代表檔案名稱正確,"false"檔案名稱不正確.
12611
	#$result["fileSizeCheck"],若爲"true"則代表檔案大小正確。
12612
	#$result["fileTypeCheck"],若爲"true"則代表檔案類型正確。
12613
	#必填參數:
12614
	$conf["formFileName"]="";#爲該檔案上傳時候的表單名稱
12615
	#可省略參數:
12616
	#$conf["uploadedFileName"]="";#爲檔案上傳時的檔案名稱,省略則跳過此部分驗證
12617
	#$conf["uploadedFileSize"]="";#爲檔案上傳時的檔案大小,省略則跳過此部分驗證
12618
	#$conf["uploadedFileType"]=array("");#爲檔案上傳時的檔案型別,需爲陣列型別,省略則跳過此部分驗證
12619
	#參考資料:
12620
	#無.
12621
	#備註:
12622
	#無.
12623
	*/
12624
	public static function simpleFileAuthentication(&$conf){
12625
 
12626
		#初始化要回傳的變數
12627
		$result=array();
12628
 
12629
		#設置當前執行的函式
12630
		$result["function"]=__FUNCTION__;
12631
 
12632
		#初始化表單開始的語法
12633
		$result["content"]="";
12634
 
12635
		#如果 $conf 不為陣列
12636
		if(gettype($conf)!="array"){
12637
 
12638
			#設置執行失敗
12639
			$result["status"]="false";
12640
 
12641
			#設置執行錯誤訊息
12642
			$result["error"][]="\$conf變數須為陣列形態";
12643
 
12644
			#如果傳入的參數為 null
12645
			if($conf==null){
12646
 
12647
				#設置執行錯誤訊息
12648
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
12649
 
12650
				}#if end
12651
 
12652
			#回傳結果
12653
			return $result;
12654
 
12655
			}#if end
12656
 
12657
		#檢查參數
12658
		#函式說明:
12659
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
12660
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
12661
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
12662
		#$result["function"],當前執行的函式名稱.
12663
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
12664
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
12665
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
12666
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
12667
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
12668
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
12669
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
12670
		#必填參數:
12671
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
12672
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
12673
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
12674
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("formFileName");
12675
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double");
12676
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string");
12677
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
12678
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
12679
		#可省略參數:
12680
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
12681
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
12682
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
12683
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("uploadedFileName","uploadedFileSize","uploadedFileType");
12684
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
12685
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string","array");
12686
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
12687
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,null,null);
12688
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
12689
		#$conf["arrayCountEqualCheck"][]=array();
12690
		#參考資料:
12691
		#array_keys=>http://php.net/manual/en/function.array-keys.php
12692
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
12693
		unset($conf["variableCheck::checkArguments"]);
12694
 
12695
		#如果 $checkArguments["status"] 等於 "false"
12696
		if($checkArguments["status"]=="false"){
12697
 
12698
			#設置錯誤識別
12699
			$result["status"]="false";
12700
 
12701
			#設置錯誤訊息
12702
			$result["error"]=$checkArguments;
12703
 
12704
			#回傳結果
12705
			return $result;
12706
 
12707
			}#if end
12708
 
12709
		#如果 $checkArguments["passed"] 等於 "false"
12710
		if($checkArguments["passed"]=="false"){
12711
 
12712
			#設置錯誤識別
12713
			$result["status"]="false";
12714
 
12715
			#設置錯誤訊息
12716
			$result["error"]=$checkArguments;
12717
 
12718
			#回傳結果
12719
			return $result;
12720
 
12721
			}#if end
12722
 
12723
		#預設為檢查通過
12724
		$result["passed"]="true";
12725
 
12726
		#檢查上傳的檔案表單名稱是否正確
12727
		if(!isset($_FILES[$conf["formFileName"]])){
12728
 
12729
			#設置錯誤識別
12730
			$result["status"]="false";
12731
 
12732
			#設置錯誤訊息
12733
			$result["error"][]="未接收到名為 ".$conf["formFileName"]." 的表單變數";
12734
 
12735
			#回傳結果
12736
			return $result;
12737
 
12738
			}#if end
12739
 
12740
		#如果$conf["uploadedFileName"]有設定
12741
		if(isset($conf["uploadedFileName"])){
12742
 
12743
			#如果 $_FILES[$conf["formFileName"]]["name"] 有設定
12744
			if(isset($_FILES[$conf["formFileName"]]["name"])){
12745
 
12746
				#則驗證檔案名稱
12747
				if($_FILES[$conf["formFileName"]]["name"]==$conf["uploadedFileName"]){
12748
 
12749
					#$result["fileNameCheck"]設爲"true"
12750
					$result["fileNameCheck"]="true";
12751
 
12752
					}#if end
12753
 
12754
				#若檔案名稱驗證失敗
12755
				else{
12756
 
12757
					#$result["fileNameCheck"]設爲"false"
12758
					$result["fileNameCheck"]="false";
12759
 
12760
					#設置驗證失敗
12761
					$result["passed"]="false";
12762
 
12763
					}#if end
12764
 
12765
				}#if end
12766
 
12767
			}#if end
12768
 
12769
		#如果$conf["uploadedFileSize"]有設定
12770
		if(isset($conf["uploadedFileSize"])) {
12771
 
12772
			#如果 $_FILES[$conf["formFileName"]]["name"] 有設定
12773
			if(isset($_FILES[$conf["formFileName"]]["name"])){
12774
 
12775
				#則驗證檔案大小
12776
				if($_FILES[$conf["formFileName"]]["size"]==$conf["uploadedFileSize"]){
12777
 
12778
					#$result["fileSizeCheck"]設爲"true"
12779
					$result["fileSizeCheck"]="true";
12780
 
12781
					}#if end
12782
 
12783
				#反之檔案大小不正確
12784
				else{
12785
 
12786
					#$result["fileSizeCheck"]設爲"false"
12787
					$result["fileSizeCheck"]="false";
12788
 
12789
					#設置驗證失敗
12790
					$result["passed"]="false";
12791
 
12792
					}#else end
12793
 
12794
				}#if end
12795
 
12796
			}#if end
12797
 
12798
		#如果有設定$conf["uploadedFileType"]則檢查檔案形態是否符合規定
12799
		if(isset($conf["uploadedFileType"])){
12800
 
12801
			#如果 $_FILES[$conf["formFileName"]]["name"] 有設定
12802
			if(isset($_FILES[$conf["formFileName"]]["name"])){
12803
 
12804
				#取得可以通過驗證的檔案類型數量
12805
				$fileTypeCount=count($conf["uploadedFileType"]);
12806
 
12807
				#檔案類型只要是以下其中一種即可
12808
				for($i=0;$i<$fileTypeCount;$i++){
12809
 
12810
					#中間的幾種,若有符合的
12811
					if($_FILES[$conf["formFileName"]]['type']==$conf["uploadedFileType"][$i]){
12812
 
12813
						#符合檔案形態則設爲"true"
12814
						$result["fileTypeCheck"]="true";
12815
 
12816
						#挑出迴圈
12817
						break;
12818
 
12819
						}#if end
12820
 
12821
					#反之代表
12822
					else{
12823
 
12824
						#不符合檔案形態則設爲"false"
12825
						$result["fileTypeCheck"]="false";
12826
 
12827
						#設置驗證失敗
12828
						$result["passed"]="false";
12829
 
12830
						}#else end
12831
 
12832
					}#for end
12833
 
12834
				}#if end
12835
 
12836
			}#if end
12837
 
12838
		#如果 $result["status"] 沒有設置
12839
		if(!isset($result["status"])){
12840
 
12841
			#代表執行到這邊代表執行正常
12842
			$result["status"]="true";
12843
 
12844
			}#if end
12845
 
12846
		#回傳結果
12847
		return $result;
12848
 
12849
		}#function simpleFileAuthentication end
12850
 
12851
	/*
12852
	#函式說明:
12853
	#處理一個已上傳的檔案,用作驗證
12854
	#回傳結果:
12855
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
12856
	#$result["function"],當前執行的函數.
12857
	#$result["error"],錯誤訊息陣列.
12858
	#$result["passed"],驗證成功為"true"失敗則為false".
12859
	#$result["fileNameCheck"],若爲"true"則代表檔案名稱正確,"false"檔案名稱不正確.
12860
	#$result["fileSizeCheck"],若爲"true"則代表檔案大小正確。
12861
	#$result["fileTypeCheck"],若爲"true"則代表檔案類型正確。
12862
	#必填參數:
12863
	$conf["formFileName"]="";#該上傳檔案的表單名稱
12864
	$conf["uploadFileName"]="";#如果上傳的檔案名稱等於 $conf["uploadFileName"] 則通過第一階段驗證
12865
	$conf["uploadFileSize"]="";#如果上傳的檔案大小等於 $conf["uploadFileSize"] 則通過第二階段驗證
12866
	$conf["uploadedFileType"]="";#如果上傳的檔案類型等於 $conf["uploadedFileType"] 則通過第三階段驗證
12867
	$conf["password"]="";#供驗證用的內容。
12868
	#用戶段會取得的變數內容:
12869
	#$_SESSION["password"],用來做檢查,是否通過認證的session變數,若php設定檔沒有自動啓用session的話,此行前面必須要有 session_start();
12870
	#可省略參數:
12871
	#$conf["passAction"]="";#如果檔案驗證成功,轉址到?沒設定則不轉址
12872
	#$conf["failedAction"]="";#如果檔案驗正不通過則,轉址到?沒設定則不轉址
12873
	#參考資料:
12874
	#無.
12875
	#備註:
12876
	#無.
12877
	*/
12878
	public static function responseOneFileForAuthentication($conf){
12879
 
12880
		#初始化要回傳的變數
12881
		$result=array();
12882
 
12883
		#設置當前執行的函式
12884
		$result["function"]=__FUNCTION__;
12885
 
12886
		#初始化表單開始的語法
12887
		$result["content"]="";
12888
 
12889
		#如果 $conf 不為陣列
12890
		if(gettype($conf)!="array"){
12891
 
12892
			#設置執行失敗
12893
			$result["status"]="false";
12894
 
12895
			#設置執行錯誤訊息
12896
			$result["error"][]="\$conf變數須為陣列形態";
12897
 
12898
			#如果傳入的參數為 null
12899
			if($conf==null){
12900
 
12901
				#設置執行錯誤訊息
12902
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
12903
 
12904
				}#if end
12905
 
12906
			#回傳結果
12907
			return $result;
12908
 
12909
			}#if end
12910
 
12911
		#檢查參數
12912
		#函式說明:
12913
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
12914
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
12915
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
12916
		#$result["function"],當前執行的函式名稱.
12917
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
12918
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
12919
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
12920
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
12921
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
12922
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
12923
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
12924
		#必填參數:
12925
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
12926
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
12927
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
12928
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("formFileName","uploadedFileName","uploadedFileSize","uploadedFileType");
12929
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double");
12930
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string","string","array");
12931
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
12932
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
12933
		#可省略參數:
12934
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
12935
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
12936
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
12937
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("passAction","failedAction");
12938
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
12939
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string");
12940
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
12941
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,null);
12942
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
12943
		#$conf["arrayCountEqualCheck"][]=array();
12944
		#參考資料:
12945
		#array_keys=>http://php.net/manual/en/function.array-keys.php
12946
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
12947
		unset($conf["variableCheck::checkArguments"]);
12948
 
12949
		#如果 $checkArguments["status"] 等於 "false"
12950
		if($checkArguments["status"]=="false"){
12951
 
12952
			#設置錯誤識別
12953
			$result["status"]="false";
12954
 
12955
			#設置錯誤訊息
12956
			$result["error"]=$checkArguments;
12957
 
12958
			#回傳結果
12959
			return $result;
12960
 
12961
			}#if end
12962
 
12963
		#如果 $checkArguments["passed"] 等於 "false"
12964
		if($checkArguments["passed"]=="false"){
12965
 
12966
			#設置錯誤識別
12967
			$result["status"]="false";
12968
 
12969
			#設置錯誤訊息
12970
			$result["error"]=$checkArguments;
12971
 
12972
			#回傳結果
12973
			return $result;
12974
 
12975
			}#if end
12976
 
12977
		#取得驗證的結果
12978
		#函式說明:
12979
		#檢測接收的檔案是否符合條件
12980
		#回傳的內容:
12981
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
12982
		#$result["function"],當前執行的函數.
12983
		#$result["error"],錯誤訊息陣列.
12984
		#$result["passed"],檢查是否都通過.
12985
		#$result["fileNameCheck"],若爲"true"則代表檔案名稱正確,"false"檔案名稱不正確.
12986
		#$result["fileSizeCheck"],若爲"true"則代表檔案大小正確。
12987
		#$result["fileTypeCheck"],若爲"true"則代表檔案類型正確。
12988
		#必填參數:
12989
		$conf["form::simpleFileAuthentication"]["formFileName"]=$conf["formFileName"];#爲該檔案上傳時候的表單名稱
12990
		#可省略參數:
12991
		$conf["form::simpleFileAuthentication"]["uploadedFileName"]=$conf["uploadFileName"];#爲檔案上傳時的檔案名稱,省略則跳過此部分驗證
12992
		$conf["form::simpleFileAuthentication"]["uploadedFileSize"]=$conf["uploadedFileSize"];#爲檔案上傳時的檔案大小,省略則跳過此部分驗證
12993
		$conf["form::simpleFileAuthentication"]["uploadedFileType"]=$conf["uploadedFileType"];#爲檔案上傳時的檔案型別,需爲陣列型別,省略則跳過此部分驗證
12994
		$simpleFileAuthentication=form::simpleFileAuthentication($conf["form::simpleFileAuthentication"]);
12995
		unset($conf["form::simpleFileAuthentication"]);
12996
 
12997
		#如果驗證出錯
12998
		if($simpleFileAuthentication["status"]=="false"){
12999
 
13000
			#設置錯誤識別
13001
			$result["status"]="false";
13002
 
13003
			#設置錯誤訊息
13004
			$result["error"]=$simpleFileAuthentication;
13005
 
13006
			#回傳結果
13007
			return $result;
13008
 
13009
			}#if end
13010
 
13011
		#如果驗證不通過
13012
		if($simpleFileAuthentication["passed"]=="false"){
13013
 
13014
			#設置執行正常
13015
			$result["status"]="true";
13016
 
13017
			#設置驗證不通過
13018
			$result["passed"]="false";
13019
 
13020
			#設置檢查結果資訊
13021
			$result["fileNameCheck"]=$simpleFileAuthentication["fileNameCheck"];
13022
			$result["fileSizeCheck"]=$simpleFileAuthentication["fileNameCheck"];
13023
			$result["fileTypeCheck"]=$simpleFileAuthentication["fileNameCheck"];
13024
 
13025
			#如果 $conf["failedAction"] 有設定
13026
			if(isset($conf["failedAction"])){
13027
 
13028
				#轉址到 $conf["failedAction"]
13029
				$conf["header"]["headerLocation"]["headerLocation"]=$conf["failedAction"];
13030
				header::redirectionNow($conf["header"]["headerLocation"]);
13031
				unset($conf["header"]["headerLocation"]);
13032
 
13033
				}#if end
13034
 
13035
			#回傳結果
13036
			return $result;
13037
 
13038
			}#if end
13039
 
13040
		#如果 $authenticalResult["passed"] 等於 "true"
13041
		if($authenticalResult["passed"]=="true"){
13042
 
13043
			#給予通行碼
13044
			$_SESSION["password"]=$conf["password"];
13045
 
13046
			#如果 $conf["passAction"] 有設定
13047
			if(isset($conf["passAction"])){
13048
 
13049
				#轉址到	$conf["passAction"]
13050
				$conf["header"]["headerLocation"]["headerLocation"]=$conf["passAction"];
13051
				header::redirectionNow($conf["header"]["headerLocation"]);
13052
				unset($conf["header"]["headerLocation"]);
13053
 
13054
				}#if end
13055
 
13056
			#設置驗證通過
13057
			$result["passed"]="true";
13058
 
13059
			}#if end
13060
 
13061
		#設置執行正常
13062
		$result["status"]="true";
13063
 
13064
		#回傳結果
13065
		return $result;
13066
 
13067
		}#function responseOneFileForAuthentication end
13068
 
13069
	/*
13070
	#函式說明:
13071
	#處理上傳到暫存目錄的檔案,可以移動到指定的位置,並指定檔案的名稱。並且可以指定刪除舊有的檔案,然後將新檔案的相對位置寫入到資料庫裏面。
13072
	#回傳的變數:
13073
	#$result["status"],整體上傳有無成功。"true"代表完整成功 "false"代表有過程有錯誤
13074
	#$result["error"],錯誤訊息陣列,$result["error"][0] 為"沒有接收到上傳的檔案",則代表沒有上傳檔案.
13075
	#$result["warning"],警告訊息陣列
13076
	#$result["ServerFileName"],檔案名稱
13077
	#$result["ServerFileType"],檔案類型
13078
	#$result["ServerFileSize"],檔案大小
13079
	#$result["fileRelativePosition"],檔案的相對位置,包含檔案名稱與附檔名。
13080
	#必填參數:
13081
	#$conf["formFileName"],字串,為上傳檔案時表單傳送時的名稱
13082
	$conf["formFileName"]="";
13083
	#$conf["fileArgu"],字串,__FILE__的內容
13084
	$conf["fileArgu"]=__FILE__;
13085
	#可省略參數:
13086
	#$conf["uploadDirUserDefine"],字串,為存放上傳檔案的目錄,如果沒設定則會自行建立依照系統時間的年月日十分秒來替資料夾命名,並將上傳的檔案存在裏面。
13087
	#$conf["uploadDirUserDefine"]="";
13088
	#$conf["ServerFilenameUserDefine"],字串,為存放在伺服器上的檔案名稱,如果沒設定則依照台灣時間的年月日時分秒命名
13089
	#$conf["ServerFilenameUserDefine"]="";
13090
	#$conf["NoFileExtension"],字串,若為 "true" 則表 指定了檔案名稱後,不用再加上檔案型的副檔名,預設為"false".
13091
	#$conf["NoFileExtension"]="true";
13092
	#$conf["limitPage"],字串陣列,限制只能從哪些網頁檔案過來。
13093
	#$conf["limitPage"]=array("");
13094
	#$conf["taskName"],字串,爲該上傳作業的名稱,若沒設定,則預設爲"上傳作業"。
13095
	#$conf["taskName"]="";
13096
	#$conf["eraseOldFile"],字串,如果為"true"的話會移除同名的舊檔案,其值爲檔案的相對位置,預設為"false",不移除同名的檔案,並透過編號保留新的檔案.
13097
	#$conf["eraseOldFile"]="";
13098
	#$conf["dbProcess"],字串,如果爲"true",則會進行資料表資料更新的動作,亦即要設定 $conf["updatingMysqlServerAddress"] $conf["updatingMysqlAccount"] $conf["updatingDataBaseName"] $conf["updatingDataTableName"] $conf["updatingConditionDataTableColumnName"] $conf["updatingConditionDataTableColumnValue"] $conf["updatingTargetDataTableColumnName"] $conf["updatingTargetDataTableColumnValue"] 的內容,預設為"false".
13099
	#$conf["dbProcess"]="true";
13100
	#$conf["updatingMysqlServerAddress"],字串,資料庫位於網路上的哪個位置.
13101
	#$conf["updatingMysqlServerAddress"]=$dbAddress;
13102
	#$conf["updatingMysqlAccount"],字串,連線時要使用的帳號,省略時代表不用密碼進行連線.
13103
	#$conf["updatingMysqlAccount"]=$dbAccount;
13104
	#$conf["updatingMysqlPassword"],字串,連線時要使用的密碼.
13105
	#$conf["updatingMysqlPassword"]=$dbPassword;
13106
	#$conf["updatingDataBaseName"],字串,要更新的目標資料所屬資料庫名稱.
13107
	#$conf["updatingDataBaseName"]=$dbName;
13108
	#$conf["updatingDataTableName"],字串,要更新的目標資料位於哪個資料表.
13109
	#$conf["updatingDataTableName"]="";
13110
	#$conf["updatingConditionDataTableColumnName"],字串陣列,要用哪些欄位來識別要更新哪一筆資料,預設為array("id").
13111
	#$conf["updatingConditionDataTableColumnName"]=array("id");
13112
	#$conf["updatingConditionDataTableColumnValue"],字串陣列,該條件欄位內容的數值要爲多少,才是我們要修改的那筆資料。
13113
	#$conf["updatingConditionDataTableColumnValue"]=array("");
13114
	#$conf["updatingTargetDataTableColumnName"],字串陣列,要更新的資料欄位有?
13115
	#$conf["updatingTargetDataTableColumnName"]=array("");
13116
	#$conf["updatingTargetDataTableColumnValue"],字串陣列,目標資料欄位要改成什麼樣的數值,如果其元素含有"filePosition",則會替換成新檔案的相對位置
13117
	#$conf["updatingTargetDataTableColumnValue"]=array("");
13118
	#參考資料:
13119
	#file_exist()的用法
13120
	#http://php.net/manual/en/function.file-exists.php
13121
	#備註:
13122
	#無.
13123
	*/
13124
	public static function processUploadedFile($conf){
13125
 
13126
		#初始化要回傳的內容
13127
		$result=array();
13128
 
13129
		#設置當前執行的函數
13130
		$result["function"]=__FUNCTION__;
13131
 
13132
		#如果 $conf 不為陣列
13133
		if(gettype($conf)!="array"){
13134
 
13135
			#設置執行失敗
13136
			$result["status"]="false";
13137
 
13138
			#設置執行錯誤訊息
13139
			$result["error"][]="\$conf變數須為陣列形態";
13140
 
13141
			#如果傳入的參數為 null
13142
			if($conf==null){
13143
 
13144
				#設置執行錯誤訊息
13145
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
13146
 
13147
				}#if end
13148
 
13149
			#回傳結果
13150
			return $result;
13151
 
13152
			}#if end
13153
 
13154
		#檢查參數
13155
		#函式說明:
13156
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
13157
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
13158
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
13159
		#$result["function"],當前執行的函式名稱.
13160
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
13161
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
13162
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
13163
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
13164
		#必填參數:
13165
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
13166
		$conf["variableCheck.checkArguments"]["varInput"]=&$conf;
13167
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
13168
		$conf["variableCheck.checkArguments"]["mustBeFilledVariableName"]=array("formFileName","fileArgu");
13169
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double");
13170
		$conf["variableCheck.checkArguments"]["mustBeFilledVariableType"]=array("string","string");
13171
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
13172
		$conf["variableCheck.checkArguments"]["referenceVarKey"]="variableCheck.checkArguments";
13173
		#可省略參數:
13174
		#$conf["variableCheck.checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"false"。
13175
		#$conf["variableCheck.checkArguments"]["canBeEmptyString"]="false";
13176
		#$conf["variableCheck.checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
13177
		$conf["variableCheck.checkArguments"]["skipableVariableName"]=array("uploadDirUserDefine","ServerFilenameUserDefine","NoFileExtension","limitPage","taskName","eraseOldFile","dbProcess","updatingMysqlServerAddress","updatingMysqlAccount","updatingMysqlPassword","updatingDataBaseName","updatingDataTableName","updatingConditionDataTableColumnName","updatingConditionDataTableColumnValue","updatingTargetDataTableColumnName","updatingTargetDataTableColumnValue");
13178
		#$conf["variableCheck.checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
13179
		$conf["variableCheck.checkArguments"]["skipableVariableType"]=array("string","string","string","array","string","string","string","string","string","string","string","string","array","array","array","array");
13180
		#$conf["variableCheck.checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,"null"代表不指定.
13181
		$conf["variableCheck.checkArguments"]["skipableVarDefaultValue"]=array(null,null,"false",null,"上傳作業","false","false",null,null,null,null,null,array("id"),null,null,null);
13182
		$checkResult=variableCheck::checkArguments($conf["variableCheck.checkArguments"]);
13183
		unset($conf["variableCheck.checkArguments"]);
13184
 
13185
		#如果檢查失敗
13186
		if($checkResult["status"]=="false"){
13187
 
13188
			#設置執行不正常
13189
			$result["status"]="false";
13190
 
13191
			#程式停止執行
13192
			$result["error"]=$checkResult;
13193
 
13194
			#回傳結果
13195
			return $result;
13196
 
13197
			}#if end
13198
 
13199
		#如果檢查不通過
13200
		if($checkResult["passed"]=="false"){
13201
 
13202
			#設置執行不正常
13203
			$result["status"]="false";
13204
 
13205
			#程式停止執行
13206
			$result["error"]=$checkResult;
13207
 
13208
			#回傳結果
13209
			return $result;
13210
 
13211
			}#if end
13212
 
13213
		#過濾 $conf["formFileName"] 避免錯誤
13214
		#函式說明:
13215
		#處理字串避免網頁出錯
13216
		#回傳結果:
13217
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
13218
		#$result["function"],當前執行的函數.
13219
		#$result["content"],爲處理好的字串.
13220
		#$result["error"],錯誤訊息陣列.
13221
		#必填參數:
13222
		$conf["stringProcess::correctCharacter"]["stringIn"]=$conf["formFileName"];#爲要處理的字串
13223
		#可省略的參數:
13224
		$conf["stringProcess::correctCharacter"]["selectedCharacter"]=array("<",">","=","//","'","$","%","&","|","/*","*\/","#","\""," ");#爲被選擇要處理的字串/字元,須爲陣列值。
13225
			#若不設定則預設爲要將這些字串作替換("<",">","=","//","'","$","%","&","|","/*","*\/","#","\"")。
13226
			#特殊字元,「\n」代表換行,「\t」代表tab鍵的間隔
13227
		#$conf["stringProcess::correctCharacter"]["changeTo"]=array("","","","","","","","","","","","","");#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
13228
		$correctCharacter=stringProcess::correctCharacter($conf["stringProcess::correctCharacter"]);
13229
		unset($conf["stringProcess::correctCharacter"]);
13230
 
13231
		#如果過濾字串失敗
13232
		if($correctCharacter["status"]=="false"){
13233
 
13234
			#設置執行失敗
13235
			$result["status"]="false";
13236
 
13237
			#設置執行錯誤訊息
13238
			$result["error"]=$correctCharacter;
13239
 
13240
			#回傳結果
13241
			return $result;
13242
 
13243
			}#if end
13244
 
13245
		#置換成處理過後的 $conf["formFileName"]
13246
		$conf["formFileName"]=$correctCharacter["content"];
13247
 
13248
		#如果檔案的表單變數存在
13249
		if(isset($_FILES[$conf["formFileName"]])){
13250
 
13251
			#如果原始檔案名稱爲空的
13252
			if($_FILES[$conf["formFileName"]]["name"]==""){
13253
 
13254
				#設置錯誤識別
13255
				$result["status"]="false";
13256
 
13257
				#設置錯誤訊息
13258
				$result["error"][]="沒有接收到上傳的檔案";
13259
 
13260
				#回傳結果
13261
				return $result;
13262
 
13263
				}#if end
13264
 
13265
			}#if end
13266
 
13267
		#如果檔案的表單變數不存在
13268
		else{
13269
 
13270
			#設置錯誤識別
13271
			$result["status"]="false";
13272
 
13273
			#設置錯誤訊息
13274
			$result["error"][]="沒有接收到上傳的檔案";
13275
 
13276
			#回傳結果
13277
			return $result;
13278
 
13279
			}#else end
13280
 
13281
		#取得系統時間
13282
		#函式說明:
13283
		#回傳西元的目前時間,格式為2010年07月24日15時30分33秒
13284
		#回傳結果:
13285
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
13286
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
13287
		#$result["function"],當前執行的函式名稱.
13288
		#$result["content"],西元的目前時間.
13289
		#必填參數:
13290
		$conf["time::getFullDateAndTime"]["timeZone"]="Asia/Taipei";#時區代號,可以設定的時區列表:http://www.php.net/manual/en/timezones.php
13291
			#ex:"Asia/Taipei"
13292
		#可省略參數:
13293
		$conf["time::getFullDateAndTime"]["showSecond"]="true";#若爲"true"則會顯示秒數,預設為"true".
13294
		#參考資料:
13295
		#date函數用法=>http://php.net/manual/en/function.date.php.
13296
		$getFullDateAndTime=time::getFullDateAndTime($conf["time::getFullDateAndTime"]);
13297
		unset($conf["time::getFullDateAndTime"]);
13298
 
13299
		#如果取得取得時間失敗
13300
		if($getFullDateAndTime["status"]=="false"){
13301
 
13302
			#設置錯誤識別
13303
			$result["status"]="false";
13304
 
13305
			#設置錯誤訊息
13306
			$result["error"]=$getFullDateAndTime;
13307
 
13308
			#回傳結果
13309
			return $result;
13310
 
13311
			}#if end
13312
 
13313
		#取得格林威治時間+八小時
13314
		$timeTw=$getFullDateAndTime["content"];
13315
 
13316
		#如果$conf["uploadDirUserDefine"]有設定
13317
		if(isset($conf["uploadDirUserDefine"])){
13318
 
13319
			#則套用存放上傳檔案的目錄
13320
			$uploadDir=$conf["uploadDirUserDefine"] ;
13321
 
13322
			}#if end
13323
 
13324
		#否則存放的資料夾名稱爲臺灣的時間
13325
		else{
13326
 
13327
			$uploadDir=$timeTw;
13328
 
13329
			#建立特定資料夾
13330
			#函式說明:
13331
			#建立資料夾
13332
			#回傳結果:
13333
			#$result,true爲建立成功,false爲建立失敗
13334
			#必填參數:
13335
			$conf["fileAccess"]["createNewFolder"]["dirPositionAndName"]=$uploadDir;#新建的位置與名稱
13336
			#可省略參數:
13337
			#$conf["dirPermission"]="";新建資料夾的權限設定,預設爲0777,亦即所有人皆可以讀、寫、存取
13338
			#參考資料:
13339
			#http:#php.net/manual/en/function.mkdir.php
13340
			#範本:
13341
			# mkdir("/path/to/my/dir", 0700);
13342
			$createFolder=fileAccess::createNewFolder($conf["fileAccess"]["createNewFolder"]);
13343
			unset($conf["fileAccess"]["createNewFolder"]);
13344
 
13345
			#如果 $createFolder 等於 "false"
13346
			if($createFolder["status"]==="false"){
13347
 
13348
				#設置錯誤識別
13349
				$result["status"]="false";
13350
 
13351
				#設置錯誤訊息
13352
				$result["error"]=$createFolder;
13353
 
13354
				#回傳結果
13355
				return $result;
13356
 
13357
				}#if end
13358
 
13359
			}#else end
13360
 
13361
		#如果$conf["uploadDirUserDefine"]有設定
13362
		if(isset($conf["ServerFilenameUserDefine"])){
13363
 
13364
			#給予伺服器檔案的名稱
13365
			$ServerFilename=$conf["ServerFilenameUserDefine"];
13366
 
13367
			}#if end
13368
 
13369
		#否則檔案名稱指定為臺灣時間
13370
		else{
13371
 
13372
			$ServerFilename=$timeTw;
13373
 
13374
			}#else end
13375
 
13376
		#原始檔案名稱
13377
		$fileOrginalName=$_FILES[$conf["formFileName"]]["name"];
13378
 
13379
		#初始化儲存檔案副檔名的變數
13380
		$FileExtension="";
13381
 
13382
		#檔案的附檔名爲上傳的檔案名稱最後一個小數點後面的內容。
13383
 
13384
		#函式說明:
13385
		#將固定格式的字串分開,並回傳分開的結果。
13386
		#回傳的參數:
13387
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
13388
		#$result["error"],錯誤訊息陣列
13389
		#$result["oriStr"],要分割的原始字串內容
13390
		#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
13391
		#$result["dataCounts"],爲總共分成幾段
13392
		#必填參數:
13393
		$conf["stringProcess::spiltString"]["stringIn"]=$fileOrginalName;#要處理的字串。
13394
		$conf["stringProcess::spiltString"]["spiltSymbol"]=".";#爲以哪個符號作爲分割
13395
		#備註:
13396
		#建議新增如果透過" "分割後的內容含有""的元素,將其移除,並將後面有內容的元素補上,key也重新排序。
13397
		$stringProcessedResult=stringProcess::spiltString($conf["stringProcess::spiltString"]);
13398
		unset($conf["stringProcess::spiltString"]);
13399
 
13400
		#如果分割字串失敗
13401
		if($stringProcessedResult["status"]=="false"){
13402
 
13403
			#設置錯誤識別
13404
			$result["status"]="false";
13405
 
13406
			#設置錯誤訊息
13407
			$result["error"]=$stringProcessedResult;
13408
 
13409
			#回傳結果
13410
			return $result;
13411
 
13412
			}#if end
13413
 
13414
		#如果分割後的段數只有1段
13415
		if($stringProcessedResult["dataCounts"]<2){
13416
 
13417
			#設置警告訊息
13418
			$result["warning"][]="上傳的檔案沒有副檔名";
13419
 
13420
			#設置副檔名為"unknow"
13421
			$FileExtension=".unknow";
13422
 
13423
			}#if end
13424
 
13425
		#反之代表有副檔名
13426
		else{
13427
 
13428
			#將第一個小數點後的內容視為副檔名
13429
 
13430
			#檔案名稱分成幾段就執行其減1幾次
13431
			for($i=1;$i<$stringProcessedResult["dataCounts"];$i++){
13432
 
13433
				#串接副檔名
13434
				$FileExtension=$FileExtension.".".$stringProcessedResult["dataArray"][$i];
13435
 
13436
				}#for end
13437
 
13438
			}#else end
13439
 
13440
		#將檔案的類型傳遞到變數
13441
		$FileType = $_FILES[$conf["formFileName"]]["type"];
13442
 
13443
		/*
13444
		#由於隨着瀏覽器不同,其檔案類型的名稱也會不同,所以我們就不從檔案類型去類推其副檔名爲何。
13445
 
13446
		#取得原始檔案副檔名的陣列,目前僅適用於firefox
13447
 
13448
		#照片類別
13449
		if($FileType=="image/png"){
13450
 
13451
			$FileExtension = "png";
13452
 
13453
			}
13454
 
13455
		else if($FileType=="image/jpeg"){
13456
 
13457
			$FileExtension = "jpg";
13458
 
13459
			}
13460
 
13461
		else if($FileType=="image/gif"){
13462
 
13463
			$FileExtension = "gif";
13464
			}
13465
 
13466
		#聲音類別
13467
		else if($FileType=="audio/x-ms-wma"){
13468
 
13469
			$FileExtension = "wma";
13470
 
13471
			}
13472
 
13473
		else if($FileType=="audio/mpeg"){
13474
 
13475
			$FileExtension = "mp3";
13476
 
13477
			}
13478
 
13479
		else if($FileType=="video/ogg"){
13480
 
13481
			$FileExtension = "ogg";
13482
			}
13483
 
13484
		#影片類別
13485
		else if($FileType=="video/x-ms-wmv"){
13486
 
13487
			$FileExtension = "wmv";
13488
 
13489
			}
13490
 
13491
		else if($FileType=="video/x-msvideo"){
13492
 
13493
			$FileExtension = "avi";
13494
			}
13495
 
13496
		else if($FileType=="video/ogg"){
13497
 
13498
			$FileExtension = "ogv";
13499
 
13500
			}
13501
 
13502
		else if($FileType=="video/webm"){
13503
 
13504
			$FileExtension = "webm";
13505
 
13506
			}
13507
 
13508
		#純文字類別
13509
		else if($FileType=="text/plain"){
13510
 
13511
			$FileExtension = "txt";
13512
			}
13513
 
13514
		#壓縮檔類別
13515
		else if($FileType=="application/x-tar"){
13516
 
13517
			$FileExtension = "tar";
13518
 
13519
			}
13520
 
13521
		else if($FileType=="application/x-7z-compressed"){
13522
 
13523
			$FileExtension = "7z";
13524
 
13525
			}
13526
 
13527
		else if($FileType=="application/zip"){
13528
 
13529
			$FileExtension = "zip";
13530
 
13531
			}
13532
 
13533
		#2元碼檔案
13534
		else if($FileType=="application/octet-stream"){
13535
 
13536
			$FileExtension = "exe";
13537
 
13538
			}
13539
 
13540
		#如果不是以上的類別
13541
		else{
13542
 
13543
			#則賦予 "unknow" 這個副檔名
13544
			$FileExtension = "unknow";
13545
 
13546
			}
13547
 
13548
		*/
13549
 
13550
		#將原始檔案的大小單位換算成KB
13551
		$storeFileSizeKb = (($_FILES[$conf["formFileName"]]["size"])/1024);
13552
 
13553
		#將原始檔案的大小(KB)小數點全部捨棄,
13554
		$storeFileSizeKb = round($storeFileSizeKb,0);
13555
 
13556
		#將上傳檔案的錯誤代碼傳遞到變數 $file_error
13557
		$FileError =  $_FILES[$conf["formFileName"]]["error"];
13558
 
13559
		#如果上傳的檔案是空的
13560
		if(!isset($_FILES[$conf["formFileName"]]['tmp_name'])){
13561
 
13562
			#設置錯誤識別
13563
			$result["status"]="false";
13564
 
13565
			#設置錯誤訊息
13566
			$result["error"][]="找不到暫存的已上傳檔案";
13567
 
13568
			#回傳結果
13569
			return $result;
13570
 
13571
			}#if end
13572
 
13573
		#如果 $NoFileExtension 有設定
13574
		if(isset($conf["NoFileExtension"])){
13575
 
13576
			#如果 $NoFileExtension 等於 true,
13577
			if($conf["NoFileExtension"]=="true"){
13578
 
13579
				#則副檔名爲""。
13580
				$FileExtension="";
13581
 
13582
				}#if end
13583
 
13584
			}#if end
13585
 
13586
		#檢查目標資料夾是否存在
13587
		#函式說明:檢查多個檔案與資料夾是否存在.
13588
		#回傳的結果:
13589
		#$result["varName"][$i],爲第$i個資料夾或檔案的名稱。
13590
		#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
13591
		#必填參數:
13592
		$conf["fileAccess"]["checkMutiFileExist"]["fileArray"]=array($uploadDir);#要檢查書否存在的檔案有哪些,須爲一維陣列數值。
13593
		$conf["fileAccess"]["checkMutiFileExist"]["fileArgu"]=$conf["fileArgu"];
13594
		#參考資料來源:
13595
		#http://php.net/manual/en/function.file-exists.php
13596
		#http://php.net/manual/en/control-structures.foreach.php
13597
		$checkResult=fileAccess::checkMultiFileExist($conf["fileAccess"]["checkMutiFileExist"]);
13598
		unset($conf["fileAccess"]["checkMutiFileExist"]);
13599
 
13600
		#如果檢查失敗
13601
		if($checkResult["status"]=="false"){
13602
 
13603
			#設置錯誤識別
13604
			$result["status"]="false";
13605
 
13606
			#設置錯誤訊息
13607
			$result["error"]=$checkResult;
13608
 
13609
			#回傳結果
13610
			return $result;
13611
 
13612
			}#if end
13613
 
13614
		#如果 目標資料夾 不存在
13615
		if($checkResult["varExist"][0]=="false"){
13616
 
13617
			#建立特定資料夾
13618
			#函式說明:
13619
			#建立資料夾
13620
			#回傳結果:
13621
			#$result,true爲建立成功,false爲建立失敗
13622
			#必填參數:
13623
			$conf["fileAccess"]["createNewFolder"]["dirPositionAndName"]=$uploadDir;#新建的位置與名稱
13624
			#可省略參數:
13625
			#$conf["dirPermission"]="";新建資料夾的權限設定,預設爲0777,亦即所有人皆可以讀、寫、存取
13626
			#參考資料:
13627
			#http:#php.net/manual/en/function.mkdir.php
13628
			#範本:
13629
			# mkdir("/path/to/my/dir", 0700);
13630
			$createFolder=fileAccess::createNewFolder($conf["fileAccess"]["createNewFolder"]);
13631
			unset($conf["fileAccess"]["createNewFolder"]);
13632
 
13633
			#如果 $createFolder 等於 "false"
13634
			if($createFolder=="false"){
13635
 
13636
				#設置錯誤識別
13637
				$result["status"]="false";
13638
 
13639
				#設置錯誤訊息
13640
				$result["error"][]="建立資料夾失敗";
13641
 
13642
				#回傳結果
13643
				return $result;
13644
 
13645
				}#if end
13646
 
13647
			}#if end
13648
 
13649
		#如果要移除同名的檔案
13650
		if($conf["eraseOldFile"]=="true"){
13651
 
13652
			#檢查指定的上傳檔案是否已經存在
13653
			#如果有同名的檔案存在
13654
			#函式說明:檢查多個檔案與資料夾是否存在.
13655
			#回傳的結果:
13656
			#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
13657
			#$result["error"],錯誤訊息陣列.
13658
			#$resutl["function"],當前執行的函式名稱.
13659
			#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.
13660
			#$result["varName"][$i],爲第$i個資料夾或檔案的名稱。
13661
			#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
13662
			#必填參數:
13663
			$conf["fileAccess::checkMultiFileExist"]["fileArray"]=array($uploadDir."/".$ServerFilename.$FileExtension);#要檢查書否存在的檔案有哪些,須爲一維陣列數值。
13664
			$conf["fileAccess::checkMultiFileExist"]["fileArgu"]=$conf["fileArgu"];
13665
			#參考資料來源:
13666
			#http://php.net/manual/en/function.file-exists.php
13667
			#http://php.net/manual/en/control-structures.foreach.php
13668
			$checkMultiFileExist=fileAccess::checkMultiFileExist($conf["fileAccess::checkMultiFileExist"]);
13669
			unset($conf["fileAccess::checkMultiFileExist"]);
13670
 
13671
			#如果檢查失敗
13672
			if($checkMultiFileExist["status"]=="false"){
13673
 
13674
				#設置錯誤識別
13675
				$result["status"]="false";
13676
 
13677
				#設置錯誤訊息
13678
				$result["error"]=$checkMultiFileExist;
13679
 
13680
				#回傳結果
13681
				return $result;
13682
 
13683
				}#if end
13684
 
13685
			#如果指定的上傳檔案名稱已經存在
13686
			if($checkMultiFileExist["varExist"][0]=="true"){
13687
 
13688
				#移除舊的同名檔案
13689
				#函式說明:
13690
				#移除檔案
13691
				#回傳結果:
13692
				#$result["status"],"true"代表移除成功,"false"代表移除失敗.
13693
				#$result["error"],錯誤訊息陣列
13694
				#$result["warning"],警告訊息陣列
13695
				#$result["function"],當前執行的函數名稱
13696
				#必填參數:
13697
				$conf["form::delFile"]["fileAddress"]=$uploadDir."/".$ServerFilename.$FileExtension;#要移除檔案的位置
13698
				#可省略參數:
13699
				#$conf["commentsArray"],字串陣列,提示的文字描述,$conf["commentsArray"][$i]代表第($+1)行的描述.
13700
				#$conf["commentsArray"]=array("");
13701
				$delFile=fileAccess::delFile($conf["form::delFile"]);
13702
				unset($conf["form::delFile"]);
13703
 
13704
				#如果移除檔案失敗
13705
				if($delFile["status"]=="false"){
13706
 
13707
					#設置錯誤識別
13708
					$result["status"]="false";
13709
 
13710
					#設置錯誤訊息
13711
					$result["error"]=$delFile;
13712
 
13713
					#回傳結果
13714
					return $result;
13715
 
13716
					}#if end
13717
 
13718
				}#if end
13719
 
13720
			}#if end
13721
 
13722
		#反之沒有要移除同名的既有檔案
13723
		else{
13724
 
13725
			#檢查是否有同名的檔案
13726
			#檢查加上編號的上傳檔案名稱是否已經存在
13727
			#檢查指定的上傳檔案是否已經存在
13728
			#如果有同名的檔案存在
13729
			#函式說明:檢查多個檔案與資料夾是否存在.
13730
			#回傳的結果:
13731
			#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
13732
			#$result["error"],錯誤訊息陣列.
13733
			#$resutl["function"],當前執行的函式名稱.
13734
			#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.
13735
			#$result["varName"][$i],爲第$i個資料夾或檔案的名稱。
13736
			#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
13737
			#必填參數:
13738
			$conf["fileAccess::checkMultiFileExist"]["fileArray"]=array($uploadDir."/".$ServerFilename.$FileExtension);#要檢查書否存在的檔案有哪些,須爲一維陣列數值。
13739
			$conf["fileAccess::checkMultiFileExist"]["fileArgu"]=$conf["fileArgu"];
13740
			#參考資料來源:
13741
			#http://php.net/manual/en/function.file-exists.php
13742
			#http://php.net/manual/en/control-structures.foreach.php
13743
			$checkMultiFileExist=fileAccess::checkMultiFileExist($conf["fileAccess::checkMultiFileExist"]);
13744
			unset($conf["fileAccess::checkMultiFileExist"]);
13745
 
13746
			#如果檢查失敗
13747
			if($checkMultiFileExist["status"]=="false"){
13748
 
13749
				#設置錯誤識別
13750
				$result["status"]="false";
13751
 
13752
				#設置錯誤訊息
13753
				$result["error"]=$checkMultiFileExist;
13754
 
13755
				#回傳結果
13756
				return $result;
13757
 
13758
				}#if end
13759
 
13760
			#如果指定的上傳檔案名稱存在
13761
			if($checkMultiFileExist["varExist"][0]=="true"){
13762
 
13763
				#無窮迴圈
13764
				for($i=1;$i>0;$i++){
13765
 
13766
					#將上傳檔案的名稱加上編號
13767
					$ServerFilename=$ServerFilename."(".$i.")";
13768
 
13769
					#檢查加上編號的上傳檔案名稱是否已經存在
13770
					#檢查指定的上傳檔案是否已經存在
13771
					#如果有同名的檔案存在
13772
					#函式說明:檢查多個檔案與資料夾是否存在.
13773
					#回傳的結果:
13774
					#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
13775
					#$result["error"],錯誤訊息陣列.
13776
					#$resutl["function"],當前執行的函式名稱.
13777
					#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.
13778
					#$result["varName"][$i],爲第$i個資料夾或檔案的名稱。
13779
					#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
13780
					#必填參數:
13781
					$conf["fileAccess::checkMultiFileExist"]["fileArray"]=array($uploadDir."/".$ServerFilename.$FileExtension);#要檢查書否存在的檔案有哪些,須爲一維陣列數值。
13782
					$conf["fileAccess::checkMultiFileExist"]["fileArgu"]=$conf["fileArgu"];
13783
					#參考資料來源:
13784
					#http://php.net/manual/en/function.file-exists.php
13785
					#http://php.net/manual/en/control-structures.foreach.php
13786
					$checkMultiFileExist=fileAccess::checkMultiFileExist($conf["fileAccess::checkMultiFileExist"]);
13787
					unset($conf["fileAccess::checkMultiFileExist"]);
13788
 
13789
					#如果檢查失敗
13790
					if($checkMultiFileExist["status"]=="false"){
13791
 
13792
						#設置錯誤識別
13793
						$result["status"]="false";
13794
 
13795
						#設置錯誤訊息
13796
						$result["error"]=$checkMultiFileExist;
13797
 
13798
						#回傳結果
13799
						return $result;
13800
 
13801
						}#if end
13802
 
13803
					#如果指定的上傳檔案名稱不存在
13804
					if($checkMultiFileExist["varExist"][0]=="false"){
13805
 
13806
						#跳出迴圈
13807
						break;
13808
 
13809
						}#if end
13810
 
13811
					}#for end
13812
 
13813
				}#if end
13814
 
13815
			}#else end
13816
 
13817
		#移動暫存檔案到指定的位置
13818
		if(move_uploaded_file($_FILES[$conf["formFileName"]]["tmp_name"],$uploadDir."/".$ServerFilename.$FileExtension)){
13819
 
13820
			#函式說明:
13821
			#呼叫shell執行系統命令,並取得回傳的內容.
13822
			#回傳結果:
13823
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
13824
			#$result["error"],錯誤訊息陣列.
13825
			#$result["function"],當前執行的函數名稱.
13826
			#$result["argu"],使用的參數.
13827
			#$result["cmd"],執行的指令內容.
13828
			#$result["fullCmd"],如果參數 $conf["inBackGround"] 為 "true" 則會回傳該值.
13829
			#$result["output"],爲執行完二元碼後的輸出陣列,若 $conf["inBackGround"] 為 "true",則為當下的輸出.
13830
			#$result["tmpFileOutput"],儲存輸出的暫存檔案名稱,若 $conf["inBackGround"] 為 "true" 則會回傳該值.
13831
			#$result["running"],是否還在執行.
13832
			#$result["pid"],pid.
13833
			#$result["statusCode"],執行結束後的代碼.
13834
			#$result["escape"],陣列,儲存出新排序過且已經escape過的指令(key為"cmd")與參數(key為"argu").
13835
			#必填參數:
13836
			#$conf["command"],字串,要執行的指令.
13837
			$conf["external::callShell"]["command"]="chmod";
13838
			#$conf["fileArgu"],字串,變數__FILE__的內容.
13839
			$conf["external::callShell"]["fileArgu"]=__FILE__;
13840
			#可省略參數:
13841
			#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
13842
			$conf["external::callShell"]["argu"]=array("0770",$uploadDir);
13843
			#$conf["arguIsAddr"],陣列字串,指令搭配的哪些參數為路徑,為路徑的參數會進行轉換以便符合呼叫當前函數的位置,預設不指定,若有3個參數,其中第3個參數為路徑,則表示為array("false","false","true").
13844
			#$conf["arguIsAddr"]=array();
13845
			#$conf["pre"],陣列,要在本指令前執行的每個指令與參數.
13846
			#$conf["pre"][$i]["cmd"],字串,要在本指令前執行的第$i+1個指令.
13847
			#$conf["pre"][$i]["param"],陣列字串,要在本指令前執行的第$i+1個指令的參數.
13848
			#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
13849
			#$conf["enablePrintDescription"]="true";
13850
			#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容加上使用的$conf["argu"]參數.
13851
			#$conf["printDescription"]="";
13852
			#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"false".如果參數為"< 、<< 、> 、>> 、| 、2>&1"之一則不會過濾.
13853
			$conf["external::callShell"]["escapeshellarg"]="true";
13854
			#$conf["thereIsShellVar"],陣列字串,指令搭配的參數"argu",若含有「\'」,則取代為「"」.每個argu參數都要有對應的元素."true"代表要置換.
13855
			#$conf["thereIsShellVar"]=array();
13856
			#$conf["username"],字串,要用什麼使用者來執行,預設為執行php的使用者,該參數不適用於apache環境.
13857
			#$conf["username"]="";
13858
			#$conf["password"],字串,root的使用者密碼,預設不使用密碼,該參數不適用於apache環境.
13859
			#$conf["password"]="";
13860
			#$conf["useScript"],字串,是否要啟用Linux的script指令來記錄輸出,"true"代表要,Fedora的selinux會擋住該操作;"false"代表不要,預設為"false".
13861
			#$conf["useScript"]="";
13862
			#$conf["logFilePath"],字串,當 $conf["useScript"] 為 "true" 時,輸出的內容要暫存到哪裡,預設為 "/tmp/.qbpwcf_tmp/external/callShell/".
13863
			#$conf["logFilePath"]=".qbpwcf_tmp/external/callShell/";
13864
			#$conf["inBackGround"],字串,是否要在背景執行,且不會等待程式執行結束再執行下一個指令,"true"代表是,"false"代表不要,預設為"false",如果$conf["command"]有用「;」區隔的多個指令將會出錯.
13865
			#$conf["inBackGround"]="";
13866
			#$conf["getErr"],字串,"true"代表將錯誤輸出變成標準輸出,反之"false"為不變動.
13867
			#$conf["getErr"]="false";
13868
			#$conf["doNotRun"],字串,"true"代表不執行指令,預設為"false"會執行指令.
13869
			#$conf["doNotRun"]="false";
13870
			#參考資料:
13871
			#exec=>http://php.net/manual/en/function.exec.php
13872
			#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
13873
			#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
13874
			#備註:
13875
			#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.
13876
			#若使用的 command、argu 參數,含有 ~ 則會被視為字串,若有需要其於 shell 中代表的家目錄位置,可用 fileAccess::tildeToPath 來進行轉換.
13877
			$changePermission=external::callShell($conf["external::callShell"]);
13878
			unset($conf["external::callShell"]);
13879
 
13880
			#如果 $changePermission["status"] 等於 "false"
13881
			if($changePermission["status"]=="false"){
13882
 
13883
				#設置錯誤識別
13884
				$result["status"]="false";
13885
 
13886
				#設置錯誤訊息
13887
				$result["error"]=$changePermission;
13888
 
13889
				#回傳結果
13890
				return $result;
13891
 
13892
				}#if end
13893
 
13894
			#函式說明:
13895
			#呼叫shell執行系統命令,並取得回傳的內容.
13896
			#回傳結果:
13897
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
13898
			#$result["error"],錯誤訊息陣列.
13899
			#$result["function"],當前執行的函數名稱.
13900
			#$result["argu"],使用的參數.
13901
			#$result["cmd"],執行的指令內容.
13902
			#$result["fullCmd"],如果參數 $conf["inBackGround"] 為 "true" 則會回傳該值.
13903
			#$result["output"],爲執行完二元碼後的輸出陣列,若 $conf["inBackGround"] 為 "true",則為當下的輸出.
13904
			#$result["tmpFileOutput"],儲存輸出的暫存檔案名稱,若 $conf["inBackGround"] 為 "true" 則會回傳該值.
13905
			#$result["running"],是否還在執行.
13906
			#$result["pid"],pid.
13907
			#$result["statusCode"],執行結束後的代碼.
13908
			#$result["escape"],陣列,儲存出新排序過且已經escape過的指令(key為"cmd")與參數(key為"argu").
13909
			#必填參數:
13910
			#$conf["command"],字串,要執行的指令.
13911
			$conf["external"]["callShell"]["command"]="chmod";
13912
			#$conf["fileArgu"],字串,變數__FILE__的內容.
13913
			$conf["external"]["callShell"]["fileArgu"]=__FILE__;
13914
			#可省略參數:
13915
			#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
13916
			$conf["external"]["callShell"]["argu"]=array("0777",$uploadDir."/".$ServerFilename.$FileExtension);
13917
			#$conf["arguIsAddr"],陣列字串,指令搭配的哪些參數為路徑,為路徑的參數會進行轉換以便符合呼叫當前函數的位置,預設不指定,若有3個參數,其中第3個參數為路徑,則表示為array("false","false","true").
13918
			#$conf["arguIsAddr"]=array();
13919
			#$conf["pre"],陣列,要在本指令前執行的每個指令與參數.
13920
			#$conf["pre"][$i]["cmd"],字串,要在本指令前執行的第$i+1個指令.
13921
			#$conf["pre"][$i]["param"],陣列字串,要在本指令前執行的第$i+1個指令的參數.
13922
			#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
13923
			#$conf["enablePrintDescription"]="true";
13924
			#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容加上使用的$conf["argu"]參數.
13925
			#$conf["printDescription"]="";
13926
			#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"false".如果參數為"< 、<< 、> 、>> 、| 、2>&1"之一則不會過濾.
13927
			$conf["external"]["callShell"]["escapeshellarg"]="true";
13928
			#$conf["thereIsShellVar"],陣列字串,指令搭配的參數"argu",若含有「\'」,則取代為「"」.每個argu參數都要有對應的元素."true"代表要置換.
13929
			#$conf["thereIsShellVar"]=array();
13930
			#$conf["username"],字串,要用什麼使用者來執行,預設為執行php的使用者,該參數不適用於apache環境.
13931
			#$conf["username"]="";
13932
			#$conf["password"],字串,root的使用者密碼,預設不使用密碼,該參數不適用於apache環境.
13933
			#$conf["password"]="";
13934
			#$conf["useScript"],字串,是否要啟用Linux的script指令來記錄輸出,"true"代表要,Fedora的selinux會擋住該操作;"false"代表不要,預設為"false".
13935
			#$conf["useScript"]="";
13936
			#$conf["logFilePath"],字串,當 $conf["useScript"] 為 "true" 時,輸出的內容要暫存到哪裡,預設為 "/tmp/.qbpwcf_tmp/external/callShell/".
13937
			#$conf["logFilePath"]=".qbpwcf_tmp/external/callShell/";
13938
			#$conf["inBackGround"],字串,是否要在背景執行,且不會等待程式執行結束再執行下一個指令,"true"代表是,"false"代表不要,預設為"false",如果$conf["command"]有用「;」區隔的多個指令將會出錯.
13939
			#$conf["inBackGround"]="";
13940
			#$conf["getErr"],字串,"true"代表將錯誤輸出變成標準輸出,反之"false"為不變動.
13941
			#$conf["getErr"]="false";
13942
			#$conf["doNotRun"],字串,"true"代表不執行指令,預設為"false"會執行指令.
13943
			#$conf["doNotRun"]="false";
13944
			#參考資料:
13945
			#exec=>http://php.net/manual/en/function.exec.php
13946
			#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
13947
			#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
13948
			#備註:
13949
			#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.
13950
			#若使用的 command、argu 參數,含有 ~ 則會被視為字串,若有需要其於 shell 中代表的家目錄位置,可用 fileAccess::tildeToPath 來進行轉換.
13951
			$changePermission=external::callShell($conf["external"]["callShell"]);
13952
			unset($conf["external"]["callShell"]);
13953
 
13954
			#如果 $changePermission["status"] 等於 "false"
13955
			if($changePermission["status"]=="false"){
13956
 
13957
				#設置錯誤識別
13958
				$result["status"]="false";
13959
 
13960
				#設置錯誤訊息
13961
				$result["error"]=$changePermission;
13962
 
13963
				#回傳結果
13964
				return $result;
13965
 
13966
				}#if end
13967
 
13968
			}#if end
13969
 
13970
		#反之檔案移動失敗
13971
		else{
13972
 
13973
			#設置錯誤識別
13974
			$result["status"]="false";
13975
 
13976
			#設置移動檔案失敗的訊息
13977
			$result["error"][]="移動檔案失敗";
13978
 
13979
			#回傳錯誤訊息
13980
			return $result;
13981
 
13982
			}#else end
13983
 
13984
		#將指定的檔案名稱與偵測到的副檔名合併在一塊
13985
		$storeFileName=$ServerFilename.$FileExtension;
13986
 
13987
		#如果有要將新檔案的相對位置用修改既有資料的方式寫入到資料表裏面
13988
		#如果 $dbProcess 等於 "true"
13989
		if($conf["dbProcess"]=="true"){
13990
 
13991
			#將新檔案的相對位置用修改既有資料的方式寫入到資料表裏面
13992
			#函式說明:
13993
			#更新資料表裏面的資料
13994
			#回傳的結果:
13995
			#$result["status"],爲查詢是否成功,若爲0則成功,若爲1則表示失敗了
13996
			#$result["error"],錯誤訊息
13997
			#$result["sql"],執行的sql語法.
13998
			#必填參數:
13999
			$conf["db"]["updateDataTableContent"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
14000
			$conf["db"]["updateDataTableContent"]["dbAccount"]=$conf["$dbAccount"];#爲用於連入mysql-Server時要使用的帳號
14001
			$conf["db"]["updateDataTableContent"]["selectedDataBaseName"]=$conf["dbName"];#要選取的資料庫名稱
14002
			$conf["db"]["updateDataTableContent"]["tableName"]=$conf["updatingDataTableName"];#要修改的資料表名稱
14003
			$conf["db"]["updateDataTableContent"]["whereColumn"]=$conf["updatingConditionDataTableColumnName"];#爲用來判斷要更新的哪筆資料的欄位名稱,須爲陣列值
14004
			$conf["db"]["updateDataTableContent"]["whereValue"]=$conf["updatingConditionDataTableColumnValue"];#為用來判斷是要更新哪筆資料的欄位對應數值,須爲陣列值
14005
			$conf["db"]["updateDataTableContent"]["tableColumnName"]=$conf["updatingTargetDataTableColumnName"];#資料表項目的名稱陣列
14006
			$conf["db"]["updateDataTableContent"]["updateDataValue"]=$conf["updatingTargetDataTableColumnValue"];#要更改成對應資料表項目的內容,須為陣列值
14007
 
14008
			#如果 $conf["db"]["updateDataTableContent"]["updateDataValue"] 裏面其中一個元素爲 "filePosition" ,則會替換成檔案的新位置。
14009
			for($i=0;$i<count($conf["updatingTargetDataTableColumnValue"]);$i++){
14010
 
14011
				#如果其中一項元素內容爲 "filePosition"
14012
				if($conf["db"]["updateDataTableContent"]["updateDataValue"][$i]=="filePosition"){
14013
 
14014
					#將其更改爲新檔案的位置
14015
					$conf["db"]["updateDataTableContent"]["updateDataValue"][$i]=$uploadDir."/".$storeFileName;
14016
 
14017
					}#if end
14018
 
14019
				}#for end
14020
 
14021
			#可省略參數:
14022
 
14023
			#如果 $conf["dbPassword"] 有設置
14024
			if(isset($conf["dbPassword"])){
14025
 
14026
				$conf["db"]["updateDataTableContent"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
14027
 
14028
				}#if end
14029
 
14030
			$db["updateDataTableContent"]=db::updateDataTableContent($conf["db"]["updateDataTableContent"]);
14031
			unset($conf["db"]["updateDataTableContent"]);
14032
 
14033
			#如果 $db["updateDataTableContent"]["status"] 等於 "false"
14034
			if($db["updateDataTableContent"]["status"]=="false"){
14035
 
14036
				#設置錯誤識別
14037
				$result["status"]="false";
14038
 
14039
				#設置錯誤訊息
14040
				$result["error"]=$db["updateDataTableContent"];
14041
 
14042
				#回傳結果
14043
				return $result;
14044
 
14045
				}#if end
14046
 
14047
			#取得執行的sql語法
14048
			$result["sql"]=$db["updateDataTableContent"]["sql"];
14049
 
14050
			}#if end
14051
 
14052
		#將各項結果存進 $result 陣列變數裏面
14053
		$result["ServerFileName"]=$storeFileName;#檔案名稱
14054
		$result["ServerFileType"]=$FileType;#檔案類型
14055
		$result["ServerFileSize"]=$storeFileSizeKb;#檔案大小
14056
		$result["fileRelativePosition"]=$uploadDir."/".$storeFileName;#檔案的相對位置
14057
		$result["error"]["uploadErrorCode"]=$FileError;#上傳的錯誤訊息
14058
 
14059
		#根據錯誤編號
14060
		switch($result["error"]["uploadErrorCode"]){
14061
 
14062
			#如果編號等於0
14063
			case 0:
14064
 
14065
				#代表沒有錯誤
14066
 
14067
				#卸除錯誤識別編號
14068
				unset($result["error"]);
14069
 
14070
				#設置錯誤識別
14071
				$result["status"]="true";
14072
 
14073
				#回傳結果
14074
				return $result;
14075
 
14076
				#跳出switch
14077
				break;
14078
 
14079
			#如果編號等於1
14080
			case 1:
14081
 
14082
				#設置錯誤訊息
14083
				$result["error"][]="檔案大小超出 php.ini 設定檔中的 upload_max_filesize";
14084
 
14085
				#設置錯誤識別
14086
				$result["status"]="false";
14087
 
14088
				#回傳結果
14089
				return $result;
14090
 
14091
				#跳出switch
14092
				break;
14093
 
14094
			#如果編號等於2
14095
			case 2:
14096
 
14097
				#設置錯誤訊息
14098
				$result["error"][]="檔案大小超出網頁所限定的 MAX_FILE_SIZE 大小";
14099
 
14100
				#設置錯誤識別
14101
				$result["status"]="false";
14102
 
14103
				#回傳結果
14104
				return $result;
14105
 
14106
				#跳出switch
14107
				break;
14108
 
14109
			#如果編號等於3
14110
			case 3:
14111
 
14112
				#設置錯誤訊息
14113
				$result["error"][]="檔案僅上傳成功部份";
14114
 
14115
				#設置錯誤識別
14116
				$result["status"]="false";
14117
 
14118
				#回傳結果
14119
				return $result;
14120
 
14121
				#跳出switch
14122
				break;
14123
 
14124
			#如果編號等於4
14125
			case 4:
14126
 
14127
				#設置錯誤訊息
14128
				$result["error"][]="沒有上傳的檔案";
14129
 
14130
				#設置錯誤識別
14131
				$result["status"]="false";
14132
 
14133
				#回傳結果
14134
				return $result;
14135
 
14136
				#跳出switch
14137
				break;
14138
 
14139
			#如果編號等於6
14140
			case 6:
14141
 
14142
				#設置錯誤訊息
14143
				$result["error"][]="暫存資料夾遺失";
14144
 
14145
				#設置錯誤識別
14146
				$result["status"]="false";
14147
 
14148
				#回傳結果
14149
				return $result;
14150
 
14151
				#跳出switch
14152
				break;
14153
 
14154
			#如果編號等於7
14155
			case 7:
14156
 
14157
				#設置錯誤訊息
14158
				$result["error"][]="檔案寫入硬碟失敗";
14159
 
14160
				#設置錯誤識別
14161
				$result["status"]="false";
14162
 
14163
				#回傳結果
14164
				return $result;
14165
 
14166
				#跳出switch
14167
				break;
14168
 
14169
			#如果編號等於8
14170
			case 8:
14171
 
14172
				#設置錯誤訊息
14173
				$result["error"][]="某些擴充套件導致檔案上傳功能不能使用,可用phpinfo()來檢查";
14174
 
14175
				#設置錯誤識別
14176
				$result["status"]="false";
14177
 
14178
				#回傳結果
14179
				return $result;
14180
 
14181
				#跳出switch
14182
				break;
14183
 
14184
			}#switch end
14185
 
14186
		#執行到這邊代表執行正常
14187
 
14188
		#將其處理結果設為 "true"
14189
		$result["status"]="true";
14190
 
14191
		#回傳結果
14192
		return $result;
14193
 
14194
		}#function processUploadedFile end
14195
 
14196
	/*
14197
	#函式說明:
14198
	#處理多個上傳到暫存目錄的檔案,可以移動到指定的位置,並指定檔案的名稱。並且可以指定刪除舊有的檔案,然後將新檔案的相對位置寫入到資料庫裏面。
14199
	#回傳的變數:
14200
	#$result["ServerFileName"][$i]#第$i-1個檔案的名稱.
14201
	#$result["ServerFileType"][$i]#第$i-1個檔案的類型.
14202
	#$result["ServerFileSize"][$i]#第$i-1個檔案的大小.
14203
	#$result["status"]#整體上傳有無成功,"true"代表完整成功,"false"代表有過程有錯誤.
14204
	#$result["error"],錯誤訊息陣列.
14205
	#$result["fileRelativePosition"][$i]#第$i-1個檔案的相對位置,包含檔案名稱與附檔名。
14206
	#必填參數:
14207
	#$conf["formFileName"],為上傳檔案時表單傳送時的名稱陣列.
14208
	$conf["formFileName"]=array();
14209
	#可省略參數:
14210
	#$conf["uploadDirUserDefine"],字串陣列,為存放上傳檔案的目錄,如果沒設定則會自行建立依照系統時間的年月日十分秒來替資料夾命名,並將上傳的檔案存在裏面。
14211
	#$conf["uploadDirUserDefine"]=array("");
14212
	#$conf["ServerFilenameUserDefine"],字串陣列,為存放在伺服器上的檔案名稱,如果沒設定則依照台灣時間的年月日時分秒命名
14213
	#$conf["ServerFilenameUserDefine"]=array("");
14214
	#$conf["NoFileExtension"],字串陣列,若為 "true" 則表 指定了檔案名稱後,不用再加上檔案型的副檔名,預設皆為為"false".
14215
	#$conf["NoFileExtension"]=array("true");
14216
	#$conf["limitPage"],字串陣列,限制只能從哪些網頁檔案過來。
14217
	#$conf["limitPage"]=array("");
14218
	#$conf["taskName"],字串,爲該上傳作業的名稱,若沒設定,則預設爲"上傳作業"。
14219
	#$conf["taskName"]="";
14220
	#$conf["eraseOldFile"],字串陣列,如果為"true"的話會移除同名的舊檔案,其值爲檔案的相對位置,預設為"false",不移除同名的檔案,並透過編號保留新的檔案.
14221
	#$conf["eraseOldFile"]=array("");
14222
	#$conf["dbProcess"],字串,如果爲"true",則會進行資料表資料更新的動作,亦即要設定 $conf["updatingMysqlServerAddress"] $conf["updatingMysqlAccount"] $conf["updatingDataBaseName"] $conf["updatingDataTableName"] $conf["updatingConditionDataTableColumnName"] $conf["updatingConditionDataTableColumnValue"] $conf["updatingTargetDataTableColumnName"] $conf["updatingTargetDataTableColumnValue"] 的內容,預設為"false".
14223
	#$conf["dbProcess"]="true";
14224
	#$conf["updatingMysqlServerAddress"],字串,資料庫位於網路上的哪個位置.
14225
	#$conf["updatingMysqlServerAddress"]=$dbAddress;
14226
	#$conf["updatingMysqlAccount"],字串,連線時要使用的帳號,省略時代表不用密碼進行連線.
14227
	#$conf["updatingMysqlAccount"]=$dbAccount;
14228
	#$conf["updatingMysqlPassword"],字串,連線時要使用的密碼.
14229
	#$conf["updatingMysqlPassword"]=$dbPassword;
14230
	#$conf["updatingDataBaseName"],字串,要更新的目標資料所屬資料庫名稱.
14231
	#$conf["updatingDataBaseName"]=$dbName;
14232
	#$conf["updatingDataTableName"],字串,要更新的目標資料位於哪個資料表.
14233
	#$conf["updatingDataTableName"]="";
14234
	#$conf["updatingConditionDataTableColumnName"],字串陣列,要用哪些欄位來識別要更新哪一筆資料,預設為array("id").
14235
	#$conf["updatingConditionDataTableColumnName"]=array("id");
14236
	#$conf["updatingConditionDataTableColumnValue"],字串陣列,該條件欄位內容的數值要爲多少,才是我們要修改的那筆資料。
14237
	#$conf["updatingConditionDataTableColumnValue"]=array("");
14238
	#$conf["updatingTargetDataTableColumnName"],字串陣列,要更新的資料欄位有?
14239
	#$conf["updatingTargetDataTableColumnName"]=array("");
14240
	#$conf["updatingTargetDataTableColumnValue"],字串陣列,目標資料欄位要改成什麼樣的數值,如果其元素含有"filePosition",則會替換成新檔案的相對位置
14241
	#$conf["updatingTargetDataTableColumnValue"]=array("");
14242
	#參考資料:
14243
	#file_exist()的用法
14244
	#http://php.net/manual/en/function.file-exists.php
14245
	#備註:
14246
	#無.
14247
	*/
14248
	public static function processMultiUploadedFile($conf){
14249
 
14250
		#初始化要回傳的內容
14251
		$result=array();
14252
 
14253
		#設置當前執行的函數
14254
		$result["function"]=__FUNCTION__;
14255
 
14256
		#如果 $conf 不為陣列
14257
		if(gettype($conf)!="array"){
14258
 
14259
			#設置執行失敗
14260
			$result["status"]="false";
14261
 
14262
			#設置執行錯誤訊息
14263
			$result["error"][]="\$conf變數須為陣列形態";
14264
 
14265
			#如果傳入的參數為 null
14266
			if($conf==null){
14267
 
14268
				#設置執行錯誤訊息
14269
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
14270
 
14271
				}#if end
14272
 
14273
			#回傳結果
14274
			return $result;
14275
 
14276
			}#if end
14277
 
14278
		#檢查參數
14279
		#函式說明:
14280
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
14281
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
14282
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
14283
		#$result["function"],當前執行的函式名稱.
14284
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
14285
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
14286
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
14287
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
14288
		#必填參數:
14289
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
14290
		$conf["variableCheck.checkArguments"]["varInput"]=&$conf;
14291
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
14292
		$conf["variableCheck.checkArguments"]["mustBeFilledVariableName"]=array("formFileName");
14293
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double");
14294
		$conf["variableCheck.checkArguments"]["mustBeFilledVariableType"]=array("array");
14295
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
14296
		$conf["variableCheck.checkArguments"]["referenceVarKey"]="variableCheck.checkArguments";
14297
		#可省略參數:
14298
		#$conf["variableCheck.checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"false"。
14299
		#$conf["variableCheck.checkArguments"]["canBeEmptyString"]="false";
14300
		#$conf["variableCheck.checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
14301
		$conf["variableCheck.checkArguments"]["skipableVariableName"]=array("uploadDirUserDefine","ServerFilenameUserDefine","NoFileExtension","limitPage","taskName","eraseOldFile","dbProcess","updatingMysqlServerAddress","updatingMysqlAccount","updatingMysqlPassword","updatingDataBaseName","updatingDataTableName","updatingConditionDataTableColumnName","updatingConditionDataTableColumnValue","updatingTargetDataTableColumnName","updatingTargetDataTableColumnValue");
14302
		#$conf["variableCheck.checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
14303
		$conf["variableCheck.checkArguments"]["skipableVariableType"]=array("array","array","array","array","string","array","array","string","string","string","string","string","array","array","array","array");
14304
		#$conf["variableCheck.checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,"null"代表不指定.
14305
		$conf["variableCheck.checkArguments"]["skipableVarDefaultValue"]=array(null,null,null,null,"上傳作業",null,"false",null,null,null,null,null,array("id"),null,null,null);
14306
		#$conf["variableCheck.checkArguments"]["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
14307
		$conf["variableCheck.checkArguments"]["arrayCountEqualCheck"][]=array("uploadDirUserDefine","ServerFilenameUserDefine","NoFileExtension","eraseOldFile");
14308
		$checkResult=variableCheck::checkArguments($conf["variableCheck.checkArguments"]);
14309
		unset($conf["variableCheck.checkArguments"]);
14310
 
14311
		#如果檢查失敗
14312
		if($checkResult["status"]=="false"){
14313
 
14314
			#設置執行不正常
14315
			$result["status"]="false";
14316
 
14317
			#設置錯誤訊息
14318
			$result["error"]=$checkResult;
14319
 
14320
			#回傳結果
14321
			return $result;
14322
 
14323
			}#if end
14324
 
14325
		#如果檢查不通過
14326
		if($checkResult["passed"]=="false"){
14327
 
14328
			#設置執行不正常
14329
			$result["status"]="false";
14330
 
14331
			#設置錯誤訊息
14332
			$result["error"]=$checkResult;
14333
 
14334
			#回傳結果
14335
			return $result;
14336
 
14337
			}#if end
14338
 
14339
		#如果 count($conf["formFileName"]) 為 0
14340
		if(count($conf["formFileName"])==0){
14341
 
14342
			#設置執行失敗
14343
			$result["status"]="false";
14344
 
14345
			#設置執行錯誤
14346
			$result["error"][]="陣列變數 \"formFileName\" 裡面必須要有元素";
14347
 
14348
			#回傳結果
14349
			return $result;
14350
 
14351
			}#if end
14352
 
14353
		#有幾個要接收的檔案就執行幾次
14354
		for($i=0;$i<count($conf["formFileName"]);$i++){
14355
 
14356
			#如果 $conf["formFileName"][$i] 不存在
14357
			if(!isset($conf["formFileName"][$i])){
14358
 
14359
				#設置執行不正常
14360
				$result["status"]="false";
14361
 
14362
				#設置錯誤訊息
14363
				$result["error"][]="表單檔案變數名稱有缺";
14364
 
14365
				#回傳結果
14366
				return $result;
14367
 
14368
				}#if end
14369
 
14370
			#函式說明:
14371
			#處理上傳到暫存目錄的檔案,可以移動到指定的位置,並指定檔案的名稱。並且可以指定刪除舊有的檔案,然後將新檔案的相對位置寫入到資料庫裏面。
14372
			#回傳的變數:
14373
			#$result["status"],整體上傳有無成功。"true"代表完整成功 "false"代表有過程有錯誤
14374
			#$result["error"],錯誤訊息陣列,$result["error"][0] 為"沒有接收到上傳的檔案",則代表沒有上傳檔案.
14375
			#$result["warning"],警告訊息陣列
14376
			#$result["ServerFileName"],檔案名稱
14377
			#$result["ServerFileType"],檔案類型
14378
			#$result["ServerFileSize"],檔案大小
14379
			#$result["fileRelativePosition"],檔案的相對位置,包含檔案名稱與附檔名。
14380
			#必填參數:
14381
			#$conf["form::processUploadedFile"]["formFileName"],字串,為上傳檔案時表單傳送時的名稱
14382
			$conf["form::processUploadedFile"]["formFileName"]=$conf["formFileName"][$i];
14383
			#可省略參數:
14384
 
14385
			#如果 $conf["uploadDirUserDefine"] 存在
14386
			if(isset($conf["uploadDirUserDefine"])){
14387
 
14388
				#如果 $conf["uploadDirUserDefine"][$i] 有設置
14389
				if(isset($conf["uploadDirUserDefine"][$i])){
14390
 
14391
					#$conf["form::processUploadedFile"]["uploadDirUserDefine"],字串,為存放上傳檔案的目錄,如果沒設定則會自行建立依照系統時間的年月日十分秒來替資料夾命名,並將上傳的檔案存在裏面。
14392
					$conf["form::processUploadedFile"]["uploadDirUserDefine"]=$conf["uploadDirUserDefine"][$i];
14393
 
14394
					}#if end
14395
 
14396
				}#if end
14397
 
14398
			#如果 $conf["ServerFilenameUserDefine"] 有設置
14399
			if(isset($conf["ServerFilenameUserDefine"])){
14400
 
14401
				#如果 $conf["ServerFilenameUserDefine"][$i] 有設置
14402
				if(isset($conf["ServerFilenameUserDefine"][$i])){
14403
 
14404
					#$conf["form::processUploadedFile"]["ServerFilenameUserDefine"],字串,為存放在伺服器上的檔案名稱,如果沒設定則依照台灣時間的年月日時分秒命名
14405
					$conf["form::processUploadedFile"]["ServerFilenameUserDefine"]=$conf["ServerFilenameUserDefine"][$i];
14406
 
14407
					}#if end
14408
 
14409
				}#if end
14410
 
14411
			#如果 $conf["NoFileExtension"] 有設置
14412
			if(isset($conf["NoFileExtension"])){
14413
 
14414
				#如果 $conf["NoFileExtension"][$i] 有設置
14415
				if(isset($conf["NoFileExtension"][$i])){
14416
 
14417
					#$conf["form::processUploadedFile"]["NoFileExtension"],字串,若為 "true" 則表 指定了檔案名稱後,不用再加上檔案型的副檔名,預設為"false".
14418
					$conf["form::processUploadedFile"]["NoFileExtension"]="true";
14419
 
14420
					}#if end
14421
 
14422
				}#if end
14423
 
14424
			#如果 $conf["limitPage"] 有設置
14425
			if(isset($conf["limitPage"])){
14426
 
14427
				#$conf["form::processUploadedFile"]["limitPage"],字串陣列,限制只能從哪些網頁檔案過來。
14428
				$conf["form::processUploadedFile"]["limitPage"]=$conf["limitPage"];
14429
 
14430
				}#if end
14431
 
14432
			#如果 $conf["taskName"] 有設置
14433
			if(isset($conf["taskName"])){
14434
 
14435
				#$conf["form::processUploadedFile"]["taskName"],字串,爲該上傳作業的名稱,若沒設定,則預設爲"上傳作業"。
14436
				$conf["form::processUploadedFile"]["taskName"]=$conf["taskName"];
14437
 
14438
				}#if end
14439
 
14440
			#如果 $conf["eraseOldFile"] 有設置
14441
			if(isset($conf["eraseOldFile"])){
14442
 
14443
				#如果 $conf["eraseOldFile"][$i] 有設置
14444
				if(isset($conf["eraseOldFile"][$i])){
14445
 
14446
					#$conf["form::processUploadedFile"]["eraseOldFile"],字串,如果為"true"的話會移除同名的舊檔案,其值爲檔案的相對位置,預設為"false",不移除同名的檔案,並透過編號保留新的檔案.
14447
					$conf["form::processUploadedFile"]["eraseOldFile"]=$conf["eraseOldFile"][$i];
14448
 
14449
					}#if end
14450
 
14451
				}#if end
14452
 
14453
			#$conf["form::processUploadedFile"]["dbProcess"],字串,如果爲"true",則會進行資料表資料更新的動作,亦即要設定 $conf["updatingMysqlServerAddress"] $conf["updatingMysqlAccount"] $conf["updatingDataBaseName"] $conf["updatingDataTableName"] $conf["updatingConditionDataTableColumnName"] $conf["updatingConditionDataTableColumnValue"] $conf["updatingTargetDataTableColumnName"] $conf["updatingTargetDataTableColumnValue"] 的內容,預設為"false".
14454
			$conf["form::processUploadedFile"]["dbProcess"]=$conf["dbProcess"];
14455
 
14456
			#如果 $conf["updatingMysqlServerAddress"] 有設定
14457
			if(isset($conf["updatingMysqlServerAddress"])){
14458
 
14459
				#$conf["form::processUploadedFile"]["updatingMysqlServerAddress"],字串,資料庫位於網路上的哪個位置.
14460
				$conf["form::processUploadedFile"]["updatingMysqlServerAddress"]=$conf["updatingMysqlServerAddress"];
14461
 
14462
				}#if end
14463
 
14464
			#如果 $conf["updatingMysqlAccount"] 有設定
14465
			if(isset($conf["updatingMysqlAccount"])){
14466
 
14467
				#$conf["form::processUploadedFile"]["updatingMysqlAccount"],字串,連線時要使用的帳號,省略時代表不用密碼進行連線.
14468
				$conf["form::processUploadedFile"]["updatingMysqlAccount"]=$conf["updatingMysqlAccount"];
14469
 
14470
				}#if end
14471
 
14472
			#如果 $conf["updatingMysqlPassword"] 有設定
14473
			if(isset($conf["updatingMysqlPassword"])){
14474
 
14475
				#$conf["form::processUploadedFile"]["updatingMysqlPassword"],字串,連線時要使用的密碼.
14476
				$conf["form::processUploadedFile"]["updatingMysqlPassword"]=$conf["updatingMysqlPassword"];
14477
 
14478
				}#if end
14479
 
14480
			#如果 $conf["updatingDataBaseName"] 有設置
14481
			if(isset($conf["updatingDataBaseName"])){
14482
 
14483
				#$conf["form::processUploadedFile"]["updatingDataBaseName"],字串,要更新的目標資料所屬資料庫名稱.
14484
				$conf["form::processUploadedFile"]["updatingDataBaseName"]=$dbName;
14485
 
14486
				}#if end
14487
 
14488
			#如果 $conf["updatingDataTableName"] 有設置
14489
			if(isset($conf["updatingDataTableName"])){
14490
 
14491
				#$conf["form::processUploadedFile"]["updatingDataTableName"],字串,要更新的目標資料位於哪個資料表.
14492
				$conf["form::processUploadedFile"]["updatingDataTableName"]=$conf["updatingDataTableName"];
14493
 
14494
				}#if end
14495
 
14496
			#如果 $conf["updatingConditionDataTableColumnName"] 有設置
14497
			if(isset($conf["updatingConditionDataTableColumnName"])){
14498
 
14499
				#$conf["form::processUploadedFile"]["updatingConditionDataTableColumnName"],字串陣列,要用哪些欄位來識別要更新哪一筆資料,預設為array("id").
14500
				$conf["form::processUploadedFile"]["updatingConditionDataTableColumnName"]=$conf["updatingConditionDataTableColumnName"];
14501
 
14502
				}#if end
14503
 
14504
			#如果 $conf["updatingConditionDataTableColumnValue"] 有設置
14505
			if(isset($conf["updatingConditionDataTableColumnValue"])){
14506
 
14507
				#$conf["form::processUploadedFile"]["updatingConditionDataTableColumnValue"],字串陣列,該條件欄位內容的數值要爲多少,才是我們要修改的那筆資料。
14508
				$conf["form::processUploadedFile"]["updatingConditionDataTableColumnValue"]=$conf["updatingConditionDataTableColumnValue"];
14509
 
14510
				}#if end
14511
 
14512
			#如果 $conf["updatingTargetDataTableColumnName"] 有設置
14513
			if(isset($conf["updatingTargetDataTableColumnName"])){
14514
 
14515
				#$conf["form::processUploadedFile"]["updatingTargetDataTableColumnName"],字串陣列,要更新的資料欄位有?
14516
				$conf["form::processUploadedFile"]["updatingTargetDataTableColumnName"]=$conf["updatingTargetDataTableColumnName"];
14517
 
14518
				}#if end
14519
 
14520
			#如果 $conf["updatingTargetDataTableColumnValue"] 有設置
14521
			if(isset($conf["updatingTargetDataTableColumnValue"])){
14522
 
14523
				#$conf["form::processUploadedFile"]["updatingTargetDataTableColumnValue"],字串陣列,目標資料欄位要改成什麼樣的數值,如果其元素含有"filePosition",則會替換成新檔案的相對位置
14524
				$conf["form::processUploadedFile"]["updatingTargetDataTableColumnValue"]=$conf["updatingTargetDataTableColumnValue"];
14525
 
14526
				}#if end
14527
 
14528
			#參考資料:
14529
			#file_exist()的用法
14530
			#http://php.net/manual/en/function.file-exists.php
14531
			$processUploadedFile=form::processUploadedFile($conf["form::processUploadedFile"]);
14532
			unset($conf["form::processUploadedFile"]);
14533
 
14534
			#如果 form::processUploadedFile 執行失敗
14535
			if($processUploadedFile["status"]=="false"){
14536
 
14537
				#設置執行不正常
14538
				$result["status"]="false";
14539
 
14540
				#設置錯誤訊息
14541
				$result["error"]=$processUploadedFile;
14542
 
14543
				#回傳結果
14544
				return $result;
14545
 
14546
				}#if end
14547
 
14548
			#取得回傳的結果
14549
 
14550
			#$result["ServerFileName"][$i],第$i-1個檔案的名稱.
14551
			$result["ServerFileName"][$i]=$processUploadedFile["ServerFileName"];
14552
 
14553
			#$result["ServerFileType"][$i],第$i-1個檔案的類型.
14554
			$result["ServerFileType"][$i]=$processUploadedFile["ServerFileType"];
14555
 
14556
			#$result["ServerFileSize"][$i],第$i-1個檔案的大小.
14557
			$result["ServerFileSize"][$i]=$processUploadedFile["ServerFileSize"];
14558
 
14559
			#$result["fileRelativePosition"][$i],第$i-1個檔案的相對位置,包含檔案名稱與附檔名。
14560
			$result["fileRelativePosition"][$i]=$processUploadedFile["fileRelativePosition"];
14561
 
14562
			}#for end
14563
 
14564
		#設置執行正常
14565
		$result["status"]="true";
14566
 
14567
		#回傳結果
14568
		return $result;
14569
 
14570
		}#function processMultiUploadedFile
14571
 
14572
	/*
14573
	#函式說明:
14574
	#上傳多個檔案
14575
	#回傳結果:
14576
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
14577
	#$result["function"],當前執行的函數.
14578
	#$result["error"],錯誤訊息陣列.
14579
	#$result["content"],上傳檔案的語法.
14580
	#必填參數:
14581
	#$conf["formFileName"],字串陣列,每個要上傳檔案的表單名稱.
14582
	$conf["formFileName"]=array("");
14583
	#可省略參數:
14584
	#$conf["maxFileSize"],字串陣列,各個檔案的最大限制,單位是位元組(byte)。1kb = 1024 byte ; 1mb = 1024 kb 約等與 1024000 byte,預設是10240000(10MB)
14585
	#$conf["maxFileSize"]=array("10240000");
14586
	#$conf["browseButtonClass"],字串陣列,瀏覽檔案的按鈕樣式,預設為"__qbpwcf_inputFileCssStyle".
14587
	#$conf["browseButtonClass"]=array("__inputFileCssStyle");
14588
	#$conf["acceptType"],字串陣列,限定各個檔案的類型為"video/*","audio/*","image/*",預設不限定.
14589
	#$conf["acceptType"]=array("");
14590
	#$conf["required"],字串陣列,各個欄位是否必填,"true"為必填,"false"為可留空,預設為"false".
14591
	#$conf["required"]=array("true");
14592
	#$conf["comment"],字串陣列,各個上傳檔案的註解,預設不顯示.
14593
	#$conf["comment"]=array("");
14594
	#$conf["formStart"],字串,是否為表單的開始,"true"為是,預設為"false".
14595
	#$conf["formStart"]="true";
14596
	#$conf["formName"],字串,表單的名稱
14597
	#$conf["formName"]="";
14598
	#$conf["formAction"],字串,表單的目標,若有設置$conf["formStart"]為"true",則預設為php檔案自己
14599
	#$conf["formAction"]="";
14600
	#$conf["formTarget"],字串,表單要呈現回應的位置,預設為"_self".
14601
	#$conf["formTarget"]="_self";
14602
	#參考資料:
14603
	#無.
14604
	#備註:
14605
	#無.
14606
	*/
14607
	public static function uploadMultiFile(&$conf){
14608
 
14609
		#初始化要回傳的變數
14610
		$result=array();
14611
 
14612
		#設置當前執行的函式
14613
		$result["function"]=__FUNCTION__;
14614
 
14615
		#初始化表單開始的語法
14616
		$result["content"]="";
14617
 
14618
		#如果 $conf 不為陣列
14619
		if(gettype($conf)!="array"){
14620
 
14621
			#設置執行失敗
14622
			$result["status"]="false";
14623
 
14624
			#設置執行錯誤訊息
14625
			$result["error"][]="\$conf變數須為陣列形態";
14626
 
14627
			#如果傳入的參數為 null
14628
			if($conf==null){
14629
 
14630
				#設置執行錯誤訊息
14631
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
14632
 
14633
				}#if end
14634
 
14635
			#回傳結果
14636
			return $result;
14637
 
14638
			}#if end
14639
 
14640
		#檢查參數
14641
		#函式說明:
14642
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
14643
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
14644
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
14645
		#$result["function"],當前執行的函式名稱.
14646
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
14647
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
14648
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
14649
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
14650
		#必填參數:
14651
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
14652
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
14653
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
14654
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("formFileName");
14655
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double");
14656
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("array");
14657
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
14658
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
14659
		#可省略參數:
14660
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
14661
		#$conf["canBeEmptyString"]="false";
14662
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
14663
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("maxFileSize","browseButtonClass","formStart","formAction","formTarget","comment","formName","acceptType","required");
14664
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
14665
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("array","array","string","string","string","array","string","array","array");
14666
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,"null"代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
14667
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,null,"false",null,"_self",null,null,null,null);
14668
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
14669
		#$conf["arrayCountEqualCheck"][]=array();
14670
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
14671
		unset($conf["variableCheck::checkArguments"]);
14672
 
14673
		#如果檢查參數失敗
14674
		if($checkResult["status"]=="false"){
14675
 
14676
			#設置執行失敗
14677
			$result["status"]="false";
14678
 
14679
			#設置執行錯誤
14680
			$result["error"]=$checkResult;
14681
 
14682
			#回傳結果
14683
			return $result;
14684
 
14685
			}#if end
14686
 
14687
		#如果檢查參數不通過
14688
		if($checkResult["passed"]=="false"){
14689
 
14690
			#設置執行失敗
14691
			$result["status"]="false";
14692
 
14693
			#設置執行錯誤
14694
			$result["error"]=$checkResult;
14695
 
14696
			#回傳結果
14697
			return $result;
14698
 
14699
			}#if end
14700
 
14701
		#如果 $conf["formStart"] 跟 $conf["formAction"] 皆有設置
14702
		if(isset($conf["formStart"]) && isset($conf["formAction"])){
14703
 
14704
			#函式說明:
14705
			#表單開始
14706
			#回傳結果:
14707
			#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
14708
			#$result["error"],錯誤訊息陣列.
14709
			#$resutl["function"],當前執行的函式名稱.
14710
			#$result["content"],表單開始的語法.
14711
			#必填參數:
14712
			$conf["form::start"]["action"]=$conf["formAction"];#爲要交給那個檔案處理該表單傳送的內容
14713
			#可省略參數:
14714
			#$conf["legend"]="";#顯示表單的標題
14715
 
14716
			#如果 $conf["formName"] 有設置
14717
			if(isset($conf["formName"])){
14718
 
14719
				$conf["form::start"]["name"]=$conf["formName"];#爲該表單的名稱
14720
 
14721
				}#if end
14722
 
14723
			#$conf["form::start"]["method"]="";#爲傳輸的方法,若沒設定則預設爲post,其他可用的參數爲get。
14724
 
14725
			#如果 $conf["formTarget"] 有設置
14726
			if(isset($conf["formTarget"])){
14727
 
14728
				$conf["form::start"]["target"]=$conf["formTarget"];#為顯示的方式,若沒設定則預設爲"_self",其他可用的參數爲 "_blank"、"_parent"、"_top",也可以是iframe的名稱。
14729
 
14730
				}#if end
14731
 
14732
			#$conf["tableStart"]="true";#爲該表單是否要以<table>開始。"true"爲是,"false"為否,預設為"false".
14733
			#$conf["tableClass"]="";#表格要套用的css樣式,預設爲"__withoutBorder"無框線的預設樣式;若爲"__withBorder"的話,則爲有框線的預設樣式。
14734
			#$conf["showFieldsetBorder"]="false";#是否要顯示表單區域的框線,預設為"false"不顯示,"true"代表要顯示.
14735
			#參考資料:
14736
			#http://www.w3schools.com/html/html_forms.asp
14737
			#http://www.w3schools.com/tags/tag_fieldset.asp
14738
			$formStart=form::start($conf["form::start"]);
14739
			unset($conf["form::start"]);
14740
 
14741
			#如果表單開始失敗
14742
			if($formStart["status"]=="false"){
14743
 
14744
				#設置執行失敗
14745
				$result["status"]="false";
14746
 
14747
				#設置執行錯誤
14748
				$result["error"]=$formStart;
14749
 
14750
				#回傳結果
14751
				return $result;
14752
 
14753
				}#if end
14754
 
14755
			#串接表單開始
14756
			$result["content"]=$result["content"].$formStart["content"];
14757
 
14758
			}#if end
14759
 
14760
		#陣列 $conf["formFileName"] 中有幾個元素,就執行幾次
14761
		for($i=0;$i<count($conf["formFileName"]);$i++){
14762
 
14763
			#如果 $conf["formFileName"][$i] 不存在
14764
			if(!isset($conf["formFileName"][$i])){
14765
 
14766
				#設置執行失敗
14767
				$result["status"]="false";
14768
 
14769
				#設置錯誤訊息
14770
				$result["error"][]="表單變數有缺";
14771
 
14772
				#回傳結果
14773
				return $result;
14774
 
14775
				}#if end
14776
 
14777
			#函式說明:
14778
			#可以瀏覽要上傳的檔案
14779
			#回傳結果:
14780
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
14781
			#$result["function"],當前執行的函數.
14782
			#$result["error"],錯誤訊息陣列.
14783
			#$result["content"],上傳檔案的語法.
14784
			#必填參數:
14785
			#$conf["formFileName"],字串,該上傳檔案的表單名稱.
14786
			$conf["form::uploadOneFile"]["formFileName"]=$conf["formFileName"][$i];
14787
			#可省略參數:
14788
 
14789
			#如果 $conf["maxFileSize"] 有設置
14790
			if(isset($conf["form::uploadOneFile"])){
14791
 
14792
				#如果 $conf["form::uploadOneFile"][$i] 有設置
14793
				if(isset($conf["form::uploadOneFile"][$i])){
14794
 
14795
					#$conf["form::uploadOneFile"]["maxFileSize"],字串,檔案的最大限制,單位是位元組(byte)。1kb = 1024 byte ; 1mb = 1024 kb 約等與 1024000 byte,預設是10240000(10MB)
14796
					$conf["form::uploadOneFile"]["maxFileSize"]=$conf["maxFileSize"];
14797
 
14798
					}#if end
14799
 
14800
				}#if end
14801
 
14802
			#如果 $conf["browseButtonClass"] 有設置
14803
			if(isset($conf["browseButtonClass"])){
14804
 
14805
				#如果 $conf["browseButtonClass"][$i] 有設置
14806
				if(isset($conf["browseButtonClass"][$i])){
14807
 
14808
					#$conf["form::uploadOneFile"]["browseButtonClass"],字串,瀏覽檔案的按鈕樣式,預設為"__inputFileCssStyle".
14809
					$conf["form::uploadOneFile"]["browseButtonClass"]="__inputFileCssStyle";
14810
 
14811
					}#if end
14812
 
14813
				}#if end
14814
 
14815
			#如果 $conf["acceptType"] 有設置
14816
			if(isset($conf["acceptType"])){
14817
 
14818
				#如果 $conf["acceptType"][$i] 存在
14819
				if(isset($conf["acceptType"][$i])){
14820
 
14821
					#$conf["form::uploadOneFile"]["acceptType"],字串,限定檔案的類型為"video/*","audio/*","image/*",預設不限定.
14822
					$conf["form::uploadOneFile"]["acceptType"]=$conf["acceptType"][$i];
14823
 
14824
					}#if end
14825
 
14826
				}#if end
14827
 
14828
			#如果 $conf["required"] 有設置
14829
			if(isset($conf["required"])){
14830
 
14831
				#如果 $conf["required"][$i] 有設置
14832
				if(isset($conf["required"][$i])){
14833
 
14834
					#$conf["form::uploadOneFile"]["required"],字串,該欄位是否必填,"true"為必填,"false"為可留空,預設為"false".
14835
					$conf["form::uploadOneFile"]["required"]=$conf["required"][$i];
14836
 
14837
					}#if end
14838
 
14839
				}#if end
14840
 
14841
			#$conf["trStart"],字串,爲是否要以<tr>開頭,"true"表示"是",也可以看作新的一列開始,預設為"false".
14842
			#$conf["trStart"]="true";
14843
			#$conf["trClass"],字串,列的樣式,"__withoutBorder"爲沒有框線的樣式;"__withBorder",有框線的樣式,預設為"__withoutBorder".
14844
			#$conf["trClass"]="__withoutBorder";
14845
			#$conf["tdStart"],字串,爲是否要以<td>開頭,"true"表示"是",也可以看成列裏面的元素開始,預設為"false".
14846
			#$conf["tdStart"]="false";
14847
			#$conf["tdClass"],字串,行的樣式,"__withoutBorder"爲沒有框線的樣式;"__withBorder",有框線的樣式,預設為"__withoutBorder".
14848
			#$conf["tdClass"]="__withoutBorder";
14849
			#$conf["tdEnd"],字串,爲是否要以</td>結尾,"true"表示"是",也可以看成列裏面的元素結束,預設為"false".
14850
			#$conf["tdEnd"]="true";
14851
			#$conf["trEnd"],字串,爲是否要以</tr>結尾,"true"表示"是",也可以看作該列結束,預設為"false".
14852
			#$conf["trEnd"]="true";
14853
			#$conf["form::uploadOneFile"]["formStart"],字串,是否為表單的開始,"true"為是,預設為"false".
14854
			#$conf["form::uploadOneFile"]["formStart"]=$conf["formStart"];
14855
			#$conf["form::uploadOneFile"]["formName"],字串,表單的名稱
14856
			#$conf["form::uploadOneFile"]["formName"]=$conf["formName"];
14857
			#$conf["form::uploadOneFile"]["formAction"],字串,表單的目標,若有設置$conf["formStart"]為"true",則預設為php檔案自己
14858
			#$conf["form::uploadOneFile"]["formAction"]=$conf["formAction"];
14859
			#$conf["form::uploadOneFile"]["formTarget"],字串,表單要呈現回應的位置,預設為"_self".
14860
			#$conf["form::uploadOneFile"]["formTarget"]=$conf["formTarget"];
14861
			#$conf["form::uploadOneFile"]["formEnd"],字串,是否為表單的結束,"true"為是,預設為"false".
14862
			#$conf["form::uploadOneFile"]["formEnd"]=$conf["formEnd"];
14863
 
14864
			#如果有設定 $conf["comment"]
14865
			if(isset($conf["comment"])){
14866
 
14867
				#如果有設定 $conf["comment"][$i]
14868
				if(isset($conf["comment"][$i])){
14869
 
14870
					#$conf["form::uploadOneFile"]["comment"],字串,該上傳檔案的註解,預設不顯示.
14871
					$conf["form::uploadOneFile"]["comment"]=$conf["comment"][$i];
14872
 
14873
					}#if end
14874
 
14875
				}#if end
14876
 
14877
			$uploadOneFile=form::uploadOneFile($conf["form::uploadOneFile"]);
14878
			unset($conf["form::uploadOneFile"]);
14879
 
14880
			#如果 form::uploadOneFile 執行失敗
14881
			if($uploadOneFile["status"]=="false"){
14882
 
14883
				#設置執行失敗
14884
				$result["status"]="false";
14885
 
14886
				#設置錯誤訊息
14887
				$result["error"]=$uploadOneFile;
14888
 
14889
				#回傳結果
14890
				return $result;
14891
 
14892
				}#if end
14893
 
14894
			#如果不是最後一筆
14895
			if($i!=count($conf["formFileName"])-1){
14896
 
14897
				#取得上傳的語法,結尾空一列.
14898
				$result["content"]=$result["content"].$uploadOneFile["content"]."<p>&nbsp;</p>";
14899
 
14900
				}#if end
14901
 
14902
			#反之是最後一筆
14903
			else{
14904
 
14905
				#取得上傳的語法
14906
				$result["content"]=$result["content"].$uploadOneFile["content"];
14907
 
14908
				}#else end
14909
 
14910
			}#for end
14911
 
14912
		#設置執行正常
14913
		$result["status"]="true";
14914
 
14915
		#回傳結果
14916
		return $result;
14917
 
14918
		}#function uploadMultiFile end
14919
 
14920
	/*
14921
	#函式說明:
14922
	#上傳多個檔案,包含回上頁跟送出表單的按鈕.
14923
	#回傳結果:
14924
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
14925
	#$result["function"],當前執行的函數.
14926
	#$result["error"],錯誤訊息陣列.
14927
	#$result["content"],上傳檔案的語法.
14928
	#必填參數:
14929
	#$conf["formFileName"],字串陣列,該上傳檔案的表單名稱.
14930
	$conf["formFileName"]=array("");
14931
	#$conf["actionPage"],字串,處理表單資訊的頁面.
14932
	$conf["actionPage"]="";
14933
	#可省略參數:
14934
	#$conf["backButtonName"],字串,退回上一頁的按鈕要顯示的名稱,預設爲"回上頁"
14935
	#$conf["backButtonName"]="回上頁";
14936
	#$conf["backPage"],字串,返回的按鈕點了之後要到哪個頁面,預設是不使用.
14937
	#$conf["backPage"]="";
14938
	#$conf["backTarget"],字串,返回按鈕的顯示區塊,可以為"_self"自己這個頁面,"_top"整個畫面,"_blank"新的分頁,"_parent"父頁面,預設為"_self".
14939
	#$conf["backTarget"]="";
14940
	#$conf["backButtonClass"],字串,回上頁按鈕的css樣式,預設為"__qbpwcf_button".
14941
	#$conf["backButtonClass"]="__simpleButtonLinkDefaultButtonCssStyle";
14942
	#$conf["formName"],字串,表單的名稱
14943
	#$conf["formName"]="";
14944
	#$conf["formTarget"],字串,表單要呈現回應的位置,預設為"_self".
14945
	#$conf["formTarget"]="_self";
14946
	#$conf["acceptType"],字串陣列,限定各個檔案的類型為"video/*","audio/*","image/*",預設不限定.
14947
	#$conf["acceptType"]=array("");
14948
	#$conf["comment"],字串陣列,各個上傳檔案的註解,預設不顯示.
14949
	#$conf["comment"]=array("");
14950
	#$conf["required"],字串陣列,各個欄位是否必填,"true"為必填,"false"為可留空,預設為"false".
14951
	#$conf["required"]=array("true");
14952
	#$conf["maxFileSize"],字串陣列,各個檔案的最大限制,單位是位元組(byte),1kb = 1024 byte ; 1mb = 1024 kb 約等與 1024000 byte,預設爲"102400000"(100MB)
14953
	#$conf["maxFileSize"]=array("102400000");
14954
	#$conf["browseButtonClass"],字串陣列,瀏覽要上傳檔案的css樣式,預設為"__qbpwcf_inputFileCssStyle".
14955
	#$conf["browseButtonClass"]=array("__inputFileCssStyle");
14956
	#$conf["submitButtonClass"],字串,上傳按鈕的css樣式,預設為"__qbpwcf_button".
14957
	#$conf["submitButtonClass"]="__simpleButtonLinkDefaultButtonCssStyle";
14958
	#$conf["submitButtonName"],字串,送出鈕要顯示的名稱,預設爲"上傳"
14959
	#$conf["submitButtonName"]="上傳";
14960
	#參考資料:
14961
	#無.
14962
	#備註:
14963
	#無.
14964
	*/
14965
	public static function uploadMultiFileCom(&$conf){
14966
 
14967
		#初始化要回傳的變數
14968
		$result=array();
14969
 
14970
		#設置當前執行的函式
14971
		$result["function"]=__FUNCTION__;
14972
 
14973
		#初始化表單開始的語法
14974
		$result["content"]="";
14975
 
14976
		#如果 $conf 不為陣列
14977
		if(gettype($conf)!="array"){
14978
 
14979
			#設置執行失敗
14980
			$result["status"]="false";
14981
 
14982
			#設置執行錯誤訊息
14983
			$result["error"][]="\$conf變數須為陣列形態";
14984
 
14985
			#如果傳入的參數為 null
14986
			if($conf==null){
14987
 
14988
				#設置執行錯誤訊息
14989
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
14990
 
14991
				}#if end
14992
 
14993
			#回傳結果
14994
			return $result;
14995
 
14996
			}#if end
14997
 
14998
		#檢查參數
14999
		#函式說明:
15000
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
15001
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
15002
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
15003
		#$result["function"],當前執行的函式名稱.
15004
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
15005
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
15006
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
15007
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
15008
		#必填參數:
15009
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
15010
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
15011
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
15012
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("formFileName","actionPage");
15013
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double");
15014
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("array","string");
15015
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
15016
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
15017
		#可省略參數:
15018
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
15019
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
15020
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
15021
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("backButtonName","backPage","backTarget","backButtonClass","formName","formTarget","acceptType","comment","required","maxFileSize","browseButtonClass","submitButtonClass","submitButtonName");
15022
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
15023
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string","string","string","string","string","array","array","array","array","array","string","string");
15024
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,"null"代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
15025
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("回上頁",null,"_self","__qbpwcf_button",null,"_self",null,null,null,null,null,"__qbpwcf_button","上傳");
15026
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
15027
		#$conf["arrayCountEqualCheck"][]=array();
15028
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
15029
		unset($conf["variableCheck::checkArguments"]);
15030
 
15031
		#如果檢查參數失敗
15032
		if($checkResult["status"]=="false"){
15033
 
15034
			#設置執行失敗
15035
			$result["status"]="false";
15036
 
15037
			#設置執行錯誤
15038
			$result["error"]=$checkResult;
15039
 
15040
			#回傳結果
15041
			return $result;
15042
 
15043
			}#if end
15044
 
15045
		#如果檢查參數不通過
15046
		if($checkResult["passed"]=="false"){
15047
 
15048
			#設置執行失敗
15049
			$result["status"]="false";
15050
 
15051
			#設置執行錯誤
15052
			$result["error"]=$checkResult;
15053
 
15054
			#回傳結果
15055
			return $result;
15056
 
15057
			}#if end
15058
 
15059
		#函式說明:
15060
		#上傳多個檔案
15061
		#回傳結果:
15062
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
15063
		#$result["function"],當前執行的函數.
15064
		#$result["error"],錯誤訊息陣列.
15065
		#$result["content"],上傳檔案的語法.
15066
		#必填參數:
15067
		#$conf["form::uploadMultiFile"]["formFileName"],字串陣列,每個要上傳檔案的表單名稱.
15068
		$conf["form::uploadMultiFile"]["formFileName"]=$conf["formFileName"];
15069
		#可省略參數:
15070
 
15071
		#如果 $conf["maxFileSize"] 有設置
15072
		if(isset($conf["maxFileSize"])){
15073
 
15074
			#$conf["form::uploadMultiFile"]["maxFileSize"],字串陣列,各個檔案的最大限制,單位是位元組(byte)。1kb = 1024 byte ; 1mb = 1024 kb 約等與 1024000 byte,預設是10240000(10MB)
15075
			$conf["form::uploadMultiFile"]["maxFileSize"]=$conf["maxFileSize"];
15076
 
15077
			}#if end
15078
 
15079
		#如果有設置 $conf["browseButtonClass"]
15080
		if(isset($conf["browseButtonClass"])){
15081
 
15082
			#$conf["form::uploadMultiFile"]["browseButtonClass"],字串陣列,瀏覽檔案的按鈕樣式,預設為"__inputFileCssStyle".
15083
			$conf["form::uploadMultiFile"]["browseButtonClass"]=$conf["browseButtonClass"];
15084
 
15085
			}#if end
15086
 
15087
		#如果有設置 $conf["acceptType"]
15088
		if(isset($conf["acceptType"])){
15089
 
15090
			#$conf["form::uploadMultiFile"]["acceptType"],字串陣列,限定各個檔案的類型為"video/*","audio/*","image/*",預設不限定.
15091
			$conf["form::uploadMultiFile"]["acceptType"]=$conf["acceptType"];
15092
 
15093
			}#if end
15094
 
15095
		#如果有設置 $conf["required"]
15096
		if(isset($conf["required"])){
15097
 
15098
			#$conf["form::uploadMultiFile"]["required"],字串陣列,各個欄位是否必填,"true"為必填,"false"為可留空,預設為"false".
15099
			$conf["form::uploadMultiFile"]["required"]=$conf["required"];
15100
 
15101
			}#if end
15102
 
15103
		#如果有設置 $conf["comment"]
15104
		if(isset($conf["comment"])){
15105
 
15106
			#$conf["form::uploadMultiFile"]["comment"],字串陣列,各個上傳檔案的註解,預設不顯示.
15107
			$conf["form::uploadMultiFile"]["comment"]=$conf["comment"];
15108
 
15109
			}#if end
15110
 
15111
		#$conf["form::uploadMultiFile"]["formStart"],字串,是否為表單的開始,"true"為是,預設為"false".
15112
		$conf["form::uploadMultiFile"]["formStart"]="true";
15113
 
15114
		#如果有設置 $conf["formName"]
15115
		if(isset($conf["formName"])){
15116
 
15117
			#$conf["form::uploadMultiFile"]["formName"],字串,表單的名稱
15118
			$conf["form::uploadMultiFile"]["formName"]=$conf["formName"];
15119
 
15120
			}#if end
15121
 
15122
		#$conf["form::uploadMultiFile"]["formAction"],字串,表單的目標,若有設置$conf["formStart"]為"true",則預設為php檔案自己
15123
		$conf["form::uploadMultiFile"]["formAction"]=$conf["actionPage"];
15124
 
15125
		#如果有設置 $conf["formTarget"]
15126
		if(isset($conf["formTarget"])){
15127
 
15128
			#$conf["form::uploadMultiFile"]["formTarget"],字串,表單要呈現回應的位置,預設為"_self".
15129
			$conf["form::uploadMultiFile"]["formTarget"]=$conf["formTarget"];
15130
 
15131
			}#if end
15132
 
15133
		$uploadMultiFile=form::uploadMultiFile($conf["form::uploadMultiFile"]);
15134
		unset($conf["form::uploadMultiFile"]);
15135
 
15136
		#如果執行 form::uploadMultiFile 失敗
15137
		if($uploadMultiFile["status"]=="false"){
15138
 
15139
			#設置執行失敗
15140
			$result["status"]="false";
15141
 
15142
			#設置執行錯誤
15143
			$result["error"]=$uploadMultiFile;
15144
 
15145
			#回傳結果
15146
			return $result;
15147
 
15148
			}#if end
15149
 
15150
		#串接多個上傳表單的內容
15151
		$result["content"]=$result["content"].$uploadMultiFile["content"];
15152
 
15153
		#建立送出的按鈕
15154
		#函式說明:
15155
		#放置按鈕
15156
		#回傳結果:
15157
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
15158
		#$result["function"],當前執行的函數.
15159
		#$result["error"],錯誤訊息陣列.
15160
		#$result["content"],按鈕語法.
15161
		#必填參數:
15162
		$conf["form::button"]["buttonDisplayValue"]=$conf["submitButtonName"];#爲按鈕上顯示的文字。
15163
		#可省略參數:
15164
		#$conf["buttonStyleName"]="";#可省略,爲按鈕所要使用的css樣式類別名稱,預設的css樣式爲 __simpleButtonLinkDefaultButtonCssStyle 。
15165
			#其屬性爲   "width","height","font-size","text-align"
15166
			#其屬性值爲 "100%" ,  "50"  ,    "30"   ,   "center"
15167
		#$conf["buttonActionScriptFunction"]="";#可省略,爲按下按鈕時所要執行的javaScript函式,預設不設定。
15168
			#"document.forms.formName.submit()"爲傳送名爲testForm的表單內容
15169
			#"window.print()"爲使用瀏覽器內建工具列印當前網頁
15170
		#$conf["buttonBorder"]="";#可省略,爲IE9內會自動產生外框,此爲外框的厚度,屬性值爲正整數,預設爲0。
15171
		#$conf["disabled"]="true";#可省略,為按鈕的功能是否要取消,若為"true"則代表要取消,若為"false"則代表功能正常,預設為"false".
15172
		#$conf["tableStart"]="true";#爲是否要表格開始。"false"代表否,"true"代表是。預設爲"false"。
15173
		#$conf["tableClass"]="";#表格要套用的css樣式,若省略的話,則預設爲 __defaultTbaleCsssStyle 其屬性爲 table-layout:fixed word-break:break-all width:100% ,須搭配 $conf["tablStart"] 與 $conf["tableEnd"] 使用。
15174
		#$conf["trStart"]="true";#爲是否要以<tr>開頭,"true"表示"是"。也可以看作新的一列開始,預設為"false".
15175
		#$conf["trClass"]="__withoutBorder";#<tr>要套用的css樣式,預設為"__withoutBorder",亦即沒有框線的樣式;"__withBorder"則爲有框線的樣式
15176
		#$conf["tdStart"]="true";#爲是否要以<td>開頭,"true"表示"是"。也可以看成列裏面的元素開始,預設為"false".
15177
		#$conf["tdClass"]="__withoutBorder";#<td>要套用的css樣式,"__withoutBorder"爲沒有框線的樣式;__withBorder爲有框線的樣式
15178
		#$conf["tdEnd"]="true";#爲是否要以</td>結尾,"true"表示"是"。也可以看成列裏面的元素結束,預設為"false".
15179
		#$conf["trEnd"]="true";#爲是否要以</tr>結尾,"true"表示"是"。也可以看作該列結束,預設為"false".
15180
		#$conf["tableEnd"]="true";#爲是否要表格結束。"false"代表否,"true"代表是,預設爲"false"。
15181
		#$conf["formStart"]="true";#爲是否要表單開始,如果爲"true"則代表要表單開始,預設為"false".
15182
		#$conf["action"]="";#爲表單要傳送到哪個頁面,須搭配$conf["formStart"]與$conf["formEnd"]參數使用
15183
		#$conf["target"]="";#為目標表單顯示的方式,若沒設定則預設爲"_self",其他可用的參數爲 "_blank"、"_parent"、"_top",也可以是iframe的名稱。須搭配$conf["formStart"]與$conf["formEnd"]參數使用
15184
		$conf["formEnd"]="true";#爲是否要表單結束,如果爲"true"則代表要表單結束,預設為"false".
15185
		#參考資料:
15186
		#http://stackoverflow.com/questions/3014649/how-to-disable-html-button-using-javascript
15187
		$button=form::button($conf["form::button"]);
15188
		unset($conf["form::button"]);
15189
 
15190
		#如果建立送出按鈕失敗
15191
		if($button["status"]=="false"){
15192
 
15193
			#設置執行失敗
15194
			$result["status"]="false";
15195
 
15196
			#設置執行錯誤
15197
			$result["error"]=$button;
15198
 
15199
			#回傳結果
15200
			return $result;
15201
 
15202
			}#if end
15203
 
15204
		#空一列然後串接送出按鈕
15205
		$result["content"]=$result["content"]."<p>&nbsp;</p>".$button["content"];
15206
 
15207
		#設置執行正常
15208
		$result["status"]="true";
15209
 
15210
		#回傳結果
15211
		return $result;
15212
 
15213
		}#function uploadMultiFileCom end
15214
 
15215
	/*
15216
	#函式說明:
15217
	#將接收到的表單資訊用serialize壓縮成一字串.
15218
	#回傳結果:
15219
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
15220
	#$result["function"],當前執行的函數.
15221
	#$result["error"],錯誤訊息陣列.
15222
	#$result["content"],serialize後的表單資料字串.
15223
	#必填參數:
15224
	#無
15225
	#可省略參數:
15226
	#$conf["type"],接收的表單傳送方式,可以用的有"post","get","any",預設為 "any".
15227
	#$conf["type"]="any";
15228
	#參考資料:
15229
	#serialize=>http://php.net/manual/en/function.serialize.php
15230
	#備註:
15231
	#無.
15232
	*/
15233
	public static function serialize(&$conf=array()){
15234
 
15235
		#初始化要回傳的結果
15236
		$result=array();
15237
 
15238
		#取得當前執行的函數名稱
15239
		$result["function"]=__FUNCTION__;
15240
 
15241
		#如果 $conf 不為陣列
15242
		if(gettype($conf)!="array"){
15243
 
15244
			#設置執行失敗
15245
			$result["status"]="false";
15246
 
15247
			#設置執行錯誤訊息
15248
			$result["error"][]="\$conf變數須為陣列形態";
15249
 
15250
			#如果傳入的參數為 null
15251
			if($conf==null){
15252
 
15253
				#設置執行錯誤訊息
15254
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
15255
 
15256
				}#if end
15257
 
15258
			#回傳結果
15259
			return $result;
15260
 
15261
			}#if end
15262
 
15263
		#檢查可省略參數
15264
		#函式說明:
15265
		#檢查一包含數個可省略變數的陣列變數,其型態是否正確,省略掉的陣列變數可以直接給定預設值。
15266
		#回傳結果:
15267
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
15268
		#$result["error"],錯誤訊息陣列.
15269
		#$result["function"],當前執行的函式名稱.
15270
		#$result["passed"],參數是否都通過檢查,"true",代表有通過檢查,"false"代表沒有通過檢查。
15271
		#必填參數:
15272
		#$conf["checkedVar"],陣列,要檢查的變數陣列名稱為?
15273
		$conf["heck::checkSkipableVarType"]["checkedVar"]=$conf;
15274
		#$conf["sikpableVarNameArray"],字串陣列,要檢查型態是否設定正確的變數名稱陣列.
15275
		$conf["heck::checkSkipableVarType"]["sikpableVarNameArray"]=array("type");
15276
		#$argu,要直接存取的陣列變數名稱,變數前面加上「&」,如果要在別的函式裡面使用本函式,請記得將變動過結果($argu)給使用該函式的設定變數(通常是$conf=$argu).
15277
		$argu=&$conf["heck::checkSkipableVarType"];
15278
		#可省略參數:
15279
		#$conf["skipableVarTypeArray"],字串陣列,要檢查的每個變數,其型態應該要為何,null代表不指定變數形態.
15280
		$conf["heck::checkSkipableVarType"]["skipableVarTypeArray"]=array("array");
15281
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的變數要初始化為什麼,null代表不指定.
15282
		$conf["heck::checkSkipableVarType"]["skipableVarDefaultValue"]=array("any");
15283
		$checkSkipableVarType=variableCheck::checkSkipableVarType($conf["heck::checkSkipableVarType"],$argu);
15284
		unset($conf["heck::checkSkipableVarType"]);
15285
		$conf=$argu;
15286
 
15287
		#如果檢查參數失敗
15288
		if($checkSkipableVarType["status"]=="false"){
15289
 
15290
			#設置執行失敗
15291
			$result["status"]="false";
15292
 
15293
			#設置執行錯誤訊息
15294
			$result["error"]=$checkSkipableVarType;
15295
 
15296
			#回傳結果
15297
			return $result;
15298
 
15299
			}#if end
15300
 
15301
		#判斷 $conf["type"]
15302
		switch($conf["type"]){
15303
 
15304
			#如果是 post, POST
15305
			case "post":
15306
			case "POST":
15307
 
15308
				#取得  serialize 後的post表單資料
15309
				$result["content"]=serialize($_POST);
15310
				break;
15311
 
15312
			#如果是 get, GET
15313
			case "get":
15314
			case "GET":
15315
 
15316
				#取得  serialize 後的get表單資料
15317
				$result["content"]=serialize($_GET);
15318
				break;
15319
 
15320
			#如果是 any
15321
			case "any":
15322
 
15323
				#取得  serialize 後的表單資料
15324
				$result["content"]=serialize($_REQUEST);
15325
				break;
15326
			default:
15327
 
15328
				#設置錯誤識別
15329
				$result["status"]="false";
15330
 
15331
				#設置錯誤訊息
15332
				$result["error"]="參數 \"type\" 僅能為 post,get,any 之一";
15333
 
15334
				#回傳結果
15335
				return $result;
15336
 
15337
			}#switch end
15338
 
15339
		#設置執行正常
15340
		$result["status"]="true";
15341
 
15342
		#回傳結果
15343
		return $result;
15344
 
15345
		}#function serialize end
15346
 
15347
	/*
15348
	#函式說明:
15349
	#將接收到的受到serialize壓縮成一字串的表單資訊進行還原
15350
	#回傳結果:
15351
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
15352
	#$result["function"],當前執行的函數.
15353
	#$result["error"],錯誤訊息陣列.
15354
	#$result["content"],serialize後的表單資料字串.
15355
	#必填參數:
15356
	#$conf["serial_FD_str"],透過serialize壓縮過的表單資料
15357
	$conf["serial_FD_str"]="";
15358
	#可省略參數:
15359
	#無
15360
	#參考資料:
15361
	#serialize=>http://php.net/manual/en/function.serialize.php
15362
	#備註:
15363
	#無.
15364
	*/
15365
	public static function unserialize(&$conf){
15366
 
15367
		#初始化要回傳的結果
15368
		$result=array();
15369
 
15370
		#取得當前執行的函數名稱
15371
		$result["function"]=__FUNCTION__;
15372
 
15373
		#如果沒有參數
15374
		if(func_num_args()==0){
15375
 
15376
			#設置執行失敗
15377
			$result["status"]="false";
15378
 
15379
			#設置執行錯誤訊息
15380
			$result["error"]="函數".$result["function"]."需要參數";
15381
 
15382
			#回傳結果
15383
			return $result;
15384
 
15385
			}#if end
15386
 
15387
		#如果 $conf 不為陣列
15388
		if(gettype($conf)!="array"){
15389
 
15390
			#設置執行失敗
15391
			$result["status"]="false";
15392
 
15393
			#設置執行錯誤訊息
15394
			$result["error"][]="\$conf變數須為陣列形態";
15395
 
15396
			#如果傳入的參數為 null
15397
			if($conf==null){
15398
 
15399
				#設置執行錯誤訊息
15400
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
15401
 
15402
				#回傳結果
15403
				return $result;
15404
 
15405
				}#if end
15406
 
15407
			}#if end
15408
 
15409
		#檢查參數
15410
		#函式說明:
15411
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
15412
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
15413
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
15414
		#$result["function"],當前執行的函式名稱.
15415
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
15416
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
15417
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
15418
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
15419
		#必填參數:
15420
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
15421
		$conf["variableCheck.checkArguments"]["varInput"]=&$conf;
15422
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
15423
		$conf["variableCheck.checkArguments"]["mustBeFilledVariableName"]=array("serial_FD_str");
15424
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double");
15425
		$conf["variableCheck.checkArguments"]["mustBeFilledVariableType"]=array("string");
15426
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
15427
		$conf["variableCheck.checkArguments"]["referenceVarKey"]="variableCheck.checkArguments";
15428
		#可省略參數:
15429
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"false"。
15430
		#$conf["variableCheck.checkArguments"]["canBeEmptyString"]="true";
15431
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
15432
		#$conf["skipableVariableName"]=array();
15433
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
15434
		#$conf["skipableVariableType"]=array();
15435
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,"null"代表不指定.
15436
		#$conf["skipableVarDefaultValue"]=array("");
15437
		$checkResult=variableCheck::checkArguments($conf["variableCheck.checkArguments"]);
15438
		unset($conf["variableCheck.checkArguments"]);
15439
 
15440
		#如果檢查失敗
15441
		if($checkResult["status"]=="false"){
15442
 
15443
			#設置執行不正常
15444
			$result["status"]="false";
15445
 
15446
			#程式停止執行
15447
			$result["error"]=$checkResult;
15448
 
15449
			#回傳結果
15450
			return $result;
15451
 
15452
			}#if end
15453
 
15454
		#如果檢查不通過
15455
		if($checkResult["passed"]=="false"){
15456
 
15457
			#設置執行不正常
15458
			$result["status"]="false";
15459
 
15460
			#程式停止執行
15461
			$result["error"]=$checkResult;
15462
 
15463
			#回傳結果
15464
			return $result;
15465
 
15466
			}#if end
15467
 
15468
		#取得解開的表單資料
15469
		$result["content"]=unserialize($conf["serial_FD_str"]);
15470
 
15471
		#設置執行正常
15472
		$result["status"]="true";
15473
 
15474
		#回傳結果
15475
		return $result;
15476
 
15477
		}#function unserialize end
15478
 
15479
	/*
15480
	#函式說明:
15481
	#判斷當前php檔的執行是否為ajax的要求.
15482
	#回傳結果:
15483
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
15484
	#$result["function"],當前執行的函數.
15485
	#$result["content"],是否為ajax要求,"true"代表是,"false"代表不是.
15486
	#$result["argu"],使用的參數.
15487
	#可省略參數:
15488
	#$conf["useGetVarToRecogniseAjaxRequest"],字串,用來識別是否為ajax要求的get變數名稱,若其值為"true"則代表為ajax要求,反之為"false",判斷好後會將該變數移除.
15489
	#$conf["useGetVarToRecogniseAjaxRequest"]="is_ajax";
15490
	#$conf["usePostVarToRecogniseAjaxRequest"],字串,用來識別是否為ajax要求的post變數名稱,若其值為"true"則代表為ajax要求,反之為"false",判斷好後會將該變數移除.
15491
	#$conf["usePostVarToRecogniseAjaxRequest"]="is_ajax";
15492
	#參考資料:
15493
	#無.
15494
	#備註:
15495
	#如果client端沒有傳送ajax要求的識別header,則無法識別是ajax要求.
15496
	*/
15497
	public static function is_ajax(&$conf=array()){
15498
 
15499
		#初始化要回傳的結果
15500
		$result=array();
15501
 
15502
		#取得當前執行的函數名稱
15503
		$result["function"]=__FUNCTION__;
15504
 
15505
		#取得參數
15506
		$result["argu"]=$conf;
15507
 
15508
		#如果 $conf 不為陣列
15509
		if(gettype($conf)!="array"){
15510
 
15511
			#設置執行失敗
15512
			$result["status"]="false";
15513
 
15514
			#設置執行錯誤訊息
15515
			$result["error"][]="\$conf變數須為陣列形態";
15516
 
15517
			#如果傳入的參數為 null
15518
			if($conf==null){
15519
 
15520
				#設置執行錯誤訊息
15521
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
15522
 
15523
				}#if end
15524
 
15525
			#回傳結果
15526
			return $result;
15527
 
15528
			}#if end
15529
 
15530
		#檢查參數
15531
		#函式說明:
15532
		#檢查一包含數個可省略變數的陣列變數,其型態是否正確,省略掉的陣列變數可以直接給定預設值。
15533
		#回傳結果:
15534
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
15535
		#$result["error"],錯誤訊息陣列.
15536
		#$result["function"],當前執行的函式名稱.
15537
		#$result["passed"],參數是否都通過檢查,"true",代表有通過檢查,"false"代表沒有通過檢查。
15538
		#必填參數:
15539
		#$conf["checkedVar"],陣列,要檢查的變數陣列名稱為?
15540
		$conf["variableCheck::checkSkipableVarType"]["checkedVar"]=$conf;
15541
		#$conf["sikpableVarNameArray"],字串陣列,要檢查型態是否設定正確的變數名稱陣列.
15542
		$conf["variableCheck::checkSkipableVarType"]["sikpableVarNameArray"]=array("useGetVarToRecogniseAjaxRequest","usePostVarToRecogniseAjaxRequest");
15543
		#$argu,要直接存取的陣列變數名稱,變數前面加上「&」,如果要在別的函式裡面使用本函式,請記得將變動過結果($argu)給使用該函式的設定變數(通常是$conf=$argu).
15544
		$argu=&$conf;
15545
		#可省略參數:
15546
		#$conf["skipableVarTypeArray"],字串陣列,要檢查的每個變數,其型態應該要為何,null代表不指定變數形態.
15547
		$conf["variableCheck::checkSkipableVarType"]["skipableVarTypeArray"]=array("string","string");
15548
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的變數要初始化為什麼,null代表不指定.
15549
		$conf["variableCheck::checkSkipableVarType"]["skipableVarDefaultValue"]=array(null,null);
15550
		$checkSkipableVarType=variableCheck::checkSkipableVarType($conf["variableCheck::checkSkipableVarType"],$argu);
15551
		unset($conf["variableCheck::checkSkipableVarType"]);
15552
 
15553
		#如果檢查失敗
15554
		if($checkSkipableVarType["status"]=="false"){
15555
 
15556
			#設置執行不正常
15557
			$result["status"]="false";
15558
 
15559
			#程式停止執行
15560
			$result["error"]=$checkSkipableVarType;
15561
 
15562
			#回傳結果
15563
			return $result;
15564
 
15565
			}#if end
15566
 
15567
		#如果檢查不通過
15568
		if($checkSkipableVarType["passed"]=="false"){
15569
 
15570
			#設置執行不正常
15571
			$result["status"]="false";
15572
 
15573
			#程式停止執行
15574
			$result["error"]=$checkSkipableVarType;
15575
 
15576
			#回傳結果
15577
			return $result;
15578
 
15579
			}#if end
15580
 
15581
		#如果存在 $conf["useGetVarToRecogniseAjaxRequest"]
15582
		if(isset($conf["useGetVarToRecogniseAjaxRequest"])){
15583
 
15584
			#如果存在 $_GET[$conf["useGetVarToRecogniseAjaxRequest"]]
15585
			if(isset($_GET[$conf["useGetVarToRecogniseAjaxRequest"]])){
15586
 
15587
				#如果 $_GET[$conf["useGetVarToRecogniseAjaxRequest"]] 為 "true"
15588
				if($_GET[$conf["useGetVarToRecogniseAjaxRequest"]]==="true"){
15589
 
15590
					#設置為ajax要求
15591
					$result["content"]="true";
15592
 
15593
					#移除識別 ajax 要求的 post 變數
15594
					unset($_GET[$conf["useGetVarToRecogniseAjaxRequest"]]);
15595
 
15596
					}#if end
15597
 
15598
				}#if end
15599
 
15600
			}#if end
15601
 
15602
		#反之如果存在 $conf["usePostVarToRecogniseAjaxRequest"]
15603
		else if(isset($conf["usePostVarToRecogniseAjaxRequest"])){
15604
 
15605
			#如果存在 $_POST[$conf["usePostVarToRecogniseAjaxRequest"]]
15606
			if(isset($_POST[$conf["usePostVarToRecogniseAjaxRequest"]])){
15607
 
15608
				#如果 $_POST[$conf["usePostVarToRecogniseAjaxRequest"]] 為 "true"
15609
				if($_POST[$conf["usePostVarToRecogniseAjaxRequest"]]==="true"){
15610
 
15611
					#設置為ajax要求
15612
					$result["content"]="true";
15613
 
15614
					#移除識別 ajax 要求的 post 變數
15615
					unset($_POST[$conf["usePostVarToRecogniseAjaxRequest"]]);
15616
 
15617
					}#if end
15618
 
15619
				}#if end
15620
 
15621
			}#if end
15622
 
15623
		#如果存在 $_SERVER['HTTP_X_REQUESTED_WITH']
15624
		else if(isset($_SERVER['HTTP_X_REQUESTED_WITH'])){
15625
 
15626
			#且其 $_SERVER['HTTP_X_REQUESTED_WITH'] 值為 'xmlhttprequest'
15627
			if(strtolower($_SERVER['HTTP_X_REQUESTED_WITH'])==='xmlhttprequest'){
15628
 
15629
				#設置為ajax要求
15630
				$result["content"]="true";
15631
 
15632
				}#if end
15633
 
15634
			}#if end
15635
 
15636
		#如果不存在 $result["content"]
15637
		if(!isset($result["content"])){
15638
 
15639
			#設置不為ajax要求
15640
			$result["content"]="false";
15641
 
15642
			}#if end
15643
 
15644
		#設置執行正常
15645
		$result["status"]="true";
15646
 
15647
		#回傳結果
15648
		return $result;
15649
 
15650
		}#function is_ajax end
15651
 
15652
	/*
15653
	#函式說明:
15654
	#水平拉霸
15655
	#回傳結果:
15656
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
15657
	#$result["function"],當前執行的函數.
15658
	#$result["content"],js語法.
15659
	#$result["argu"],使用的參數.
15660
	#必填參數:
15661
	#$conf["name"],字串,拉霸的名稱,不可重複,會出錯。
15662
	$conf["name"]="a";
15663
	#可省略參數:
15664
	#$conf["selectedColor"],字串,當前數值於bar上的顏色,預設為"orange".
15665
	#$conf["selectedColor"]="orange";
15666
	#$conf["unSelectedColor"],字串,非當前數值於bar上的顏色,預設為#d3d3d3.
15667
	#$conf["unSelectedColor"]="#d3d3d3";
15668
	#參考資料:
15669
	#無.
15670
	#備註:
15671
	#會產生 window.qbpwcf.form.bar 物件.若要印出拉霸則可呼叫函式 window.qbpwcf.form.bar.print() 方法.若要存取變更拉霸的設定可呼叫 window.qbpwcf.form.bar.content 取得dom.
15672
	*/
15673
	public static function bar(&$conf=array()){
15674
 
15675
		#初始化要回傳的結果
15676
		$result=array();
15677
 
15678
		#取得當前執行的函數名稱
15679
		$result["function"]=__FUNCTION__;
15680
 
15681
		#取得參數
15682
		$result["argu"]=$conf;
15683
 
15684
		#如果 $conf 不為陣列
15685
		if(gettype($conf)!="array"){
15686
 
15687
			#設置執行失敗
15688
			$result["status"]="false";
15689
 
15690
			#設置執行錯誤訊息
15691
			$result["error"][]="\$conf變數須為陣列形態";
15692
 
15693
			#如果傳入的參數為 null
15694
			if($conf==null){
15695
 
15696
				#設置執行錯誤訊息
15697
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
15698
 
15699
				}#if end
15700
 
15701
			#回傳結果
15702
			return $result;
15703
 
15704
			}#if end
15705
 
15706
		#檢查參數
15707
		#函式說明:
15708
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
15709
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
15710
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
15711
		#$result["function"],當前執行的函式名稱.
15712
		#$result["argu"],設置給予的參數.
15713
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
15714
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
15715
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
15716
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
15717
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
15718
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
15719
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
15720
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
15721
		#必填寫的參數:
15722
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
15723
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
15724
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
15725
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
15726
		#可以省略的參數:
15727
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
15728
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("name");
15729
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
15730
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string");
15731
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
15732
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
15733
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
15734
		#$conf["canNotBeEmpty"]=array();
15735
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
15736
		#$conf["canBeEmpty"]=array();
15737
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
15738
		$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("selectedColor","unSelectedColor");
15739
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
15740
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("selectedColor","unSelectedColor");
15741
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
15742
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string");
15743
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
15744
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("orange","#d3d3d3");
15745
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
15746
		#$conf["disallowAllSkipableVarIsEmpty"]="";
15747
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
15748
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
15749
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
15750
		#$conf["arrayCountEqualCheck"][]=array();
15751
		#參考資料:
15752
		#array_keys=>http://php.net/manual/en/function.array-keys.php
15753
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
15754
		unset($conf["variableCheck::checkArguments"]);
15755
 
15756
		#若檢查參數失敗
15757
		if($checkArguments["status"]==="false"){
15758
 
15759
			#設置執行失敗
15760
			$result["status"]="false";
15761
 
15762
			#設置錯誤訊息
15763
			$result["error"]=$checkArguments;
15764
 
15765
			#回傳結果
15766
			return $result;
15767
 
15768
			}#if end
15769
 
15770
		#若檢查參數不通過
15771
		if($checkArguments["passed"]==="false"){
15772
 
15773
			#設置執行失敗
15774
			$result["status"]="false";
15775
 
15776
			#設置錯誤訊息
15777
			$result["error"]=$checkArguments;
15778
 
15779
			#回傳結果
15780
			return $result;
15781
 
15782
			}#if end
15783
 
15784
		#加入 js
15785
		#函式說明:
15786
		#將要執行的script語法透過該函式執行(會在程式外層用<script></script>包起來).
15787
		#回傳結果:
15788
		#$result["status"],執行是否正常,"true"為正常,"false"為不正常.
15789
		#$result["error"],錯誤訊息陣列
15790
		#$result["function"],當前執行的函數名稱
15791
		#$result["content"],要執行的javaScript語法
15792
		#必填參數:
15793
		#$conf["script"],字串,要執行的javaScript語法.
15794
		$conf["javaScript::toScript"]["script"]=
15795
		"
15796
 
15797
		//確認變數存在 - start
15798
		if(window.qbpwcf===undefined)
15799
		{
15800
			window.qbpwcf={};
15801
		}
15802
 
15803
		if(window.qbpwcf.form===undefined)
15804
		{
15805
			window.qbpwcf.form={};
15806
		}
15807
 
15808
		if(window.qbpwcf.form.bar===undefined)
15809
		{
15810
			window.qbpwcf.form.bar={};
15811
		}
15812
		//確認變數 - end
15813
 
15814
		//建立 root div
15815
		rootDiv=document.createElement('div');
15816
		rootDiv.id='".$conf["name"]."rootDiv';
15817
 
15818
		//建立 onoff div
15819
		onoffDiv=document.createElement('div');
15820
		onoffDiv.id='".$conf["name"]."onoffDiv';
15821
		onoffDiv.style.width='200px';			
15822
 
15823
		//建立 off 的 div tag
15824
		offDiv=document.createElement('div');
15825
		offDiv.id='".$conf["name"]."off';
15826
		offDiv.innerText='off ';
15827
		offDiv.style.display='inline';
15828
		offDiv.style.float='left';
15829
 
15830
		//如果點擊了 off 字樣
15831
		offDiv.addEventListener('click',function(e){
15832
 
15833
			//一百次迴圈
15834
			for(i=0;i<100;i++){
15835
 
15836
				//取得該bar part
15837
				thisBarPart=document.getElementById('".$conf["name"]."bar'+i);
15838
 
15839
				//設置為灰色
15840
				thisBarPart.style.borderColor='".$conf["unSelectedColor"]."';	
15841
 
15842
				}//for end
15843
 
15844
			//取得 bar 數值
15845
			barVal=document.getElementById('".$conf["name"]."barVal');
15846
 
15847
			//設置為 '0%'
15848
			barVal.innerText='0%';
15849
 
15850
			//設置實際數值為 '0'
15851
			barVal.dataset.val='0';
15852
 
15853
			});
15854
 
15855
		//放入off的文字
15856
		onoffDiv.appendChild(offDiv);
15857
 
15858
		//建立 on 的 div tag
15859
		onDiv=document.createElement('div');
15860
		onDiv.id='".$conf["name"]."on';
15861
		onDiv.innerText=' on';
15862
		onDiv.style.display='inline';
15863
		onDiv.style.float='right';
15864
 
15865
		//如果點擊了 on 字樣
15866
		onDiv.addEventListener('click',function(e){
15867
 
15868
			//一百次迴圈
15869
			for(i=0;i<100;i++){
15870
 
15871
				//取得該bar part
15872
				thisBarPart=document.getElementById('".$conf["name"]."bar'+i);
15873
 
15874
				//設置為灰色
15875
				thisBarPart.style.borderColor='".$conf["unSelectedColor"]."';	
15876
 
15877
				}//for end
15878
 
15879
			//取得 bar 數值
15880
			barVal=document.getElementById('".$conf["name"]."barVal');
15881
 
15882
			//設置為 '0%'
15883
			barVal.innerText='on';
15884
 
15885
			//設置實際數值為 '0'
15886
			barVal.dataset.value='?';
15887
 
15888
			});
15889
 
15890
		//放入on的文字
15891
		onoffDiv.appendChild(onDiv);
15892
 
15893
		//建立 on 的 div tag
15894
		div=document.createElement('div');
15895
 
15896
		//放入空div
15897
		rootDiv.appendChild(div);
15898
 
15899
		//放入 on off div
15900
		rootDiv.appendChild(onoffDiv);
15901
 
15902
		//100次迴圈
15903
		for(i=0;i<100;i++){
15904
 
15905
			//建立拉霸
15906
			line=document.createElement('div');
15907
 
15908
			//設置拉霸樣式
15909
			line.id='".$conf["name"]."bar'+i;
15910
			line.dataset.val=i+1;
15911
			line.style.borderStyle='solid';
15912
			line.style.borderColor='".$conf["unSelectedColor"]."';
15913
			line.style.borderWidth='1px';
15914
			line.style.borderRadius='1px';		
15915
			line.style.display='inline';
15916
 
15917
			//放入拉霸part
15918
			rootDiv.appendChild(line);
15919
 
15920
			//點擊事件
15921
			line.addEventListener('click',function(e){
15922
 
15923
				//一百次迴圈
15924
				for(j=0;j<100;j++){
15925
 
15926
					//取得該bar part
15927
					thisBarPart=document.getElementById('".$conf["name"]."bar'+j);
15928
 
15929
					//設置為灰色
15930
					thisBarPart.style.borderColor='".$conf["unSelectedColor"]."';	
15931
 
15932
					}//for end
15933
 
15934
				//選取的點設置為橘色
15935
				e.target.style.borderColor='".$conf["selectedColor"]."';	
15936
 
15937
				//設置當前顯示的%數
15938
				document.getElementById('".$conf["name"]."barVal').innerText=(e.target.dataset.val)+'%';
15939
 
15940
				//設置當前顯示的%數值,不含單位
15941
				document.getElementById('".$conf["name"]."barVal').dataset.val=e.target.dataset.val;
15942
 
15943
				});//addEventListener end
15944
 
15945
			}//for end
15946
 
15947
		//建立 div tag,預設為 '?%'
15948
		valDiv=document.createElement('div');
15949
		valDiv.id='".$conf["name"]."barVal';
15950
		valDiv.innerText='?%';
15951
		valDiv.dataset.val='?';
15952
		valDiv.style.display='inline';
15953
 
15954
		//放入數值顯示
15955
		rootDiv.appendChild(valDiv);
15956
 
15957
		//取得 拉霸的名稱
15958
		window.qbpwcf.form.bar.name='".$conf["name"]."';
15959
 
15960
		//取得 拉霸的語法
15961
		window.qbpwcf.form.bar.content=rootDiv;
15962
 
15963
		//設置印出 拉霸的語法
15964
		window.qbpwcf.form.bar.print=function(){
15965
 
15966
			//放置root div
15967
			document.body.appendChild(window.qbpwcf.form.bar.content);
15968
 
15969
			}//function end
15970
 
15971
		";
15972
		#可省略參數:
15973
		#$conf["onReady"],字串,是否要在網頁完全載入後再執行,"false"為不等載入完就先執行,預設為"true"要等載入完再執行.
15974
		#$conf["onReady"]="true";
15975
		#$conf["globalJs"],字串陣列,為要放入<script>標籤的js全域變數.
15976
		#$conf["globalJs"]=array();
15977
		#$conf["jsFunciton"],字串陣列,為要放入<script>標籤的js函數.
15978
		#$conf["jsFunciton"]=array();
15979
		#參考資料:
15980
		#http://stackoverflow.com/questions/9899372/pure-javascript-equivalent-to-jquerys-ready-how-to-call-a-function-when-the
15981
		$toScript=javaScript::toScript($conf["javaScript::toScript"]);		
15982
		$result["scriptWithoutTag"]=$conf["javaScript::toScript"]["script"];		
15983
		unset($conf["javaScript::toScript"]);
15984
 
15985
		#加入 js 失敗
15986
		if($toScript["status"]==="false"){
15987
 
15988
			#設置執行失敗
15989
			$result["status"]="false";
15990
 
15991
			#設置錯誤訊息
15992
			$result["error"]=$toScript;
15993
 
15994
			#回傳結果
15995
			return $result;
15996
 
15997
			}#if end
15998
 
15999
		#取得js語法
16000
		$result["content"]=$toScript["content"];
16001
 
16002
		#設置執行正常
16003
		$result["status"]="true";
16004
 
16005
		#回傳結果
16006
		return $result;
16007
 
16008
		}#function bar end
16009
 
16010
	}#class form end
16011
 
16012
?>