Re: [請益] 資料變多執行就會出現Forbidden

作者: et282523 (不屈鬥志)   2015-01-12 17:40:02
好吧,既然方法是我提出來的
那我就寫個簡單的範例來說明一下
(不過這裡是 php 版,我的解法卻是 jQuery,不知道可不可以?)
因為你的問題是 POST 的欄位超過 PHP 裡 max_input_vars 限制
所以必須減少 POST 的欄位及資料量
大概要做以下幾個動作
1. 拿掉所有 form 上面物件的 name 換成 id (這樣才不會自動被 post 出去)
2. form onsubmit 時先到 JavaScript 去判斷
3. 承上,判斷所有欄位,有輸入的欄位再加入 post_data
4. 最後加上一個 hidden 欄位,將 post_data 轉成 Json 格式塞入,並送出 post
5. 下一頁接收時,要先做 php 的 json_decode
以下是簡單的範例說明
網頁版:http://wbkuo.pixnet.net/blog/post/192551838
DEMO網頁:http://leo-kuo.com/test/jquery_post.php
程式碼:
<?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>
P.S. 關於 "form onsubmit 時先到 JavaScript 去判斷"
請看 <form onsubmit='return check_submit()'>
這裡是表示 submit 之前先執行 check_submit 的 function
如果 check_submit 回傳 false 就會取消 submit
如果 check_submit 回傳 true 或無回傳值就會繼續執行
※ 引述《imgodd (新手請指教)》之銘言:
: 各位好
: 小弟最近幫朋友修改一個已經完成的php網站
: 內容並沒有使用到資料庫
: 但是有用到php的運算語法
: 網址: http://www.overdrip.org/index.php
: 此頁進去往下滑有很多的噴漆罐顏色可以選擇
: 目前的數量有197個,可以隨意輸入數量,然後按加到購物車
: 可以順利進入下一頁(購物車的金額結算頁面)
: 但當我繼續加入到有200個以上的顏色選擇的時候
: 點選"加到購物車"
: 就會出現下面的錯誤訊息
: Forbidden
: You don't have permission to access /addtocart.php on this server.
: Additionally, a 404 Not Found error was encountered while trying
: to use an ErrorDocument to handle the request.
: 原本我以為是不是產品頁的table數量超過限制 所以不能處理??
: 但我爬文說這個訊息是跟權限有關係
: (但是我看過類似的網站,用div排的可以有200多項)
: 想請教各位可以告訴我該如何解決
: 讓他在這個分頁可以有200個以上的產品嗎
: 感謝感謝~
作者: imgodd (新手請指教)   2015-01-12 22:40:00
真的很謝謝你
作者: et282523 (不屈鬥志)   2015-01-12 23:05:00
將 $_POST 的值整個複蓋掉的方法其實有點暴力,不太建議雖然這樣我猜你會改最少啦,但個人覺得不是一個好寫法。

Links booklink

Contact Us: admin [ a t ] ucptt.com