Javascript 带有PHP验证的AJAX文件上传
我有一个表单,它有两个文本字段和一个文件上载字段 验证完全由PHP处理,我使用一点Ajax通过数组(err[])检索PHP脚本生成的错误消息 我的问题是,我似乎无法让文件上传验证正常工作。(上传文件时,它总是说“仅接受错误的文件格式.png、.gif、.jpg、.jpeg”) 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
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,验证现在可以工作了。但是,在成功提交时,页面应该重定向,而只是在错误消息容器中进行响应?