表单数据丢失

mh1*_*mh1 5 javascript php post codeigniter

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

print_r($this->input->post());
print_r($_POST);
print_r(file_get_contents('php://input'));
print_r($_REQUEST);
Run Code Online (Sandbox Code Playgroud)

所有这些都不返回任何内容或空数组.这种情况似乎只发生在使用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>
Run Code Online (Sandbox Code Playgroud)

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;
}
Run Code Online (Sandbox Code Playgroud)

表单提交的功能代码;

public function email_page() {
    echo "<br/>ci<br/>";
    print_r($this->input->post());
}
Run Code Online (Sandbox Code Playgroud)

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

小智 0

你可能会看一下这个,这个人发现当服务器上的 Negotiate 开启时这是一个问题,你可以检查你的服务器或放置某种协商 php 标头,检查 HTTP 响应中的 Accepts 并使用它们, 看看这个

嗯,是的,我已经完成了所有这些,但它没有透露任何内容,这就是我寻求帮助的原因......我在那里发布的失败请求跟踪只是我必须继续进行的最有启发性的事情。

在深入研究我的服务器与我们的测试服务器的所有配置后,我发现了一些问题。值得庆幸的是,我有这种差异并且能够发现它。

身份验证 > 集成 Windows 身份验证 > 高级设置

提供商 > [协商,NTLM] <-- 不起作用 身份验证 > 集成 Windows 身份验证 > 高级设置 > 提供商 > [NTLM] <-- 起作用

所以看起来这是 safari 身份验证堆栈的一个错误,当启用协商时,帖子正文会以某种方式搞砸。为什么会发生这种情况没有任何意义,但实际上我在 5.1 中看到了许多其他与身份验证相关的奇怪行为。很多时候,但并非总是如此,当它尝试验证页面发出的子请求(css / js / img)时,我会收到多个密码提示。我不认为这是 IIS 的一个错误,因为所有其他浏览器甚至 5.0 都完全没问题,而且 NTLM 堆栈应该正确实现并且在很长一段时间内保持稳定......除非该领域最近的 Windows 更新可能有所贡献...这至少值得一看。周一我将与野生动物园人员进行跟进,看看是否能找到根本问题。

谢谢

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

祝你好运!