最近工作的某一個案子中,遇到需要在前台讀取資料庫的資料並以表格方式呈現,且可以直接在前台修改表格內容。
No. | 商品名稱 | 商品料號 | 建議售價 | 實際售價 | 尺寸 | ....n項 |
1 | 產品1 | a000001 | 20 | 10 | 1 | .... |
2 | 產品2 | a000002 | 40 | 20 | 2 | .... |
.... | .... | .... | .... | .... | ... | .... |
n | 產品n | a00000n | 200 | 100 | 1n | ... |
嗯...大致上就像上面的表格,看起來是挺普通的...一般來說,直接在table上修改資料內容也挺常見的,但這次Aidec卻遇到些狀況
那就是此次客戶要求所有的更新不直接存入資料庫,而是要在線上編輯後輸出成csv格式,然後在經過它們公司內部層層審核後,再將此csv匯入到網站中更新資料庫的內容....
老實說,第一次遇到這種情況,所以也沒有什麼好方法,唯一能想到的做法就是將所有的欄位都弄成input
等修改完後,在以POST
的方式傳遞到處理頁並將全部的input
整理輸出成csv格式。起初在測試10幾筆資料時,並沒有什麼問題。但是當測試約300筆資料(約1000個input
)時,就發現出現資料有遺漏的問題...
事件的元凶
當絕望之際,上網抱google大腿後,發現到事件的元凶了!!原來是因為php預設有限制input
的數量不可超過1000個,所以當input
太多時就會被截斷。從來也沒想過會遇到一個頁面有1000個以上input
的問題,但既然遇到了該如何解決呢??
解決辦法
上網搜尋後,有找到一個辦法,那就是修改php.ini
的max_input_vars
的值,將這個值的數量調大後,便可以接收更多的input
。但是,問題又來了!!假如是用虛擬主機沒辦法修改php.ini
呢?? 所以又上網搜尋了一番發現到可以建立 .htaccess
文件在裡面添加
php_value max_input_vars 6000
php_value suhosin.post.max_vars 6000
php_value suhosin.request.max_vars 6000
修改php_max_input_vars
沒那麼簡單
但是事情沒那麼簡單,又有問題出現了!!那就是沒辦法保證到底會有多少個input
,一直修改php_max_input_vars
這個辦法似乎有些OOXX,而且有些虛擬主機好像也無法修改 .htaccess
,那到底還能怎麼做呢??
最後自己想出了一個辦法,那就是將所有的input
轉換成json
格式,在以字串的方式傳遞到伺服端,然後再用json_decode
還原成array
。這樣就不必去管有多少個input
了。
範例:
html:
<form id="form" method="POST" > <input type="text" name="output_data[1][product_name]" value="商品1"> <input type="text" name="output_data[2][product_name]" value="商品2"> <input type="text" name="output_data[3][product_name]" value="商品3"> <input type="text" name="output_data[4][product_name]" value="商品4"> <input type="text" name="output_data[5][product_name]" value="商品5"> </form>
javascipt:
為了方便將input
序列化成json
格式所以用jquery.serializeJSON
外掛來輔助。
<script> var data=[]; data.push({ name: "myData", value: JSON.stringify($('#form').serializeJSON()) }); //以load的方式,傳遞post參數(偷懶) $('#result').load('action.php',data); </script>
註:這個案子是用jQuery做。
php:
<?php $data=json_decode($_POST['myData'],JSON_FORCE_OBJECT); ?>
這樣就可以解決有大量的input問題了,當然有更好的方法請告知我 ^^
文章轉載或引用,請先告知並保留原文出處與連結!!(單純分享或非營利的只需保留原文出處,不用告知)
原文連結:
https://blog.aidec.tw/post/php-max-input-limit
若有業務合作需求,可寫信至: opweb666@gmail.com
創業、網站經營相關內容未來將發布在 小易創業筆記