Jump to content

Recommended Posts

Posted

Boa noite. Eu gostaria de adaptar o meu sistema de upload de imagens.

Gostaria que fosse de multiplo upload, o que tenho so faz de 1 imagem de cada vez.

este é o codigo:

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data">
    <fieldset>
      <legend>Registo de Filmes</legend>
<?php 
//ira verificar se clicou no botao enviar
if(isset($_POST['enviar'])){
//o nome original do arquivo no computador do utilizador
$arqName = $_FILES['arquivo']['name'];
//o tipo mime do arquivo 
$arqType = $_FILES['arquivo']['type'];
//o tamanho do arquivo
$arqSize = $_FILES['arquivo']['size'];
//o nome temporario do arquivo com que foi guardado no servidor 
$arqTemp = $_FILES['arquivo']['tmp_name'];
//o codigo de erro associado a este upload de arquivo
$arqError = $_FILES['arquivo']['error'];
//lista de tipos de arquivos permidos
$tiposPermitidos = array('image/gif', 'image/jpeg', 'image/jpg', 'image/png');
//tamanho maximo
$tamanhoPermitido = 1024 * 500;
				if ($arqError == 0){
					//verifica o tipo de arquivo enviado
					if(array_search($arqType, $tiposPermitidos) === false){
						$retorno = '<span class="no">O tipo de arquivo enviado é invalido!</span>' ;
						//verifica o tamanho do arquivo enviado
					}else if ($arqSize > $tamanhoPermitido){
						$retorno = '<span class="no">o tamanho do arquivo enviado e maior que o limite!</span>';
						//nao houverao erros, move o arquivo
					}else{
						$pasta = 'uploads_filmes/';
						//pega a extensao do arquivo enviado
						$extensao = strtolower(end(explode('.',$arqName)));
						//define o nome do arquivo usando um Unix TimesTamp
						$nome = time(). '.' . $extensao;
						//muda os caracteres protegidos do MySql 
						$nomeMySql = mysql_real_escape_string($_POST['titulo']);
						$upload = move_uploaded_file($arqTemp, $pasta . $nome);
						//verifica se o arquivo foi movido com sucesso
							if ($upload === true){
								$ficheiro = $pasta.$nome;
							}else{
								$retorno = '<span class="no">Nao foi possivel fazer o upload da imagem!</span>';
							}
					}
				}
					//validacao do formulario
					if(empty($ficheiro)){	
					$retorno = '<span class="quase">Insira a imagem!</span>';
					}	
			             
						   	//verifica se a variavel retorno estiver vazia (nao conter erro)	
							if(empty($retorno)){
							//cria uma query Mysql
							$query = mysql_query("INSERT INTO filmes (imagem) VALUES ('$ficheiro')") or die (mysql_error());


								//se a query existe entao a pagina é redireccionada
								if($query === true){
									$sucesso = '<span  class="yes">A pagina ira ser redirecionada em poucos segundos, Obrigado!</span>';
									echo $sucesso;
									echo"<META HTTP-EQUIV=REFRESH CONTENT='2; URL=visualiza_filmes_admin.php'>
										";	
								}
							}else{
								echo $retorno;
							}
}
?>
      <label> <span1>Imagem</span>
        <input name="arquivo"  type="file" />
      </label>
      <input type="hidden" name="enviar" value="Enviar" />
      <input type="submit" name="enviar" class="send" />
    </fieldset>
  </form>

Posted

Olá,

Colocar os campos no formulário. Tanto quantos as imagens que queremos:

<input name="arquivo[]"  type="file" />
<input name="arquivo[]"  type="file" />
<input name="arquivo[]"  type="file" />
<input name="arquivo[]"  type="file" />

Atenção que depois no name leva []

Desta forma o php vai criar um array com o conteúdo.

Depois é fazer exatamente o que está a fazer no script mas para todos os campos.

Uma hipótese será usar

foreach ou algo do tipo

$nrImagens = count($_FILES['arquivo']);

for($i = o; $i < $nrImagens; $i++){

    $arqName = $_FILES['arquivo']['name'][$i];

    [...]

}
Posted

entao ficaria algo do genero?


$nrImagens = count($_FILES['arquivo']);

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

        $arqName = $_FILES['arquivo']['name'][$i];
        //o tipo mime do arquivo 
        $arqType = $_FILES['arquivo']['type'][$i];
        //o tamanho do arquivo
        $arqSize = $_FILES['arquivo']['size'][$i];
        //o nome temporario do arquivo com que foi guardado no servidor 
        $arqTemp = $_FILES['arquivo']['tmp_name'][$i];
        //o codigo de erro associado a este upload de arquivo
        $arqError = $_FILES['arquivo']['error'][$i];

}

:wallbash:

é que assim continua a não dar =S

Posted
 <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data">
    <fieldset>
      <legend>Registo de Filmes</legend>
<?php 



//ira verificar se clicou no botao enviar
if(isset($_POST['enviar'])){


$nrFicheiros = count($_FILES['arquivo']);

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


	//o nome original do arquivo no computador do utilizador
        $arqName = $_FILES['arquivo']['name'][$i];
        //o tipo mime do arquivo 
        $arqType = $_FILES['arquivo']['type'][$i];
        //o tamanho do arquivo
        $arqSize = $_FILES['arquivo']['size'][$i];
        //o nome temporario do arquivo com que foi guardado no servidor 
        $arqTemp = $_FILES['arquivo']['tmp_name'][$i];
        //o codigo de erro associado a este upload de arquivo
        $arqError = $_FILES['arquivo']['error'][$i];
        //lista de tipos de arquivos permidos
        $tiposPermitidos = array('image/gif', 'image/jpeg', 'image/jpg', 'image/png');
        //tamanho maximo
        
        $tamanhoPermitido = 1024 * 500;
                                        if ($arqError == 0){
                                                //verifica o tipo de arquivo enviado
                                                if(array_search($arqType, $tiposPermitidos) === false){
                                                        $retorno = '<span class="no">O tipo de arquivo enviado é invalido!</span>' ;
                                                        //verifica o tamanho do arquivo enviado
                                                }else if ($arqSize > $tamanhoPermitido){
                                                        $retorno = '<span class="no">o tamanho do arquivo enviado e maior que o limite!</span>';
                                                        //nao houverao erros, move o arquivo
                                                }else{
                                                        $pasta = 'uploads_filmes/';
                                                        //pega a extensao do arquivo enviado
                                                        $extensaoTemp = explode('.',$arqName);
                                                        $extensao = strtolower(end($extensaoTemp));
                                                        
                                                        //define o nome do arquivo usando um Unix TimesTamp
                        								$nome = time(). '.' . $extensao;
                                                        //muda os caracteres protegidos do MySql 
                                                        #$nomeMySql = mysql_real_escape_string($_POST['titulo']);
                                                        $upload = move_uploaded_file($arqTemp, $pasta . $nome);
                                                        //verifica se o arquivo foi movido com sucesso
                                                                if ($upload === true){
                                                                        $ficheiro = $pasta.$nome;
                                                                }else{
                                                                        $retorno = '<span class="no">Nao foi possivel fazer o upload da imagem!</span>';
                                                                }
                                                }
                                        }
                                                //validacao do formulario
                                                if(empty($ficheiro)){   
                                                $retorno = '<span class="quase">Insira a imagem!</span>';
                                                }       
                                             
                                                                //verifica se a variavel retorno estiver vazia (nao conter erro)        
                                                                if(empty($retorno)){
                                                                //cria uma query Mysql
                                                                #$query = mysql_query("INSERT INTO filmes (imagem) VALUES ('$ficheiro')") or die (mysql_error());
                                                                
                                                                
                                                                        //se a query existe entao a pagina é redireccionada
                                                                        if($query === true){
                                                                                $sucesso = '<span  class="yes">A pagina ira ser redirecionada em poucos segundos, Obrigado!</span>';
                                                                                echo $sucesso;
                                                                                echo"<META HTTP-EQUIV=REFRESH CONTENT='2; URL=visualiza_filmes_admin.php'>
                                                                                        ";      
                                                                        }
                                                                }else{
                                                                        echo $retorno;
                                                                }
                                                                
                                                                
				} # fim do for loop
                                                                
		}
        ?>
      <label> <span1>Imagem</span>
      	<br />
        <input name="arquivo[]"  type="file" /><br />
        <input name="arquivo[]"  type="file" /><br />
      </label>
      <input type="hidden" name="enviar" value="enviar" /> <!--  o valor a passar no php é case sensitive -->
      <input type="submit" name="enviar" class="send" />
    </fieldset>
  </form>

Boas,

este já funciona.

Fiz as seguintes alterações:

- o input enviar tinha como valor Enviar e devia ter enviar (tudo minúsculas). Porque é esse o valor controlado no campo

- comentei tudo que era mysql porque como não tenho a base de dados só me dava erros

- coloquei [] no input file

- alterei as linhas:

                                                        $extensaoTemp = explode('.',$arqName);

                                                        $extensao = strtolower(end($extensaoTemp));

Porque a versão que tinhas dá um erro que tem a ver com isto:

Strict standards: Only variables should be passed by reference in /home/xxx/public_html/testes/portugalprogramar/01/index.php on line 43

Não te esqueças de dar permissões de escrita ao user www-data (debian ou ubuntu) à pasta uploads_filmes/

Acho que foi tudo.

Posted

Oi,, está muito bom mesmo  🙂

mas o meu objectivo nao era bem esse =s 

O que queria era fazer o upload de varias fotos num so input como no facebook para criar um album em que podes selecionar varias fotos ao mesmo tempo.

Posted

Olá Alex,

Neste momento não te posso ajudar pq nao tenho o script á mão. Amanhã coloco aqui um exemplo que funciona em Firefox e Chrome (acho eu), recorrendo a uma propriedade do html5.

Não funciona em IE. Para funcionar em IE so utilizando o flash que é o que o Facebook utiliza. HTML para firefox e chrome e flash para IE.

Parece ser exactamente o mesmo componente mas poderás ver por ti mesmo.

Abraços e beijinhos,Rui Costa

Posted

Olá pessoal.

Consegui descobrir uma maneira para fazer o upload multiplo mas estou com um problema.

consigo selecionar todas as imagens mas no entanto ele so guarda a primeira imagem na base de dados e move-a para a pasta indicada.

com este codigo ele deixa selecionar

<input name="arquivo"  type="file" multiple="multiple" />

o problema está aqui


      <?php 



//ira verificar se clicou no botao enviar
if(isset($_POST['enviar'])){


	//o nome original do arquivo no computador do utilizador
        $arqName = $_FILES['arquivo']['name'];
        //o tipo mime do arquivo 
        $arqType = $_FILES['arquivo']['type'];
        //o tamanho do arquivo
        $arqSize = $_FILES['arquivo']['size'];
        //o nome temporario do arquivo com que foi guardado no servidor 
        $arqTemp = $_FILES['arquivo']['tmp_name'];
        //o codigo de erro associado a este upload de arquivo
        $arqError = $_FILES['arquivo']['error'];
        //lista de tipos de arquivos permidos
        $tiposPermitidos = array('image/gif', 'image/jpeg', 'image/jpg', 'image/png');
        //tamanho maximo
        $tamanhoPermitido = 6024 * 3000;
        if ($arqError == 0){
        //verifica o tipo de arquivo enviado
        	if(array_search($arqType, $tiposPermitidos) === false){
            	$retorno = '<span class="no">O tipo de arquivo enviado é invalido!</span>' ;
                //verifica o tamanho do arquivo enviado
            }else if ($arqSize > $tamanhoPermitido){
                $retorno = '<span class="no">O tamanho do arquivo enviado e maior que o limite!</span>';
                //nao houverao erros, move o arquivo
            }else{
            	$pasta = 'images/';
                //pega a extensao do arquivo enviado
                $extensaoTemp = explode('.',$arqName);
                $extensao = strtolower(end($extensaoTemp));
                //define o nome do arquivo usando um Unix TimesTamp
                $nome = time(). '.' . $extensao;
                
                $upload = move_uploaded_file($arqTemp, $pasta . $nome);
                //verifica se o arquivo foi movido com sucesso
                	if ($upload === true){
                    	$ficheiro = $pasta.$nome;
                    }else{
                        $retorno = '<span class="no">Nao foi possivel fazer o upload da imagem!</span>';
                    }
		}
	}
	//validacao do formulario
        if(empty($ficheiro)){   
        $retorno = '<span class="quase">Insira a imagem!</span>';
	}       
        //verifica se a variavel retorno estiver vazia (nao conter erro)        
	if(empty($retorno)){
        //cria uma query Mysql
        $query = mysql_query("INSERT INTO laranja_imagens (imagem) VALUES ('$ficheiro')") or die (mysql_error());
        //se a query existe entao a pagina é redireccionada
        	if($query === true){
            	$sucesso = '<span  class="yes">A pagina ira ser redirecionada em poucos segundos, Obrigado!</span>';
                echo $sucesso;
			echo"<META HTTP-EQUIV=REFRESH CONTENT='2; URL=#'>";      
            }
        }else{
        	echo $retorno;
        }
}
        ?>

Outro problema que tambem detectei é que ele nao verifica o tamanho da imagem. se esta passar do tamanho mostra a mensagem de Insira a Imagem em vez de O tamanho do arquivo enviado e maior que o limite!.

Com o tipo de arquivo acontece o mesmo =S

Posted

Olá tens dois problemas:

1 = campo input file tem que ter o name a terminar em []. Senão o php não trata como array.

2 - a  forma como dás o nome aos ficheiro usando a função time(). O time retorna valores em segundos. Como todos os ficheiros vão entrar no mesmo segundo. Escrevem uns por cima dos outros e só ficas com um.

Feitas estas duas coisas o script que te enviei ontem deve funcionar. Pelo menos nos uploads.

Se quiseres ver o que está a passar para o php relativo aos ficheiros colocas

var_dump($_FILES);

Logo após a abertura da tag

<?php

Obtens algo do género

array
  'arquivo' => 
    array
      'name' => 
        array
          0 => string 'botao_ok.png' (length=12)
          1 => string 'chrome.png' (length=10)
          2 => string 'ff.png' (length=6)
          3 => string 'fundoMenu.png' (length=13)
          4 => string 'novo.png' (length=8)
          5 => string 'opera.png' (length=9)
          6 => string 'preloader.gif' (length=13)
          7 => string 'safari.png' (length=10)
      'type' => 
        array
          0 => string 'image/png' (length=9)
          1 => string 'image/png' (length=9)
          2 => string 'image/png' (length=9)
          3 => string 'image/png' (length=9)
          4 => string 'image/png' (length=9)
          5 => string 'image/png' (length=9)
          6 => string 'image/gif' (length=9)
          7 => string 'image/png' (length=9)
      'tmp_name' => 
        array
          0 => string '/tmp/phpRxDGlg' (length=14)
          1 => string '/tmp/phpF3Vsde' (length=14)
          2 => string '/tmp/phpJl1f5b' (length=14)
          3 => string '/tmp/phpOmy3W9' (length=14)
          4 => string '/tmp/phpCRwRO7' (length=14)
          5 => string '/tmp/phpvcUFG5' (length=14)
          6 => string '/tmp/phpyNGuy3' (length=14)
          7 => string '/tmp/phpUeSjq1' (length=14)
      'error' => 
        array
          0 => int 0
          1 => int 0
          2 => int 0
          3 => int 0
          4 => int 0
          5 => int 0
          6 => int 0
          7 => int 0
      'size' => 
        array
          0 => int 1318
          1 => int 1364
          2 => int 1480
          3 => int 844
          4 => int 1207
          5 => int 1210
          6 => int 1629
          7 => int 1342
Posted

Uma form a simples será adicionares qualquer coisa ao número.

Tens a variável $i que é usada no loop pode fazer algo do género:


$nome = $i.time(). '.' . $extensao;

Como todas as vezes que loop corre acrescenta +1 vais ficando com 1,2,3,4,5... se lhe adicionares os segundos (como estavas a fazer) deve ficar único o suficiente.

Isto se apenas tencionares ter um utilizador a trabalhar. Caso contrário corres o risco de teres dois utilizadores a fazerem uploads no mesmo segundo e ficas outra vez com o problema.

Posted

[...]


if(array_search($arqType, $tiposPermitidos) === false){
                #$retorno = '<span class="no">O tipo de arquivo enviado é invalido!</span>' ;
                
                  echo '<span class="no">O tipo de arquivo enviado é invalido!</span>' ; # <---------------------------------------------- ASSIM

             //verifica o tamanho do arquivo enviado
            }else if ($arqSize > $tamanhoPermitido){

[...]

Posted

Relativamente ao upload:

1- Como não testei o script cometi um erro.

No

$nrFicheiros = count($_FILES['arquivo']);

Ou seja ele vai contar os elementos do $_FILES['arquivo'] que são 5 (sempre cinco). Nomeadamente "name, type, tmp_name, error, size". Por isso só carregavas 5 imagens 😛

O correto será contar, por exemplo o número de "names". Assim:

$nrFicheiros = count($_FILES['arquivo']['name']);

funciona

2 - relativamente aos outros erros aqueles a laranja não te posso ajudar porque eles fazem referência às linhas onde está o erro. E que só podem ser identificadas se eu tiver o mesmo ficheiro.

Se quiseres ajuda nessa segunda questão.

Necessito que coloques aqui o ficheiro completo. O edita_laranja.php. É importamte ser completo para ver qual é a linha.

Já agora, completamente offtopic. Estar a usar a extensão mysql do php.

Se vires no manual ela é desencorajada. Porque vai ser descontinuada. Num próximo projeto explora http://www.php.net/manual/en/book.mysqli.php ou melhor ainda http://www.php.net/manual/en/intro.pdo.php. A segunda permite que escrevas código que depois pode ser usado com outras bases de dados. Tens os seus prós e os seus contras.

Posted

Só mais uma coisa.

Relativamente à mensagem do tipo de arquivo inválido. Faz o var_dump($_FILES) e verifica nos types se algum dos ficheiros está a reportar algo que não tens no array $tiposPermitidos.

Por exemplo os ficheiros jpg podem ser de vários tipos ou pelo menos reportar vários types (mime-types).

Procura as extensões que queres suportar, por exemplo aqui:

http://www.webmaster-toolkit.com/mime-types.shtml

Posted

este é o meu codigo todo

começa na linha 15 e acaba na linha 95


<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data">
    <fieldset>
      <legend>Upload de Imagens</legend>
      <?php 


//ira verificar se clicou no botao enviar
if(isset($_POST['enviar'])){
$nrFicheiros = count($_FILES['arquivo']['name']);
for($i = 0; $i < $nrFicheiros; $i++){

	//o nome original do arquivo no computador do utilizador
         $arqName = $_FILES['arquivo']['name'][$i];
        //o tipo mime do arquivo 
        $arqType = $_FILES['arquivo']['type'][$i];
        //o tamanho do arquivo
        $arqSize = $_FILES['arquivo']['size'][$i];
        //o nome temporario do arquivo com que foi guardado no servidor 
        $arqTemp = $_FILES['arquivo']['tmp_name'][$i];
        //o codigo de erro associado a este upload de arquivo
        $arqError = $_FILES['arquivo']['error'][$i];
        //lista de tipos de arquivos permidos
        $tiposPermitidos = array('image/gif', 'image/jpeg', 'image/jpg', 'image/png');
        //tamanho maximo
        $tamanhoPermitido = 6024 * 3000;
        if ($arqError == 0){

        //verifica o tipo de arquivo enviado
        	if(array_search($arqType, $tiposPermitidos) === false){

                  $retorno = '<span class="no">O tipo de arquivo enviado é invalido!</span>' ; 

                //verifica o tamanho do arquivo enviado
            }elseif ($arqSize > $tamanhoPermitido){
                $retorno = '<span class="no">O tamanho do arquivo enviado e maior que o limite!</span>';
                //nao houverao erros, move o arquivo
            }elseif (empty($retorno)){
            	$pasta = 'images/';
                //pega a extensao do arquivo enviado
                $extensaoTemp = explode('.',$arqName);
                $extensao = strtolower(end($extensaoTemp));
                //define o nome do arquivo usando um Unix TimesTamp
                $nome = $i.time(). '.' . $extensao;
                
                $upload = move_uploaded_file($arqTemp, $pasta . $nome);
                //verifica se o arquivo foi movido com sucesso
                	if ($upload === true){
                    	$ficheiro = $pasta.$nome;
                    }else{
                        $retorno = '<span class="no">Nao foi possivel fazer o upload da imagem!</span>';
                    }
		}
	}
	//validacao do formulario
        if(empty($ficheiro)){   
        	$retorno = '<span class="quase">Insira a imagem!</span>';
	}       
        //verifica se a variavel retorno estiver vazia (nao conter erro)        
	if(empty($retorno)){
        //cria uma query Mysql
        $query = mysql_query("INSERT INTO laranja_imagens (imagem) VALUES ('$ficheiro')") or die (mysql_error());
        //se a query existe entao a pagina é redireccionada
        	if($query === true){
            	$sucesso = '<span  class="yes">A pagina ira ser redirecionada em poucos segundos, Obrigado!</span>';
                echo $sucesso;
			//echo"<META HTTP-EQUIV=REFRESH CONTENT='2; URL=#'>";      
            }
        }else{
        	echo $retorno;
        }
}
}
        ?>
      <label>
        <span>Imagem</span> 
        <input name="arquivo[]"  type="file" multiple="multiple" />
      </label>
      <input type="hidden" name="enviar" value="enviar" />
      <input type="submit" name="enviar" class="send" />
    </fieldset>
  </form>

o problema é que ele nao faz os if's da linha 43 ate a linha 67 =S :wallbash:

que faz a verificação dos arquivos

Posted

Refiz as verificações.

Como é habitual não testei. Mas o importante é a ideia.

                       //verifica o tipo de arquivo enviado
		if(array_search($arqType, $tiposPermitidos) === false){
			$retorno = '<span class="no">O tipo de arquivo enviado é invalido!</span>' ;
			//verifica o tamanho do arquivo enviado

		}else{ # o arquivo é válido por isso vamos á próxima validação


			if ($arqSize > $tamanhoPermitido){
				$retorno = '<span class="no">O tamanho do arquivo enviado e maior que o limite!</span>';
				//nao houverao erros, move o arquivo
			}else{ #tamanho ok -> faz upload

				$pasta = 'images/';
				//pega a extensao do arquivo enviado
				$extensaoTemp = explode('.',$arqName);
				$extensao = strtolower(end($extensaoTemp));
				//define o nome do arquivo usando um Unix TimesTamp
				$nome = $i.time(). '.' . $extensao;

				$upload = move_uploaded_file($arqTemp, $pasta . $nome);

				if ($upload === true){
					$ficheiro = $pasta.$nome;
				}else{
					$retorno = '<span class="no">Nao foi possivel fazer o upload da imagem!</span>';
				}


			}


		}

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.