【问题标题】:Form data being lost表单数据丢失
【发布时间】:2014-02-15 06:30:17
【问题描述】:

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

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

所有这些都没有返回任何内容或一个空数组。 这似乎只在使用 Ipad 或 Iphone 时发生,但在桌面 safari 的 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());
}

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

【问题讨论】:

  • 我认为代码中没有任何错误,请检查config.php文件,尤其是csrf_protection。
  • 可能的原因可能是 302 或 301 重定向。您将表单提交到 /handleajax/email_page。如果您的网络服务器或 php 将用户重定向到另一个位置,您将丢失表单数据。当是 301 永久重定向时,大多数浏览器在重定向一次后会自动转到新位置。这只是众多可能性之一,但很容易检查。
  • 你用的是真ipad还是ipad模拟器?
  • @jan 你可以看到我在 emai_page 函数的第一行丢失了表单数据,并且之前没有任何重定向。
  • @Nouphal.M 我使用的是真正的 Ipad 5.1.1 版

标签: javascript php codeigniter post


【解决方案1】:

你可能看看这个,这家伙发现这是在服务器上打开 Negotiate 时出现的问题,你可能会检查你的服务器或放置某种协商 php 标头,检查 HTTP 响应中的 Accepts 并和他们一起玩,看看这个

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

在挖掘了我的所有配置之后,有点想通了 服务器与我们的测试服务器。谢天谢地,我有这个不同,是 能够发现它。

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

providers > [Negotiate, NTLM] Integrated windows authentication > 高级设置 > providers > [NTLM]

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

谢谢

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

祝你好运!

【讨论】:

    猜你喜欢
    • 2023-04-05
    • 2013-10-24
    • 2011-08-29
    • 2013-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-13
    • 1970-01-01
    相关资源
    最近更新 更多