Ir para conteúdo

POWERED BY:

Arquivado

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

Denio35

codigo para fazer upload de arquivos

Recommended Posts

Fala ae galera,

 

Sou novo no php e gostaria de uma ajuda. Estou com um codigo para fazer upload de arquivos, ele funciona direitinho mas eu queria acrescentar uma opção de escolher a pasta de destino no servidor. o codigo é este.

 

<?php

 

//Diretório aonde ficará os arquivos

$dir = "./";

 

//Extensões permitidas

$ext = array("gif","jpg","png");

 

//Quant. de campos do tipo FILE

$campos = 6;

 

//Formulário

echo '<form method="post" action="'.$PHP_SELF.'" enctype="multipart/form-data">

Arquivo: <input type="file" name="file[]">

 

Arquivo: <input type="file" name="file[]">

 

Arquivo: <input type="file" name="file[]">

 

Arquivo: <input type="file" name="file[]">

 

Arquivo: <input type="file" name="file[]">

 

Arquivo: <input type="file" name="file[]">

 

<input type="submit" name="submit" value=" OK ">

</form>';

 

 

//Se for enviado

if (isset($_POST['submit'])) {

 

//Obtendo info. dos arquivos

$f_name = $_FILES['file']['name'];

$f_tmp = $_FILES['file']['tmp_name'];

$f_type = $_FILES['file']['type'];

 

 

//Contar arquivos enviados

$cont=0;

 

//Repetindo de acordo com a quantidade de campos FILE

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

 

//Pegando o nome

$name = $f_name[$i];

 

//Verificando se o campo contem arquivo

if ( ($name!="") and (is_file($f_tmp[$i])) and (in_array(substr($name, -3),$ext)) ) {

 

if ($cont==0) {

echo "<b>Arquivo(s) enviados:

</b>";

}

echo $name." - ";

 

//Movendo arquivo's do upload

$up = move_uploaded_file($f_tmp[$i], $dir.$name);

 

//Status

if ($up==true):

echo "<i>Enviado!</i>";

$cont++;

else:

echo "<i>Falhou!</i>";

endif;

 

echo "

";

}

 

}

 

echo ($cont!=0) ? "<i>Total de arquivos enviados: </i>".$cont : "Nenhum arquivo foi enviado!";

}

?>

 

________________________________________________________

 

Quero que o campo de destino

 

$dir = "./";

 

seja preenchido por um formulario ...tipo eu escrevo o nome da pasta e os arquivos vao praquela pasta no servidor. tentei o metodo Post mas nao consigo fazer o codigo funcionar. fiz assim

 

 

 

<FORM METHOD="POST" ACTION="upload.php">

Nome Do Local reservado para as fotos

<INPUT TYPE="TEXT" NAME="nome"><br>

<INPUT TYPE="SUBMIT">

 

 

mas nao consigo chamar o que foi digitado no $dir = "./";

 

 

ALguem poderia me dar uma força?

 

Obrigado pela ajuda

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi!

 

Primeiro, esse seu upload funciona?

 

Se nao, pode ser porque aqui:

 

<FORM METHOD="POST" ACTION="upload.php">

E necssario acrescentar isto:

 

<FORM METHOD="POST" ACTION="upload.php" enctype="multipart/form-data">

 

Quanto a questao do dir e possivel sim.

Faca o input, pegue ele no post e coloque como diretorio de destino.

So tome cuidado pra avalidar o dir e se ele tem permissao de escrita.

 

-----------------

Edição:

 

Peço desculpas, eu nao vi que voce ja usa o enctype no seu form no começo do script.

Voce ta usando dois form's para o upload?

 

Unico form:

 

<?php
// SE O FORM FOI SUBMETIDO
If ($_SERVER['REQUEST_METHOD'] === 'POST')
  {
    /*
       ... UPLOAD
    */
  }

// GERACAO DO FORM
Else { $Arquivos             = 3;  // Numero de arquivos

      $Form                 = '<form name="upload" method="post" action="upload.php" enctype="multipart/form-data">'."\n";
      $Form                .= 'Diretório: <input type="text" name="diretorio" value=""><br>'."\n"; // Diretorio

      // Campos
      For ($i = 1; $i <= $Arquivos; $i++)
          { $Form          .= 'Arquivo '.$i.': <input type="file" name="arquivo['.$i.']"><br>'."\n"; }

      $Form               .= '</form>'."\n";

      Echo $Form;
    }
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa,

 

 

Primeiramente, obrigado pela ajuda. Estou usando um arquivo somente o upload.php . Gostaria somente de informar que o codigo não é meu, peguei no 4shared esta dentro de um arquivo e nao tinha o nome do "criador" pra eu colocar os creditos aqui. Sou muito iniciante no php (muito mesmo) estou lendo uma apostila do apostilando e buscando materiais na net.

 

Amigo o codigo que você mandou não tem o botão para enviar. você podia me passar esse final?

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi!

 

Uma dica:

Quando for postar seus codigos aqui no forum coloque todo ele entre as tags [ code ] ... [ /code ] ou [ php] ... [ /php ] do bbcode pra melhorar a aparencia do post e, principalmente, facilitar a leitura do mesmo.

Quando ao seu problema:

 

1) Nessa parte, a geração do form, nao precisa declarar o form duas vezes, substitua:

 

//Formulário
echo '
<form method="post" action="'.$PHP_SELF.'" enctype="multipart/form-data">

Arquivo: <input type="file" name="file[]"><br>

Arquivo: <input type="file" name="file[]"><br>

Arquivo: <input type="file" name="file[]"><br>

Arquivo: <input type="file" name="file[]"><br>

Arquivo: <input type="file" name="file[]"><br>

Arquivo: <input type="file" name="file[]"><br>

<!-- ACRESCENTEI AQUI: PASTA DE DESTINO -->
Pasta de destino: <input type="text" name="pasta" value=""><br>

<input type="submit" name="Enviar" value="OK">

</form>
';

2) Ja na parte do php, vamos alterar o destino dos arquivos pegando o campo nome do form que adicionamos, exemplo:

 

//Se for enviado
if ($_SERVER['REQUEST_METHOD'] === 'POST') {

//Obtendo info. dos arquivos
$f_name = $_FILES['file']['name'];
$f_tmp = $_FILES['file']['tmp_name'];
$f_type = $_FILES['file']['type'];

// Diretorio padrao, caso nao passe uma pasta ou a mesma nao seja valida
$dir = 'arquivos';
// verifica se foi passada a pasta, se é um diretorio e se tem permissao de escrita nele
If (isSet($_POST['pasta']) && is_dir($_POST['pasta']) && is_writable($_POST['pasta']))
  { $dir = $_POST['pasta']; }

//Contar arquivos enviados
$cont=0;

//Repetindo de acordo com a quantidade de campos FILE
for($i=0;$i<$campos;$i++){

//Pegando o nome
$name = $f_name[$i];

//Verificando se o campo contem arquivo
if ( ($name!="") and (is_file($f_tmp[$i])) and (in_array(substr($name, -3),$ext)) ) {

if ($cont==0) {
echo "<b>Arquivo(s) enviados:
</b>";
}
echo $name." - ";

//Movendo arquivo's do upload
$up = move_uploaded_file($f_tmp[$i], $dir.$name);

//Status
if ($up==true):
echo "<i>Enviado!</i>";
$cont++;
else:
echo "<i>Falhou!</i>";
endif;

echo "
";
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo, obrigado pela ajuda.

 

Como disse, sou muito novato no php, não consegui fazer o codigo funcionar, mas agradeço a atenção e as dicas. Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo, obrigado pela ajuda.

 

Como disse, sou muito novato no php, não consegui fazer o codigo funcionar, mas agradeço a atenção e as dicas. Obrigado

O fato de ser novato deveria lhe estimular a continuar tentando a correcao dos seus erros, e natural.

Lembre-se que ninguem aqui nasceu sabendo e todos fomos novatos um dia.

Se repensar sua desistencia, estaremos aqui pra ajudar.

 

Abraço.

Boa sorte.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo, na verdade nao desisti, repensei e voltei ao inicio de tudo. Comecei um muito mais simples para eu poder entender as etapas e separei em 2 . Um html depois o php.

 

<html>
<body>
<form action="upload.php" method="POST" enctype="multipart/form-data">
Enviar o arquivo: <input type="file" name="arquivo" size="20"><br>
Pasta de destino: <input type=text name="pasta"><br>
<input type="submit" value="Enviar">
</form>
</body>
</html>

 

e depois o PHP.

<?
$pasta = $_POST["pasta"];
/* Insira aqui a pasta que deseja salvar o arquivo*/
$uploaddir = '../$pasta/';

$uploadfile = $uploaddir . $_FILES['arquivo']['name'];


if (move_uploaded_file($_FILES['arquivo']['tmp_name'], $uploadfile)){
echo "Arquivo Enviado com sucesso para a pasta $pasta";}
else {echo "Arquivo não enviado";}

?>

 

 

e o que acontece é : Apload funciona, mas nao vai pra pasta que eu indico, ele renomeia o arquivo enviado com o nome que seria o do destino.

 

você pode me dar uma força nesse mais simples?

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa garoto!

Que bom que nao desistiu.

 

Entao, vamos la. Quanto ao erro da pasta, observer que voce esta colocando a var $pasta dentro de aspas simples e assim, o php interpreta $pasta como texto e nao como variavel, tente assim:

 

Substitua:

 

$uploaddir = '../$pasta/';

Por:

 

$uploaddir = '../'.$pasta; // Usando aspas simples para astring e concatenando ( . ) com o valor de $pasta

/* OU */

$uploaddir = "../$pasta"; // Com aspas duplas ele interpreta o valor da variavel $pasta.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agora deu certo. Obrigado. Coloquei aspas dupla e funcionou. Agora vou pensar da mesma forma para montar um que eu consiga fazer upload de varios arquivosao mesmo tempo. Obrigado novamente pela ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agora deu certo. Obrigado. Coloquei aspas dupla e funcionou. Agora vou pensar da mesma forma para montar um que eu consiga fazer upload de varios arquivosao mesmo tempo. Obrigado novamente pela ajuda.

Beleza! Como fazer um voce ja sabe! Legal.

Se tiver problemas no novo codigo para multiplos uploads crie um novo topico que tentaremos ajudar...

Abraço e boa sorte.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Quero que o campo de destino seja preenchido por um formulario ...tipo eu escrevo o nome da pasta e os arquivos vao praquela pasta no servidor.

 

Cuidado com esse negócio de nome da pasta circulando por formulários! Alguém pode enviar um arquivo que não deve para alguma pasta vital.

 

Sugiro que crie um banco ou array que só permita fazer upload para as pastas que você permitir.

 

[]'s

 

:ninja:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa,

 

Estou tentando adicionar mais campos para fazer up load de 4 arquivos de uma só vez, ao invez de 1 como no codigo acima. o meu html ficou assim:

<html>
<body>
<form action="upload.php" 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>    
Pasta de destino: <input type=text name="pasta"><br>
<input type="submit" value="Enviar">
</form>
</body>
</html>

 

Mas não to sabendo como adicionar esses novos "campos" no php:

<?
$pasta = $_POST["pasta"];

/* Insira aqui a pasta que deseja salvar o arquivo*/
$uploaddir = "./$pasta/";
$uploadfile = $uploaddir . $_FILES['arquivo']['name'];
if (move_uploaded_file($_FILES['arquivo']['tmp_name'], $uploadfile)){
echo "Arquivo Enviado com sucesso para a pasta $pasta";}
else {echo "Arquivo não enviado";}

?>

 

 

como faço para inserir esses novos campos no php?

Obrigado pela atenção

 

 

ps: Calebe, obrigado pela dica. Esse sisteminha vai ser usado somente pelo admin de um site, entao nao tenho muito essa preocupação, mas obrigado.

 

Alguem pode me dar uma luz, de como declarar no php esses novos campos para o envio de 4 arquivos.

 

Desde ja Obrigado

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.