Fóruns sobre PHP, JavaScript, HTML, MySQLi, jQuery, Banco de Dados, CSS


Moderador: web

 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 237
Localização: Florianópolis/SC
Contato:

Upload total

04-07-2007 04:58

upload de vários arquivos, quantos desejar, renomeando os arquivos para não repetir os nomes, gravar os arquivos na tabela, aceitar somente algumas extensões de arquivos... isto é o UPLOAD TOTAL BY IMPOSSIVEL.

bem eu precisa de um script para upload de umas imagens, os que encontrei não satisfaziam totalmente minha necessidade, então fui mudando uns e outros e adptei este que vou postar aqui.

esta tudo comentado, muito facil de entender, pode enviar qtos arquivos quiser, tem opção para acrescentar mais campos no formulario.

tem opção para verificar e aceitar somente as extensões que você desejar, copia o arquivo para a pasta que você quer e grava o nome do mesmo em uma tabela.

é gerado um nome especial para o arquivo, com uma combinação do nome original e um calculo com milisegundos, desta forma o nome nao se repete, nem que você envie mil vezes o mesmo arquivo, até no mesmo momento, pois é baseados em milisegundo e isto é muito pouco tempo.

agora chega de papo, vou posta todo o script que funciona com apenas um arquivo .php, só peço que não retire os créditos para tbm não retirar meu ânimo.

upload.php

<html> <head> <title>Upload Total - by -=|Î/|/|Þا§ÎVË£|=-</title> </head> <body>   <!-- /*Créditos para -=|Î/|/|Þا§ÎVË£|=- mais informações entre em contato atraves do site http://www.rindomuito.com */ -->   <? $acao = $_GET['acao'];   if ($acao == 'enviar'){ //começa a função para enviar a foto   /*Créditos para -=|Î/|/|Þا§ÎVË£|=- mais informações entre em contato atraves do site http://www.rindomuito.com */   //require_once("conecta.php"); //chamamos um arquivo com a conexão ao banco de dados, ou o comando para conectar ao bando de dados.   // ou troque por...   //$conexao = mysql_connect("localhost", "login", "senha") or die(mysql_error()); //$db = mysql_select_db("bancodedados");   $pasta = "fotos"; //nome da pasta onde a foto devera ser copiada, se for a mesma deste arquivo, entao use: $pasta = ".";   $qts = count($_FILES['foto']['name']); //importante, conta qtos arquivos foram enviados pelo form, usado no FOR abaixo $qtsok=0; //so pra contar qtas imagens foram copiadas $qtsnao=0; //so pra contar qtos arquivos não foram copiadas   for($i=0; $i < $qts; $i++){ //cria uma repetição para cada arquivo que foi enviado   $nome=$_FILES ['foto']['name'][$i]; // so mantem este $nome pq é usado para exibir o nome do arquivo na confirmação qdo manipulado   $tmpname=$_FILES ['foto']['tmp_name'][$i]; //pega o nome temporario do arquivo, que esta no servidor   $tipo = explode(".", $_FILES['foto']['name'][$i]); //pega o nome e a extensão do arquivo   $tamanho=$_FILES ['foto']['size'][$i]; //pega o tamanho do arquivo, em bytes, bom caso vc deseje limitar o tamanho máximo permitido   $trans = array(' ' => '','<' => '','>' => '','=' => '','%' => ''); //caso tenha espaços no nome ou algum caractere que possa prejudicar o funcionamento, retiramos ele.   if ($tamanho > 0 && strlen($nome) > 1 ){ //condição para ignorar os campos vazios enviados no formulario. //Se deseja limitar o tamanho use: //if($tamanho > 0 && strlen($nome) > 1 && $tamanho < 20000){ //ex. com maximo de 2mb   /* como eu desejo somente foto, vou fazer uma verificação, voce pode seguir a logica e inserir as extensões que deseja aceitar, e elas serão copiadas */   if ($tipo[1] == "jpg" OR $tipo[1] == "JPG" ){ //verifica se o arquivo tem a extensão .jpg ou .JPG (vamos deixar minusculo depois)   /* agora vou trocar o nome da imagem para que nao se repita, pode enviar 50x a mesma imagem de uma vez, que ela nao vai ter o mesmo nome vou apenas acrescenter um codigo gerado baseado nos milisegundos atuais, ex nome-8s5sd52ds5.jpg */   $renomear = uniqid("".$tipo[0]."-").".".$tipo[1]; //aqui gera o codigo que nao se repete. EX. fototal.jpg = fototal-8s5sd6s2s   //$renomear = $tipo[0]."-".md5(uniqid(rand(), true)).".".$tipo[1]; //este cria um nome mais seguro, porem fica muito grande - escolha qual mais te agrada :)   $quasepronto = strtolower($renomear); //aqui trocamos todo o nome do arquivo para minusculo, inclusive a extensão   $novonome = strtr($quasepronto, $trans); //para retirar espaços e caracteres que possam prejudicar o script de algum modo.   if(@move_uploaded_file($tmpname,$pasta."/".$novonome)){ //aqui copiamos o arquivo para a pasta, ja com o novo nome que nao se repete   /* quero inserir o nome do arquivo em uma tabela, entao a operação abaixo vai inserir o novo nome na tabela. ex. tabela IMAGEM, no campo FOTO */   // tabela é o nome da tabela // campo é onde o nome será armazenado $sql = mysql_query("INSERT INTO tabela(campo) VALUES('$novonome')") or die("Erro no SQL: ".mysql_error()); /*Insere o nome da figura no banco de dados*/   echo "<font color='#008000'>Imagem <b><a href='$pasta/$novonome' target='_blank'>$nome</a></b> enviada com Sucesso!</font><br>"; //recado qdo a imagem foi enviado com sucesso   $qtsok++; //para saber quantos aquivos foram copiadas com sucesso   }else{ //final da condição para copiar o arquivo, se não copiou mostra a msg abaixo   echo"Erro ao enviar a imagem <b>$nome [Codigo:".$_FILES['foto']['error'][$i]."]</b><br>"; //avisa e mostra qual o erro qdo nao consegue copiar a imagem   $qtsnao++; //para saber qtos arquivos resultaram em erro.   } //final da condição qdo não consegue copiar a imagem   }else{ //final da função que verifica se o arquivo tem a extensão .jpg ou .JPG   echo "<font color='#FF0000'>O arquivo <b>$nome</b> não tem o formato .jpg e não foi aceito.</font><br>";   $qtsnao++; //para saber qtos arquivos geraram erro   } //final qdo o arquivo não é .jpg ou .JPG ou a(s) extensão(sões) que você escolheu   } //final da condição que ignora os campos vazios.   } //final da repetição para cada arquivo enviado   /* aqui vamos informar o status do upload */   echo "<BR><b>$qts Campos recebidos<BR>"; //qtos campos foram enviados no form   if ($qtsok != 0)echo "<font color='#008000'>$qtsok Imagens enviadas com sucesso</font><BR>"; //qtos arquivos estavam ok   if ($qtsnao!= 0)echo "<font color='#FF0000'>$qtsnao Arquivos com erro</font><BR>"; //qtos arquivos não se encaixavam no padrão   $vazio=($qts-$qtsok-$qtsnao); //ja que estamos aqui vamos ver qts campos vieram vazio   if($vazio!=0)echo "$vazio Campos estavam vazios</b><BR>"; //informa a qtdade de campo vazio   echo "<a href=\"javascript:history.go(-1)\">Voltar</a> <BR><BR>"; //um link para voltar, as vezes o cara quer enviar mais arquivos, ou direciona pra onde vc quiser   }else{/* fecha acao=enviar*/ ?>   <script> function cria(quantos) { for(var i=0; i < quantos; i++) { // cria o input novo = document.createElement('input'); // define o tipo do input novo.setAttribute('type', 'file'); // define o name do input novo.setAttribute('name', 'foto[]'); // input criado document.getElementById('campos').appendChild(novo); } } </script>   <form name="frm_upload" method="post" action="<?echo $PHP_SELF;?>?acao=enviar" enctype="multipart/form-data"> <table width="50%" border="0" cellspacing="0" cellpadding="0"> <tr><td height="40" colspan="2"> <font face="Arial" size="2"><b>   ENVIAR ARQUIVOS   </b></font></td> </tr>   <tr> <td height="30" width="77%"> <BR> <input type="file" name="foto[]"><BR> <input type="file" name="foto[]"><BR> <input type="file" name="foto[]"><BR> <input type="file" name="foto[]"><BR> <input type="file" name="foto[]"><BR>   <div id="campos" style="width:100px;"></div>   </td> </tr> <tr><td height="30" colspan="2">   <!-- id é o número de inputs a ser criado //--> <input type="button" value="adicionar campos" id="3" onclick="cria(this.id)">   <input type="submit" name="cadastrar" value="Enviar >>">   </td></tr> </table>   </form> <?}/* */?>   <?php // se usou o modo de conexão sem include ( $conexao = ... // libere a linha abaixo para o fechamento da conexão ou feche a sua conexão do include // mysql_close($conexao); ?>   <BR>-=|Î/|/|Þا§ÎVË£|=- <BR><a href="http://www.rindomuito.com" title="www.rindomuito.com" target="_blank">http://www.rindomuito.com</a> </body> </html>

Pronto, você só precisa ajustar a conexão com o banco de dados para inserir o nome do arquivo na tabela, se quise aproveitar o script e não usar esta função, apenas retire o

require_once("conecta.php"); e $sql = mysql_query("INSERT INTO imagem(foto) VALUES('$novonome')") or die("Erro no SQL: ".mysql_error());

Acerte a pasta para onde deve copiar os aquivos, é escencial que o nome esteja correto.

DIVIRTA-SE, qualquer dúvida poste aqui no fórum!
1
MIDZ.com.br
http://www.midz.com.br
Soluções Web
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17670
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Upload total

04-07-2007 07:43

TESTADO E APROVADO
0
A melhor hospedagem para o seu site HostGator!

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado