Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Andrey Knupp Vital

Upload de Multiplos Arquivos PHP + jQuery

Recommended Posts

Código expresso, enviar vários arquivos para o servidor (hmm; "upload").

<!doctype html>
<html lang="pt-BR">
<head>
  <meta charset="UTF-8">
  <title>Upload</title>
</head>
<body>
  <script type="text/javascript" src="http://code.jquery.com/jquery-1.5.min.js"></script>
  <script type="text/javascript">
    $(document).ready(function(){
      var i = 0;
       $('#add').live('click', function (){
         if (i < 4)
          $('form').append('<input type="file" name="files[]" id="files[]" /><br />');


         i ++;
       });
    });
  </script>


  <div>
    <form method="POST" enctype="multipart/form-data">
      <h1>Upload</h1>
      <input type="file" name="files[]" id="files[]" />
      <input type="button" id="add" value="+">
      <input type="submit" value="Enviar" />
    </form>


    <?php
      if ($_SERVER['REQUEST_METHOD'] == 'POST') {
        $files = $_FILES['files'];
        $directory = 'uploads/';


        for($i = 0, $c = count($files); $i <= $c; ++ $i) {
          $upload = move_uploaded_file(
            $files['tmp_name'][$i], 
            $directory . $files['name'][$i]
          );
         }
      }
    ?>
  </div>
</body>
</html>

 

Hugs!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito bom, porém como ficaria para adicionar apenas imagens e salvar na BD?

Você nesse caso precisa validar a extensão do arquivo, a própria variável global $_FILES possui o nome do arquivo e o time MIME dele, eu faço da seguinte forma:

<?php 

/* Array com extensões permitidas */
$arr_extensoes = array('jpg', 'png', 'gif', 'bmp', 'svg');

$var_file = $_FILES['img']['name'];

/* O array pop remove o ultimo elemento e o retorna */ 
$extensao = array_pop(explode('.', $var_file));
$nome = implode('.', $var_file);

/* Validando a extensão */
if(!array_search($extensao, $arr_extensoes){ 
    echo "Extensão inválida!"; 
} 

?>

Peço desculpas se não poderia tirar a dúvida dele aqui, mais qualquer coisa é só mudar de local

Compartilhar este post


Link para o post
Compartilhar em outros sites

Legal o post do Andrey Knupp Vital; as considerações do fernandotholl também foram show de bola.

 

Se me permitem, gostaria também de dar uma contribuição... opinando sobre como gravar no BD, como nosso amigo CrazyLOL perguntou.

 

 

 

CrazyLOL, on 09 Jan 2013 - 21:20, said:snapback.png

Muito bom, porém como ficaria para adicionar apenas imagens e salvar na BD?

 

Sugiro que se você gravar as imagens no banco, faça-o armazenando-as numa pasta, e gravando os nomes dos arquivos no banco; na aplicação, onde elas forem exibidas, o PHP busca o caminho/resultado_da_query no banco.

 

Não aconselharia gravação das imagens inseridas dentro do Banco. A não ser que o conteúdo destas seja de alguma maneira restrito. Para ilustrar: aqui na empresa onde trabalho tenho uma intranet rodando; esta intranet possui acesso individual para cada colaborador, que por sua vez, tem acesso restrito única e exclusivamente aos seus holerites de pagamento. Como os holerites estão armazenados no banco, e o PHP que faz as pesquisas e consultas para puxar os arquivos da base e montá-los na hora, não existe risco de alguém procurar, tentar e acabar abrindo o holerite de outro colega. Se armazenasse um a um numa pasta, aí sim, teria este risco. Então é importante avaliar como será a gravação destes arquivos no banco; se não houver necessidade, gravar o nome do arquivo ao invés da imagem ou do arquivo propriamente dito, para evitar que com o tempo, com o volume de informações crescente, o banco torne-se lento ao ser acessado pelas aplicações.

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu gostei muito dessa solução do Andrey Knupp Vital andei googlando pela net áfora por algumas vezes e nunca encontrei o que queria que era:

 

Fazer upload de imagens com php em 1 input só, onde a pessoa escolhe as imagens e simplesmente clica em 'postar' ou 'enviar' de acordo com o caso...

 

O meu problema era na hora de fazer o upload no php, que mandava 1 arquivo só, coisa que tentaram resolver na net áfora, mais colocando vários input file e escolhendo arquivo por arquivo.

 

eu peguei o código do andrey Knupp Vital:

<?php

      if ($_SERVER['REQUEST_METHOD'] == 'POST') {
        $files = $_FILES['files'];
        $directory = 'uploads/';


        for($i = 0, $c = count($files); $i <= $c; ++ $i) {
          $upload = move_uploaded_file(
            $files['tmp_name'][$i], 
            $directory . $files['name'][$i]
          );
         }
      }

?>


E fiz algumas alterações básicas pra enviar os arquivos sem o uso do jquery:

<meta charset="UTF-8">
    <form method="POST" enctype="multipart/form-data">
      <h1>Upload</h1>
      <label style="font-weight:bold;"> Fotos: </label>
      <input type="file" name="files[]" id="files" multiple="multiple" />
      <input type="submit" id="enviar" value="Enviar" />
    </form>
<?php
    echo '<p style="font-size:22px;">
';

    $dir = 'ups/';
    $fotos = $_FILES["files"];
    $foto = count($fotos)-1;

    for($i = 0; $i <= $foto; $i++) {

     if(@move_uploaded_file($fotos['tmp_name'][$i], $dir . $fotos['name'][$i])) {

    echo 'Foto: ' . $fotos["name"][$i] . ' - Tamanho:  ' . $fotos["size"][$i] . ' kb - <b style="color:#CD0;">OK</b><BR /> ';

     }

    }

    echo '</p>';
?>

Com isso, eu consigo fazer o upload usando apenas o php, coisa que alguns meses atrás eu vi em alguns sites dizendo que era impossível fazer, que tinha que usar FlashPlayer e(ou) Javascript(Jquery) ou outros métódos.

 

Obs: Eu deixei só o básico no código pra que todo mundo possa usá-lo e incrementar da forma que quizer.

 

Tanks andrey Knupp Vital pela dica de ouro...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.