作者et282523 (不屈斗志)
看板PHP
标题Re: [请益] 资料变多执行就会出现Forbidden
时间Mon Jan 12 17:40:02 2015
好吧,既然方法是我提出来的
那我就写个简单的范例来说明一下
(不过这里是 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个以上的产品吗
: 感谢感谢~
--
因为我相信
总有那麽一天
我会得到自己想要的幸福
所以为了守护这份得来不易的幸福
我只能不断的变强
再也不要因为自己不完美让幸福又溜走了....
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 125.227.141.182
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/PHP/M.1421055608.A.4BE.html
※ 编辑: et282523 (118.161.133.52), 01/12/2015 21:01:34
1F:推 imgodd: 真的很谢谢你 01/12 22:40
※ 编辑: et282523 (118.161.133.52), 01/12/2015 22:54:47
2F:→ et282523: 将 $_POST 的值整个复盖掉的方法其实有点暴力,不太建议 01/12 23:05
3F:→ et282523: 虽然这样我猜你会改最少啦,但个人觉得不是一个好写法。 01/12 23:06
※ 编辑: et282523 (118.161.134.66), 01/23/2015 00:39:54