为什么PHP的表单会丢失一些$ _POST变量?

时间:2010-04-21 18:46:59

标签: php flash post

有时,事实上,我的网络应用程序的用户每天多次提交一个包含大约十二个表单字段的表单,其中一半是隐藏字段,而一半的$ _POST数据根本不存在于处理脚本。请注意,不存在的字段位于表单的最底部。我知道这是因为这会引发一个致命的错误,并且会向我发送一封包含帖子数据的电子邮件。

当然,我和我团队中的任何开发人员都无法重现问题。

Flash参与了这个过程,因为我正在使用一个名为Uploadify的库来显示进度表。这是流程......有没有人有任何想法为什么一些帖子数据会被消灭?

  • 用户访问我正在使用的CMS中的页面的编辑屏幕。
  • 页面的记录ID将作为隐藏值放入表单中。
  • 用户单击Uploadify浏览按钮并选择一个文件(仅允许单个文件选择)。
  • 用户点击表单的“提交”按钮。
  • jQuery拦截表单提交操作,触发Uploadify开始上传,并为提交操作返回false(手动取消表单提交事件,以便Uploadify可以接管)。
  • 将上传上传到自定义流程脚本。
  • Uploadify完成上传并触发Javascript完成回调。
  • Javascript回调调用$('#myForm')。submit()来提交表单。

这种情况发生在多个浏览器(Firefox 3.5,3.6,Safari,Internet Explorer 7,8)和多个平台(Mac OS 10.5,10.6和Windows XP,7)上。

6 个答案:

答案 0 :(得分:1)

文件上传(Uploadify)的目标是否与<form>相同?如果是这样,除非您在scriptData配置选项中明确指定,否则Uploadify不会随文件上载一起发送任何信息(即其他表单字段)。也许错误是由这些上传到页面引起的,这导致请求缺少某些字段。

答案 1 :(得分:1)

您是否正在使用javascript对数据进行任何操作?如果是这样,某些用户可能没有启用j并且可能导致问题。尝试在禁用javascript的情况下运行该表单。

编辑:有助于阅读整篇文章。是的,很可能人们在没有启用JavaScript的情况下运行表单。

答案 2 :(得分:1)

我的第一个想法是无效的HTML。你说最后隐藏的字段。也许嵌入其中的一些数据没有正确准备或转义。

由于你确实得到了一些的数据,我可能会开始使用jquery来创建某种类型的表单元素和它知道的值的校验和,并将这个聚合的校验和与表格。根据您是否无法将其投入使用,可能会对您的问题有所了解。

您可能还会尝试查找浏览器发送的http请求的内容长度。也许更改webserver日志配置。它可能正在发送数据,并且它被您的服务器/脚本错误处理。

答案 3 :(得分:0)

我认为你的流程可能是错误的。你不应该这样做吗

1&GT;浏览文件 2 - ;选择文件后自动开始上传。 3 GT;用户选择提交按钮

这样你就可以避免拦截事物的复杂性。

以下是我的流程片段:

var fname = '';
$(document).ready(function() {
    $('#upload').hide();
    $('#submit_btn').hide();

    if($('#id').val()) {
        $('#upload').show();
    }
    $('#upload').uploadify({
        uploader:   'js/uploadify/uploadify.swf',
        script:     'upload.php',
        folder:     '_holder',
        auto:       true,
        cancelImg:  'images/cancel.png',
        buttonText: 'Upload File',
        width:      '120',
        onComplete: function(event, queueID, fileObj, reponse, data) {
            fname = fileObj.name;
            $("#status_msg").html( 'File Is Uploaded.' );
            $('#submit_btn').show();
       }
    });
});

然后我当然会对来自submit_btn的文件进行其他处理。

答案 4 :(得分:0)

如果未通过的字段是在同一表单中的文件上传字段之后定义的,那么这很可能是您的问题。

如果是这种情况,您必须使用自己的操作(最佳解决方案)拆分上传表单和数据表单,或者在上传表单(第二选择)之前指定所有字段

答案 5 :(得分:0)

这可能看起来像一个愚蠢的答案,但你认为有些用户双击?也许第二次点击导致问题?