Ir para conteúdo
Fórum Script Brasil
  • 0

multiplo upload


vini_loock

Pergunta

Olá.

Eu estou fazendo um sistema de upload multiplo, já fiz a class, funciona perfeitamente, mas o problema é que o numero de campos pode variar muito, tem um botão de adicionar campo, e enquanto a pessoa não cansar de adicionar campos ela vai poder.

O problema que eu to tendo é na hora de instanciar o objeto, porque eu preciso que seja "dinamico", ou seja, cada upload tera um numero próprio.

Exemplo:

O usuario adicionou 5 campos, quando ele enviar meu php deveria ficar +/- assim:

$upload1 = new Upload();
$upload1->input = "img[1]";
$upload1->local = "upload/";
$upload1->moveUploadedFile();

$upload2 = new Upload();
$upload2->input = "img[2]";
$upload2->local = "upload/";
$upload2->moveUploadedFile();

...
...

$upload5 = new Upload();
$upload5->input = "img[5]";
$upload5->local = "upload/";
$upload5->moveUploadedFile();
Mas eu não estou conseguindo. Segue os códigos. a página do formulario e que chama a class.
<?php include ("Upload.class.php"); ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>
<body>

<form enctype="multipart/form-data" action="" method="post">
    <input type="hidden" name="act" value="submit" /><br />
    <input type="file" name="img[]" /><br />
    <input type="file" name="img[]" /><br />
    <input type="file" name="img[]" /><br />
    <input type="file" name="img[]" /><br />
    <input type="submit" value="Upload" />
</form>

<?php
if(isset($_POST['act']) && $_POST['act'] == 'submit'){
        $upload = new Upload();
        $upload->input = "img";
        $upload->local = "upload/";
        $upload->moveUploadedFile();
}
?>
</body>
</html>
A class
<?php
    class Upload{
        var $input;
        var $local;
        var $msg;
        
        function limparCampos($texto){
            $especiais = array("á", "à", "ã", "â", "À", "Á", "Â", "Ã",
                         "é", "è", "ê", "È", "É", "Ê",
                         "í", "ì", "î", "Í", "Ì", "Î",
                         "Ô", "Õ", "Ó", "Ò", "ó", "ò", "ô", "õ",
                         "Ú", "Ù", "Ü", "ü", "ú", "ù",
                         "ç", "Ç",
                         " ", ",", "/");
            $normais   = array("a", "a", "a", "a", "A", "A", "A", "A",
                         "e", "e", "e", "E", "E", "E",
                         "i", "i", "i", "I", "I", "I",
                         "O", "O", "O", "O", "o", "o", "o", "o",
                         "U", "U", "U", "o", "o", "o",
                         "c", "C",
                         "", "", "");
            
            $final = str_replace($especiais, $normais, $texto);
            return $final;
        }
        
        function moveUploadedFile(){
            $campo = $_FILES[$this->input];
            $name  = $campo['name'];
            $tmp_n = $campo['tmp_name'];
            
            $nome = $this->limparCampos($name);
            
            
            while(file_exists($this->local.$nome)){
                $num  = rand(0, 999);
                $exp  = explode(".", $nome);
                $nome = $exp[0].$num.".".$exp[1];
            }
            
            $endereco = $this->local.$nome;
            
            if(move_uploaded_file($tmp_n, $endereco)){
                $this->msg = "Arquivo enviado com sucesso: <b>".$nome."</b>";    
            }else{
                $this->msg = "<center><h1>Ocorreu um erro.</h1>Tente novamente.</center>";    
            }
        }
    }
?>

Eu já tentei algumas formas com while e for, estou vendo a possibilidade com foreach.

A unica que deu certo foi assim:

Defini um numero para cada input.

Na hora de intanciar, eu fiz cada um com um numero, igual ao que eu passe ai em cima.

Mas.... não posso fazer isso, como expliquei.

Vlw.

Vinicius

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

suponho que ai vai ter um bd não é?

Eu colocaria um campo:

CREATE TABLE IF NOT EXISTS `multiup` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
)

Isso ai é supondo que a sua tabela se chame multiup, então, automaticamente ao gerar cada upload o proprio sistema geraria uma ID diferente, depois você pegaria ela do BD selecionando!

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Desculpem, mas foi preciso o up.

Eu refiz toda a class, deixei o mais simples possivel, e não funcionou.

<?php
    class Upload{
        function limparCampos($texto){
            $especiais = array("á", "à", "ã", "â", "À", "Á", "Â", "Ã",
                         "é", "è", "ê", "È", "É", "Ê",
                         "í", "ì", "î", "Í", "Ì", "Î",
                         "Ô", "Õ", "Ó", "Ò", "ó", "ò", "ô", "õ",
                         "Ú", "Ù", "Ü", "ü", "ú", "ù",
                         "ç", "Ç",
                         " ", ",", "/");
            $normais   = array("a", "a", "a", "a", "A", "A", "A", "A",
                         "e", "e", "e", "E", "E", "E",
                         "i", "i", "i", "I", "I", "I",
                         "O", "O", "O", "O", "o", "o", "o", "o",
                         "U", "U", "U", "o", "o", "o",
                         "c", "C",
                         "", "", "");
            
            $final = str_replace($especiais, $normais, $texto);
            return $final;
        }
        
        function upload(){
            $pasta    = 'upload/';    
            $msg      = array();
            $arquivos = array(array());
            
            foreach($_FILES as $key=>$info){
                foreach($info as $key=>$dados){
                    for($i = 0; $i < sizeof($dados); $i++){
                        $arquivos[$i][$key] = $info[$i][$key];
                    }
                }    
            }
            
            $i = 1;
            
            foreach($arquivos as $file){
                if($file['name'] != ''){
                    $tmp_name = $file['tmp_name'];
                    $name     = $file['name'];
                    $nome     = limpaCampos($name);
                    $arquivo  = $pasta.$nome;
                    
                    if(move_uploaded_file($tmp_name,$arquivo)){
                        $msg[$i] = sprintf("O upload do arquivo $s foi realizado com sucesso",$i);    
                    }else{
                        $msg[$i] = sprintf("O upload do arquivo $s falhou",$i);    
                    }
                }else{
                    $msg[$i] = sprintf("O campo $s não foi preenchido",$i);
                }
                $i++;
            }
            
            foreach($msg as $e){
                sprintf("%s<br />", $e);    
            }
            
        }
        
    }
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>
<body>

<form method='POST' enctype='multipart/form-data'>
    Arquivo1: <input type='file' name='arquivo[]'><br>
    Arquivo2: <input type='file' name='arquivo[]'><br>
    Arquivo3: <input type='file' name='arquivo[]'><br>
    Arquivo4: <input type='file' name='arquivo[]'><br>
    <br>
    <input type='submit' value='Enviar' name='enviar'>
</form>

<?php
	include ("Upload.class.php");

	$upload = new Upload;
	$upload->upload();
?>
</body>
</html>
Eu fiz baseado em um script que encontrei na net e que funcionou, porém na minha class não! Agora não estou achando o link, mas o o html é identico a esse postado, e o php é:
function limparCampos($texto){
            $especiais = array("á", "à", "ã", "â", "À", "Á", "Â", "Ã",
                         "é", "è", "ê", "È", "É", "Ê",
                         "í", "ì", "î", "Í", "Ì", "Î",
                         "Ô", "Õ", "Ó", "Ò", "ó", "ò", "ô", "õ",
                         "Ú", "Ù", "Ü", "ü", "ú", "ù",
                         "ç", "Ç",
                         " ", ",", "/");
            $normais   = array("a", "a", "a", "a", "A", "A", "A", "A",
                         "e", "e", "e", "E", "E", "E",
                         "i", "i", "i", "I", "I", "I",
                         "O", "O", "O", "O", "o", "o", "o", "o",
                         "U", "U", "U", "o", "o", "o",
                         "c", "C",
                         "", "", "");
            
            $final = str_replace($especiais, $normais, $texto);
            return $final;
        }
if( isset( $_POST['enviar'] ) ) {
    $pasta = 'upload/';
    $i = 0;
    $msg = array();
    $arquivos = array(array());
    foreach($_FILES as $key=>$info){
        foreach($info as $key => $dados){
            for($i = '0'; $i < sizeof($dados); $i++){
                $arquivos[$i][$key] = $info[$key][$i];
            }
        }
    }
    $i = 1;

    foreach( $arquivos as $file ) {
        if( $file['name'] != '' ) {
            $arquivoTmp = $file['tmp_name'];
            $name = $file['name'];
            $nome = limparCampos($name);
            $arquivo = $pasta.$nome;
            
            if(file_exists($arquivo)){
                $num  = rand(0, 999);
                $exp  = explode(".", $nome);
                $nome = $exp[0].$num.".".$exp[1];
            }
            
            $arquivo = $pasta.$nome;

            if(!move_uploaded_file( $arquivoTmp, $arquivo)){
                $msg[$i] = 'Erro no upload do arquivo '.$i;
            }else{
                $msg[$i] = sprintf('Upload do arquivo %s foi um sucesso!',$i);
            }
        }else{
            $msg[$i] = sprintf('O arquivo %d não foi preenchido',$i);
        }
        $i++;
    }
    foreach( $msg as $e ) {
        printf('%s<br>', $e);
    }
}

A única coisa que eu alterei foi a função de tirar caracteres especiais e de adicionar um numero randomico ao nome, caso necessário.

PS: achei o link.

http://phpbr.wordpress.com/2007/02/22/uplo...quivos-com-php/

Editado por vini_loock
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...