Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/246.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 带有PHP验证的AJAX文件上传_Javascript_Php_Jquery_Ajax_Validation - Fatal编程技术网

Javascript 带有PHP验证的AJAX文件上传

Javascript 带有PHP验证的AJAX文件上传,javascript,php,jquery,ajax,validation,Javascript,Php,Jquery,Ajax,Validation,我有一个表单,它有两个文本字段和一个文件上载字段 验证完全由PHP处理,我使用一点Ajax通过数组(err[])检索PHP脚本生成的错误消息 我的问题是,我似乎无法让文件上传验证正常工作。(上传文件时,它总是说“仅接受错误的文件格式.png、.gif、.jpg、.jpeg”) Ajax的功能如下: function checkform() { $.post('upload.php', $("form#uploadForm").serialize(), function (data

我有一个表单,它有两个文本字段和一个文件上载字段

验证完全由PHP处理,我使用一点Ajax通过数组(err[])检索PHP脚本生成的错误消息

我的问题是,我似乎无法让文件上传验证正常工作。(上传文件时,它总是说“仅接受错误的文件格式.png、.gif、.jpg、.jpeg”)

Ajax的功能如下:

function checkform() {
        $.post('upload.php', $("form#uploadForm").serialize(), function (data) {

                $("div#error").html(data).slideDown("fast");

                var destination = $('div#uploadContainer').offset().top - 15;
                $("html:not(:animated),body:not(:animated)").animate({
                    scrollTop: destination
                }, 200);

            });
    return false;
}
似乎总是会触发以下验证:

$extension = strrchr($_FILES['uploadFile']['name'], '.');
    if (!in_array($extension, $extensions)) {
        $err[]='Wrong file format only .png , .gif, .jpg, .jpeg are accepted';
    }
...
...

因为$extension有没有点(.)的扩展名。从文件扩展名中删除点(.)

$extensions = array('.png', '.gif', '.jpg', '.jpeg','.PNG', '.GIF', '.JPG', '.JPEG');
哪一个是

$extensions = array('png', 'gif', 'jpg', 'jpeg','PNG', 'GIF', 'JPG', 'JPEG');

希望这能修复这个bug,因为$extension有一个没有点(.)的扩展名。从文件扩展名中删除点(.)

$extensions = array('.png', '.gif', '.jpg', '.jpeg','.PNG', '.GIF', '.JPG', '.JPEG');
哪一个是

$extensions = array('png', 'gif', 'jpg', 'jpeg','PNG', 'GIF', 'JPG', 'JPEG');
希望通过@riddell的评论()

问题很可能不是php,而是Jquery本身。 像这样的东西可能有用

var form = $('form')[0];
var data = new FormData(form);

    $.ajax({
      url: 'upload.php',
      data: data ,
      processData: false,
      contentType: false,
      type: 'POST',
      success: function(data){
        alert(data);
      }
    });
根据@riddell的评论()

问题很可能不是php,而是Jquery本身。 像这样的东西可能有用

var form = $('form')[0];
var data = new FormData(form);

    $.ajax({
      url: 'upload.php',
      data: data ,
      processData: false,
      contentType: false,
      type: 'POST',
      success: function(data){
        alert(data);
      }
    });

上传和检查文件扩展名的正确逻辑

if (isset($_FILES['uploadFile']) && $_FILES['uploadFile']['size'] != 0)
{
    $extension = end(explode('.', $_FILES['uploadFile']['name']));

    if (!in_array($extension, $extensions))
    {
        $err[]='Wrong file format only .png , .gif, .jpg, .jpeg are accepted';
    }

    // Write code to upload image here
}
else
{
    // There was error while uploading image
    // $_FILES['uploadFile']['error'] gives error code
    //  
    // Possible errors
    // UPLOAD_ERR_OK: 0
    // UPLOAD_ERR_INI_SIZE: 1
    // UPLOAD_ERR_FORM_SIZE: 2
    // UPLOAD_ERR_NO_TMP_DIR: 6
    // UPLOAD_ERR_CANT_WRITE: 7
    // UPLOAD_ERR_EXTENSION: 8
    // UPLOAD_ERR_PARTIAL: 3
}

上传和检查文件扩展名的正确逻辑

if (isset($_FILES['uploadFile']) && $_FILES['uploadFile']['size'] != 0)
{
    $extension = end(explode('.', $_FILES['uploadFile']['name']));

    if (!in_array($extension, $extensions))
    {
        $err[]='Wrong file format only .png , .gif, .jpg, .jpeg are accepted';
    }

    // Write code to upload image here
}
else
{
    // There was error while uploading image
    // $_FILES['uploadFile']['error'] gives error code
    //  
    // Possible errors
    // UPLOAD_ERR_OK: 0
    // UPLOAD_ERR_INI_SIZE: 1
    // UPLOAD_ERR_FORM_SIZE: 2
    // UPLOAD_ERR_NO_TMP_DIR: 6
    // UPLOAD_ERR_CANT_WRITE: 7
    // UPLOAD_ERR_EXTENSION: 8
    // UPLOAD_ERR_PARTIAL: 3
}


这可能对你有帮助?这也是:在写这篇文章之前,我已经看到了这两个方面——不知道如何将建议的代码实现到我已经拥有的代码中。这可能会对你有所帮助?这也是:在写这篇文章之前,我已经看到了这两个方面——不知道如何将建议的代码实现到我已经拥有的代码中。很有趣。。。它现在通过了验证规则,但现在我的规则正在接受(请参阅原始帖子)$extension=end(explode('.',$u FILES['uploadFile']['name'])$扩展名=结束(分解('.',$_文件['uploadFile']['name']);如果(!in_array($extension,$extensions)){$err[]='只接受错误的文件格式.png、.gif、.jpg、.jpeg';}^像这样?-没有格式很难看到-我真的很感谢你的帮助Deepak@DavidPottrell我已经用格式粘贴了上面的代码。请向上滚动页面。有趣的。。。它现在通过了验证规则,但现在我的规则正在接受(请参阅原始帖子)$extension=end(explode('.',$u FILES['uploadFile']['name'])$扩展名=结束(分解('.',$_文件['uploadFile']['name']);如果(!in_array($extension,$extensions)){$err[]='只接受错误的文件格式.png、.gif、.jpg、.jpeg';}^像这样?-没有格式很难看到-我真的很感谢你的帮助Deepak@DavidPottrell我已经用格式粘贴了上面的代码。请把这一页向上滚动。恐怕运气不好!即使选择了有效图像,仍会触发验证规则。看来我的验证规则需要改进!你能粘贴你的验证规则吗?@DavidPottrell检查新的ans。我已经在上面发布了。使用
strtolower(路径信息($\u文件['uploadFile']['name'],路径信息扩展名))
而不是那种获取扩展名的老套方法。@DeepakAdhikari仍然不走运-它仍然显示文件扩展名规则-我已经查看代码很多次了,不明白为什么…恐怕不走运!即使选择了有效图像,仍会触发验证规则。看来我的验证规则需要改进!你能粘贴你的验证规则吗?@DavidPottrell检查新的ans。我已经在上面发布了。使用
strtolower(路径信息($\u文件['uploadFile']['name'],路径信息扩展名))
而不是那种获取扩展名的老套方法。@DeepakAdhikari仍然不走运-它仍然显示文件扩展名规则-我已经查看了代码很多次,不明白为什么…使用此代码会让我回到它触发第一个验证规则“请选择图像”的原始问题不过,它确实可以与其他验证规则一起使用:在PHP中尝试
print\r($\u文件)并在控制台中检查文件是否正在传输。数组([uploadFile]=>Array([name]=>pc-1207834.jpg[type]=>image/jpeg[tmp_name]=>/tmp/phpvG4w9s[error]=>0[size]=>657386))请使用此代码上载图像,让我回到触发第一条验证规则的原始问题“请选择一个图像”。-它与其他验证规则一起工作:在PHP中尝试
打印($\u文件);
并在控制台中检查文件是否正在传输。数组([uploadFile]=>Array([name]=>pc-1207834.jpg[type]=>image/jpeg[tmp\u name]=>/tmp/phpvG4w9s[error]=>0[size]=>657386))请上传一张图片。这是可行的!现在唯一的问题是成功页面出现在错误消息中。这是可行的!现在唯一的问题是成功页面出现在错误消息中。使用@imvain2的ajax,验证现在可以工作了。但是,成功提交后,页面应该重定向,而不是在er中重复ror消息容器?使用@imvain2的ajax,验证现在可以工作了。但是,在成功提交时,页面应该重定向,而只是在错误消息容器中进行响应?