因為 PHP 在 POST 傳送資料的時候,有資料量的限制(post_max_size),也有欄位數量的限制(max_input_vars)
一般來說可以修改 php.ini 的 post_max_size 及 max_input_vars 來避開這個問題(雖然可能不太好)
但在虛擬主機上可能無法自行修改這兩個設定,所以必須減少 POST 的資料量以及欄位數量


如果是 form 表單上的欄位非常的多,這裡或許可以用 jQuery 判斷及收集有輸入值的欄位
再一次送 POST 到下個頁面去做處理,大概要做以下幾個動作

1. 拿掉所有 form 上面物件的 name 換成 id (這樣才不會自動被 post 出去)
2. form onsubmit 時先到 JavaScript 去判斷
3. 承上,判斷所有欄位,有輸入的欄位再加入 post_data
4. 最後加上一個 hidden 欄位,將 post_data 轉成 Json 格式塞入,並送出 post
5. 下一頁接收時,要先做 php 的 json_decode

以下是簡單的範例說明

<?php
    // 取得 POST 資料
    if ($_POST['fm_post_data'])
    {
        // 要做 json_decode
        $post_data = json_decode($_POST['fm_post_data'], TRUE);

        // 將資料覆蓋掉整個 $_POST
        $_POST = $post_data;

        // 輸出資料
        echo "<pre>_POST = " . print_r($_POST, TRUE). "</pre>";
    }
?>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
<script>
function check_submit (event)
{
    var post_data = {}
    var post_count = 0;
    $('[id^="fm_num"]').each(function(i)
    {
        // 取得有輸入的欄位
        var value = $(this).val();
        if ($(this).val())
        {
            var key = $(this).attr('id');
            post_data[key] = value;
            post_count++;
        }
    });

    // 如果沒有填任何資料的話,禁止送出表單
    if (post_count == 0)
    {
        alert('你沒有輸入任何欄位!');
        return false;
    }

    // 將表單欄位轉成 json 格式塞入 fm_post_data
    $('#fm_post_data').val(JSON.stringify(post_data));

    // 將表單送出(可省略)
    return true;
}
</script>
<form action='jquery_post.php' method='post' onsubmit='return check_submit()'>
    數量1: <input id='fm_num1' type='text'><br>
    數量2: <input id='fm_num2' type='text'><br>
    數量3: <input id='fm_num3' type='text'><br>
    <input type='hidden' id='fm_post_data' name='fm_post_data'>
    <input id='fm_submit' type='submit'>
</form>

 

arrow
arrow
    全站熱搜

    wbkuo 發表在 痞客邦 留言(0) 人氣()