我在codeigniter中有一个php应用程序,遇到以下问题。
当使用Ipad随机提交表单时,它将丢失帖子数据。
我尝试过四种不同的访问方式。

print_r($this->input->post());
print_r($_POST);
print_r(file_get_contents('php://input'));
print_r($_REQUEST);

所有这些都不返回任何内容或返回一个空数组。
这似乎仅在使用Ipad或Iphone时才发生,但是在台式机浏览器中进行了50多次测试。
在PC浏览器上进行大约100次测试(firefox,chrome,IE)时,这并没有发生,而在safari中只有一次。

表格的代码;
<form id="email_report_form" name="email_report_form" method="post" accept-charset="utf-8" action="/handleajax/email_page" class="email_report_form ajaxform" onsubmit="return validate();">
    <div class="form_step_container clearfix">
        <div class="element clearfix">
            <div class="col_left">
                <label>Email: <span class="required">*</span></label>
            </div>
            <div class="col_right">
                <input type="text" name="form_email_to" id="form_email_to"  />
                <div>&nbsp;</div>
                <label>Separate multiple email addresses with a comma</label>
            </div>
        </div>
        <div class="element clearfix">
            <div class="col_left">
                <label>Your Message:</label>
            </div>
            <div class="col_right">
                <textarea name="form_email_message" cols="125" rows="5" onkeypress="return checkLength(event, this, 1000);"></textarea>
                <label>(Maximum of 1000 characters)</label>
                <br />
                <input type="hidden" name="redirect_path" id="redirect_path" value="" />
                <input type="submit" value="Send" class="btn btn-primary" />
            </div>
        </div>
    </div>
    <div class="element clearfix">
        <i>Information entered in this form will not be used for marketing purposes or passed to third parties.</i>
    </div>
</form>

onSubmit validate()的代码;
function validate() {
    element = document.getElementById("form_email_to");
    addresses = element.value.split(",");
    for (var i = 0; i < addresses.length; i++) {
        address = addresses[i].replace(/^\s*|\s*$/g, "");
        if (!validateEmail(address)) {
            alert('The email address "' + address + '" is invalid.');
            element.focus();
            return false;
        }
    }

    if (window.location.hash.length > 2) {
        $('#redirect_path').val(window.location.hash.substring(2));
    } else {
        $('#redirect_path').val(window.location);
    }

    $('#email_report').slideUp();
    return true;
}

表单提交功能的代码;
public function email_page() {
    echo "<br/>ci<br/>";
    print_r($this->input->post());
}

如您所见,这是我回显帖子数据的地方,此时数据已丢失。
有谁知道我为什么遇到这个问题以及如何解决?

最佳答案

您可能会看一下,这个家伙发现当服务器上的Negotiate出现问题时,您可以检查服务器或放置某种协商php header ,在HTTP响应中检查您的Accepts并使用它们,看看这个



看来这是safari身份验证堆栈的错误,其中
启用协商后,帖子主体会以某种方式被破坏。它
为何会发生这种情况没有任何意义,但实际上我看到了
5.1中使用身份验证的许多其他奇怪行为。很多时间,
但并非总是如此,尝试时会收到多个密码提示
验证 child 请求页面制作的(css / js / img)。一世
不要以为这是IIS的错误,因为其他所有浏览器(甚至是5.0)
完全可以,而且应该正确实现NTLM堆栈,
长期以来一直保持稳定...除非最近的Windows更新
在那个 Realm 可能有所贡献...值得在
最小。在星期一,我将跟进野生动物园的人们,看看我是否可以
找到根本的问题。

谢谢

在此处链接http://forums.iis.net/t/1182376.aspx?IIS7+5+receives+empty+post+body+from+Safari+5+1+

祝好运!

09-25 16:30
查看更多