P3rukao 0 Denunciar post Postado Fevereiro 4, 2009 Olá pessoal... eu estou com uma duvida "mixta" aqui... Eu preciso criar um sistema de upload de multiplas imagens... (parcialmente resolvido) Nesse sistema... deve haver um botão para adicionar mais campos de upload... caso necessário o envio de mais de uma imagem. <html> <head> <title>Multiplas imagens</title> <script type="text/javascript"> var my_div = null; var newDiv = null; function addElement() { var n = document.getElementById("qtdImgs").value; n++; newDiv = document.createElement("div"); newDiv.innerHTML = '<p style="height:25px" id="container_img_1"> <label for="arquivo'+n+'">Imagem(84x84): </label> <input id="arquivo'+n+'" name="arquivo'+n+'" type="file" size="40" value="arquivo'+n+'" /> </p> <p style="height:25px" id="container_img_1"> <label for="arquivog'+n+'">Imagem(420x420): </label> <input id="arquivog'+n+'" name="arquivog'+n+'" type="file" size="40" value="arquivo'+n+'" /> </p> <p> <label for="legenda'+n+'">Legenda: </label> <input id="legenda'+n+'" name="legenda'+n+'" type="text" maxlength="100" size="40" /> <input type="hidden" id="tipo'+n+'" name="tipo'+n+'" value="foto" /></p>'; // add the newly created element and it's content into the DOM my_div = document.getElementById("aqui"); document.form1.insertBefore(newDiv, my_div); } </script> </head> <body> <form id="form1" name="form1" action="recebe.php" method="post" enctype="multipart/form-data"> <p> <label for="nome">Nome: </label> <input type="text" name="nome" /> </p> <p> <label for="img">Imagem Descritiva: </label> <input type="hidden" name="MAX_FILE_SIZE" value="10000000" /> <input class="input_file" type="file" name="img" /> </p> <p class="but" id="aqui"> <input type="hidden" id="qtdImgs" name="qtdImgs" value="0" /> <input type="button" value="Nova Imagem" onClick="addElement()" id="btnNovaImg" /> </p> <p class="but"> <input name="submit" type="submit" value="Enviar" /> </p> </form> </body> </html> E... deve haver uma página que irá receber esses dados e enviar para um banco ou outra "coisa".. <? $c = $_POST['qtdImgs']; for ($i=0; $i <= $c; $i++) { $arquivo = $_FILES["arquivo".$i]; echo "NOME ".$i.": ".$arquivo["name"]."<br />"; } ?> Estou tentando aqui em casa.. mas não estou conseguindo pegar os dados do outro lado (na outra página) TT.TT Tentei usar ajax para gerar os campos de inputs dinamicamente... mas naum consegui... ainda não sei muito da lógica do "ajax"... » Alguem sabe onde estou errando?? » Alguem conhece algum script que faça o que estou precisando?? Compartilhar este post Link para o post Compartilhar em outros sites
novato_PHP 0 Denunciar post Postado Fevereiro 4, 2009 Olá Veja se te ajuda este outro tópico OU então... form_conta.php <form action="form_gera.php" method="post"> <b>Envio das fotos</b><br /> Qual a quantidade de imagens do Evento?<br /><br /> <input type="text" name="quantidade" size="5"/><br /> <input type="submit" value="OK"/> </form> form_gera.php <?php // Obtém quantidade enviada. Perceba que é verificado se foi fornecido um número inteiro, // caso contrário é usada uma quantidade padrão, 5. $Quantidade = (isset($_POST['quantidade']) && is_int(intval($_POST['quantidade']))) ? (int)$_POST['quantidade'] : 5; // Abre formulário de upload echo '<form action="processa_upload.php" method="POST" enctype="multipart/form-data">'; echo '<b>Envio das fotos</b><br />'; // Imprime os campos para upload, de acordo com a quantidade pedida for($i = 1; $i <= $Quantidade; ++$i) { echo 'Foto #' . $i . ': <input type="file" name="fotos[]" /><br/>'; } // Fecha formulário echo '<br /><input type="submit" value="OK"/>'; echo '</form>'; ?> processa_upload.php <?php // Pasta de destino das fotos $Destino = './eventoxyz/fotos/'; // Obtém dados do upload $Fotos = $_FILES['fotos']; // Contagem de fotos enviadas $Conta = 0; // Itera sobre as enviadas e processa as validações e upload for($i = 0; $i < sizeof($Fotos); $i++) { // Passa valores da iteração atual $Nome = $Fotos['name'][$i]; $Tamanho = $Fotos['size'][$i]; $Tipo = $Fotos['type'][$i]; $Tmpname = $Fotos['tmp_name'][$i]; // Verifica se tem arquivo enviado if($Tamanho > 0 && strlen($Nome) > 1) { // Verifica se é uma imagem if(preg_match('/^image\/(gif|jpeg|jpg|png)$/', $Tipo)) { // Caminho completo de destino da foto $Caminho = $Destino . $Nome; // Tudo OK! Move o upload! if(move_uploaded_file($Tmpname, $Caminho)) { echo 'Foto #' . ($i+1) . ' enviada.<br/>'; // Faz contagem de enviada com sucesso $Conta++; } else // Erro no envio { // $i+1 porque $i começa em zero echo 'Não foi possível enviar a foto #' . ($i+1) . '<br/>'; } } } } if($Conta) // Imagens foram enviadas, ok! { echo '<br/>Foi(am) enviada(s) ' . $Conta . ' foto(s).'; } else // Nenhuma imagem enviada, faz alguma ação { echo 'Você não enviou fotos!'; } ?> OBS: Usei este código uma fez para um sistema que fiz.... Retirado deste link Compartilhar este post Link para o post Compartilhar em outros sites
P3rukao 0 Denunciar post Postado Fevereiro 4, 2009 lgl..... tá bem bacana esse script aí... eu dei uma adaptada... e ficou "supimpa" ;) O único problema eh que depois dessa adaptada... eu não estou conseguindo pegar o valor do numero total de dados dos inputs com o nome de arquivo[]... tipo... na segunda pagina, onde eu pego os valores da primeira.... eu não consigo pegar o valor do numero total de dados que tem no array enviado... que seria usando o sizeof()... Mas aqui naum tá funfando... =$ Compartilhar este post Link para o post Compartilhar em outros sites
novato_PHP 0 Denunciar post Postado Fevereiro 4, 2009 Posta seu código aí para damos uma analisada... http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites
P3rukao 0 Denunciar post Postado Fevereiro 4, 2009 Eh o mesmo que eu postei mais acima (praticamente): PAGINA INICIAL <html> <head> <title>Multiplas imagens</title> <script type="text/javascript"> function adiciona_Upload() { var n = document.getElementById("qtdImgs"); var p = document.createElement("p"); p.setAttribute("style", "height:25px"); var input = document.createElement("input"); input.setAttribute("name", "arquivo[]"); input.setAttribute("type", "file"); input.setAttribute("size", "40"); var div = document.getElementById("mais_Upload"); p.appendChild(input); div.appendChild(p); ++n; n.value = n; } </script> </head> <body> <form id="form1" name="form1" action="recebe2.php" method="post" enctype="multipart/form-data"> <div id="mais_Upload" style="background:#acd;"></div> <p class="but" id="aqui"> <input type="hidden" id="qtdImgs" name="qtdImgs" value="0" /> <input type="button" value="Nova Imagem" onClick="adiciona_Upload()" id="btnNovaImg" /> </p> <p class="but"> <input name="submit" type="submit" value="Enviar" /> </p> </form> </body> </html> ESSE EH O SEUGUNDO SCRIPT <? $Fotos = $_FILES['arquivo']; echo "Tamanho Total de imagens: ".count($Fotos)."<br />"; for($i = 0; $i < sizeof($Fotos); $i++) { // Passa valores da iteração atual $Nome = $Fotos['name'][$i]; $Tamanho = $Fotos['size'][$i]; $Tipo = $Fotos['type'][$i]; $Tmpname = $Fotos['tmp_name'][$i]; echo 'Foto #' . ($i) . ' ['.$Nome.'] enviada.<br/>'; } ?> Compartilhar este post Link para o post Compartilhar em outros sites
P3rukao 0 Denunciar post Postado Fevereiro 4, 2009 Eu tentei o seguinte tbm... soh pra tirar o peso da consiencia!!! Lah no formulário, eu substituí todo o conteudo por isso aqui: <input type="file" name="arquivo[]" value="dfdgdgf" /> <input type="file" name="arquivo[]" value="rtyrtb" /> <input type="file" name="arquivo[]" value="dfwerwdgdgf" /> E na segunda página: $Fotos = $_FILES['arquivo']; echo "Tamanho Total de imagens: ".count($Fotos)."<br />"; for($i = 0; $i < sizeof($Fotos); $i++) { // Passa valores da iteração atual $Nome = $Fotos['name'][$i]; $Tamanho = $Fotos['size'][$i]; $Tipo = $Fotos['type'][$i]; $Tmpname = $Fotos['tmp_name'][$i]; echo 'Foto #' . ($i) . ' ['.$Nome.'] enviada.<br/>'; } O erro é o mesmo: sempre aparece como se tivessem 5 arquivos; Eu substituí tbm os tipos de FILE para TEXT... e alterei lah na seguna pagina para $_POST onde era $_FILES... daí funciona beleza... conta certinho.... Só posso concluir que o erro está no inputFILE... mas. » Por que que está dando esse erro... e » O que eu faço pra ajeitar??? Compartilhar este post Link para o post Compartilhar em outros sites
novato_PHP 0 Denunciar post Postado Fevereiro 4, 2009 Cara troca o arquivo recebe2.php por este aqui ó: $Fotos = $_FILES['arquivo']; echo "Tamanho Total de imagens: ".count($Fotos)."<br>"; for($i = 0; $i < sizeof($Fotos['name']); $i++) { // Passa valores da iteração atual $Nome = $Fotos['name'][$i]; $Tamanho = $Fotos['size'][$i]; $Tipo = $Fotos['type'][$i]; $Tmpname = $Fotos['tmp_name'][$i]; echo 'Foto #' . ($i) . ' ['.$Nome.'] enviada.<br/>'; } Explicação: Cada item passado é um array com 5 posições dá um print_r($Fotos) que você vai entender... falou... Compartilhar este post Link para o post Compartilhar em outros sites
P3rukao 0 Denunciar post Postado Fevereiro 5, 2009 Ahhh... bixo, agora eu saqueeei.... http://forum.imasters.com.br/public/style_emoticons/default/yay.gif eu tava pedindo para exibir o tamanho do array $Fotos... que por padrão já tem os seus elementos (name, size, type, etc...) que pertencem ao inputFile... não me liguei mesmo nisso... :wacko: novato, tu num sabe o quanto me ajudou com esse "pequeno detalhe de programação" kra... vlw msm http://forum.imasters.com.br/public/style_emoticons/default/joia.gif Grato pela ajuda! ;) Compartilhar este post Link para o post Compartilhar em outros sites