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