Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
fala galera belza? queria uma ajuda para a seguinte lógica: tenho uma tabela onde gravo um documento e neste documento tenho que colocar 3 arquivos(arquivo, arquivo2, arquivo3) o que preciso é fazer o upload dos tres arquivos e gravar em cada campo o nome deste arquivo, seria simples fazer um upload multiplo c/ arraray tipo arquivo[ ] e upar todos de uma vez, mais nao posso fazer assim pq tenho q gravar cada nome individualmente, então fiz isto:
//Arquivos passados do form
$documento_numero = $_POST["documento_numero"]
$arquivo_pub = $_FILES["arquivo1"]["name"];
$arquivo_org = $_FILES["arquivo2"]["name"];
$arquivo_nf = $_FILES["arquivo3"]["name"];
//Upload
set_time_limit(0);//Elimita o limite de tempo do php_timeout();
$diretorio = "../pdf"; //Diretório
for($i=0; $i<=3; $i++) {
//Nomes dos campos files (prefixo + numero crescente)
$id_arquivo = "arquivo".$i; //resultado do loop
$nome_arquivo = $_FILES[$id_arquivo]["name"]; //aqui ele nomeia cada campo para (arquivo1, arquivo2, arquivo3)
$arqv_temporario = $_FILES[$id_arquivo]["tmp_name"];
//Upload
if(move_uploaded_file($arqv_temporario, "$diretorio/$nome_arquivo")) {
echo "Upload concluído: <b>$nome_arquivo</b><BR>";
}else{
echo "Erro no arquivo <b>$nome_arquivo</b><BR>";
}
}
$gravaRegistro = mysql_query("INSERT INTO publicacoes (documento_numero, arquivo_pub, arquivo_org, arquivo_nf) VALUES('$documento_numero', '$arquivo_pub', '$arquivo_org', '$arquivo_nf')")or die(mysql_error());
for($i=0; $i<=3; $i++) {...
que iria ter 3 campos ele só dar certo se eu upar os 3 arquivos de uma vez, mais o problema é q o usuario pode querer upar só 1, ou 2 nao obrigatoriamete os 3, entenderam?
como faria para ele entender que só é pra upar os campos que forem passados;
É só usar
<input type="file" name="arquivo[]" />
Ao invés de $_FILES['arquivo1'], $_FILES['arquivo2'], ..., é uma array multidimensional $_FILES['arquivo'], onde $_FILES['arquivo'][0] é o primeiro, $_FILES['arquivo'][1] o segundo, e assim por diante.
Aí, você usa um foreach para processar os arquivos. Se foram enviados 1, 2, 3 ou mais, não importa.
>
É só usar
<input type="file" name="arquivo[]" />
Ao invés de $_FILES['arquivo1'], $_FILES['arquivo2'], ..., é uma array multidimensional $_FILES['arquivo'], onde $_FILES['arquivo'][0] é o primeiro, $_FILES['arquivo'][1] o segundo, e assim por diante.
Aí, você usa um foreach para processar os arquivos. Se foram enviados 1, 2, 3 ou mais, não importa.
eu entendi como vc falou mais o problema e que preciso gravar no banco cada campo separadamente tipo assim:
arquivo 1 > gravar na coluna: nota fiscal
arquivo 2 > gravar na coluna: documento original
arquivo 3 > gravar na coluna: documento copia
entao como dizer para gravar em cada coluna seu respectivo file se ele for multidimentisional, tipo se o cara fazer upload apenas do arquivo 1 como foi dizer para ele gravar na coluna certa? entendeu?
não sei se entendi bem mas se são tres campos separados não precisa do loop tu pode pegar os campos separados e fazer o upload.
não sei se entendi bem mas se são tres campos separados não precisa do loop tu pode pegar os campos separados e fazer o upload.
mais pra gravar separado precisaria duplicar o script? como dizer pra gravar os tres de uma unica vez ou gravar apenas 2
pelo que entendi agora tu vai precisar elaborar uma logica aí senão não vai funcionar do jeito esperado. exemplo se o usuario mandar só uma foto ela obrigatoriamente vai ser nota fiscal? ou mesmo o usuairo mandando só uma foto ela pode ser para qualquer um dos três tipos? se for a primeira opção é só contar a maior array. agora se for a segunda hipotese aí é melhor ter um input para cada tipo e no upload verifica se o campo contem o arquivo. aí manda cada um para um lugar.
pelo que entendi agora tu vai precisar elaborar uma logica aí senão não vai funcionar do jeito esperado. exemplo se o usuario mandar só uma foto ela obrigatoriamente vai ser nota fiscal? ou mesmo o usuairo mandando só uma foto ela pode ser para qualquer um dos três tipos? se for a primeira opção é só contar a maior array. agora se for a segunda hipotese aí é melhor ter um input para cada tipo e no upload verifica se o campo contem o arquivo. aí manda cada um para um lugar.
pelo que entendi agora tu vai precisar elaborar uma logica aí senão não vai funcionar do jeito esperado. exemplo se o usuario mandar só uma foto ela obrigatoriamente vai ser nota fiscal? ou mesmo o usuairo mandando só uma foto ela pode ser para qualquer um dos três tipos? se for a primeira opção é só contar a maior array. agora se for a segunda hipotese aí é melhor ter um input para cada tipo e no upload verifica se o campo contem o arquivo. aí manda cada um para um lugar.
assim esta o form:
Original=> <input type="file" name="arquivo1">
Nota fiscal=> <input type="file" name="arquivo2">
PDF=> <input type="file" name="arquivo3">
quando for gravar no banco a tabela tem um campo pra cada um
campo_original | campo_notafiscal | campo_pdf
cada campo recebe o seu arquivo
o problema é só no upload
resolvido, fiz assim:
//Nomeia os arquivos enviados
foreach(array($_FILES["arquivo"]["name"]) as $arquivo){
for($i = 0; $i < count($arquivo); $i++){
$arquivo_pub = $arquivo[0];
$arquivo_org = $arquivo[1];
$arquivo_nf = $arquivo[2];
}
}
e o upload fiz o multidmensional, valeu galera!
Isso vai dar problema. Se ele só enviar o segundo arquivo, o sistema vai colocar como primeiro item [0].
não sei se entendi bem mas se são tres campos separados não precisa do loop tu pode pegar os campos separados e fazer o upload.