Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá pesooal,
preciso de um apoio para fazer um upload multiplo, onde serão 6 inputs e preciso que o nome de cada imagem seja registrada em seu respectivo campo da tabela....
estou tentando assim:
<li><span><input type="file" value="" name="img1"></span></li>
<li><span><input type="file" value="" name="miniatura1"></span></li>
<li><span><input type="file" value="" name="miniatura2"></span></li>
<li><span><input type="file" value="" name="miniatura3"></span></li>
<li><span><input type="file" value="" name="miniatura4"></span></li>
<li><span><input type="file" value="" name="miniatura5"></span></li>
<li><span><input type="file" value="" name="miniatura6"></span></li>
<?php
error_reporting(0);
//require "../../../../sessions/session.php";
require "../../../../oraculo/conecta/conecta.php";
$nome_produto = $_POST['nome_produto'];
$custo = $_POST['custo'];
$categoria = $_POST['categoria'];
$btn_pagamento = $_POST['btn_pagamento'];
$destino = '../../../../produtos/fotos-produtos/';
$file_name1 = $_FILES['img1']['name'];
$file_type1 = $_FILES['img1']['type'];
$file_size1 = $_FILES['img1']['size'];
$file_tmp_name1 = $_FILES['img1']['tmp_name'];
$error1 = $_FILES['img1']['error'];
$file_name2 = $_FILES['miniatura1']['name'];
$file_type2 = $_FILES['miniatura1']['type'];
$file_size2 = $_FILES['miniatura1']['size'];
$file_tmp_name2 = $_FILES['miniatura1']['tmp_name'];
$error2 = $_FILES['miniatura1']['error'];
switch($file_type1){
case 'image/png': $arq ='.png';break;
case 'image/jpeg': $arq ='.jpg';break;
case 'image/gif': $arq ='.gif';break;
case 'image/bmp': $arq ='.bmp';break;
case 'image/PNG': $arq ='.PNG';break;
case 'image/JPEG': $arq ='.JPEG';break;
case 'image/GIF': $arq ='.GIF';break;
case 'image/BMP': $arq ='.BMP';break;
}
move_uploaded_file($file_tmp_name1,$destino.$file_name1);
move_uploaded_file($file_tmp_name2,$destino.$file_name2);
$cad_produto ="
INSERT INTO
produtos(
nome_produto,
custo,
categoria,
btn_pagamento,
img1,
miniatura1,
miniatura2,
miniatura3,
miniatura4,
miniatura5,
miniatura6
)
VALUES(
'$nome_produto',
'$custo',
'$categoria',
'$btn_pagamento',
'$file_name1',
'$file_name2',
'$miniatura2',
'$miniatura3',
'$miniatura4',
'$miniatura5',
'$miniatura6'
)";
$rs_cad_produto = mysql_query($cad_produto);
?>
Mas não funciona... as imagens não são salvas na pasta dessa forma... alguém compreende???
Primeiro, é importante conhecer o HTML como um todo. Você pode usar o input file como um array:
<input type="file" value="" name="miniatura[]">
<input type="file" value="" name="miniatura[]">
<input type="file" value="" name="miniatura[]">
<input type="file" value="" name="miniatura[]">
Pode ler mais nesse tópico:
Além do mais, seu código move apenas duas imagens....
Já tentei dessa forma.. existe alguma incompatibilidade no envio de upload com ajax?
Preciso implementar com post ajax... mas não deu.. =/
Sim, algumas. Alguns navegadores bloqueiam por segurança, outros já são mais liberais. No caso de um bloqueio, vale a velha artimanha de abrir um "iframe invisível" e enviar por lá.
Há anos atrás eu utilizei o código abaixo:
$(this).delegate('form' , 'submit' , function() {
var src = 'http://site.com.br/submit';
var textArea = $(this).find('.message');
var message = textArea.val();
if(typeof window.FormData === 'undefined') {
var form = $(document.createElement('form'));
form.css({'display': 'none'});
form.attr('method' , 'post');
form.attr('action' , src);
form.attr('enctype' , 'multipart/form-data');
var inputMensagem = $(document.createElement('input'));
inputMensagem.attr('name' , 'message');
inputMensagem.attr('value' , message);
form.append(inputMensagem);
$(this).find('.file').each(function() {
form.append($(this));
});
var iframe = $(document.createElement('iframe'));
//"hide" the iframe, setting display to none may prevent it from loading
iframe.css({
'width': '0px',
'height': '0px',
'border': '0'
});
iframe.attr('id' , 'uploadIframe');
iframe.attr('name' , 'uploadIframe');
$('body').append(iframe);
$('body').append(form);
window.frames['uploadIframe'].name = 'uploadIframe';//ie sucks. by: micomix
//set the form target to the iframe id
form.attr("target" , 'uploadIframe').submit();
form.remove();
iframe.load(function() {
/** retorna o valor do iframe **/
var retorno = $(this).contents().find('body').html();
if(retorno != null && retorno != '') {
alert('Mensagem enviada');
}
});
} else {
var form_data = new FormData(); // Creating object of FormData class
form_data.append("message" , message);
$(this).find('.file').each(function() {
form_data.append("anexo[]" , $(this).prop("files")[0]);// Getting the properties of file from file field
});
$.ajax({
url: src,
type: 'post',
cache: false,
contentType: false,
processData: false,
data: form_data,
success: function(retorno) {
alert('Mensagem enviada');
},
error: function (data) {
alert('Não foi possível enviar a sua mensagem. Tente novamente mais tarde');
stopLoading();
}
});
}
});
Caso o browser permitia enviar por ajax, era enviado. Caso não, era criado o iframe. O código é bem simples, em jQuery e desatualizado (visto uso de .delegate()).Era um formulário com um campo textarea.message e podendo ter N input.file.
Outra ideia é usar uma biblioteca pronta, existem milhares por ai. No link abaixo você pode escolher entre 17 diferentes:
alguem dá uma luz aí..? :D :wacko: