Denio35 0 Denunciar post Postado Março 15, 2011 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
InterPlanet 7 Denunciar post Postado Março 15, 2011 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
Denio35 0 Denunciar post Postado Março 15, 2011 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
InterPlanet 7 Denunciar post Postado Março 15, 2011 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
Denio35 0 Denunciar post Postado Março 16, 2011 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
InterPlanet 7 Denunciar post Postado Março 16, 2011 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
Denio35 0 Denunciar post Postado Março 16, 2011 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
InterPlanet 7 Denunciar post Postado Março 16, 2011 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
Denio35 0 Denunciar post Postado Março 17, 2011 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
InterPlanet 7 Denunciar post Postado Março 17, 2011 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
jcalebe 0 Denunciar post Postado Março 17, 2011 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
Denio35 0 Denunciar post Postado Março 18, 2011 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
jcalebe 0 Denunciar post Postado Março 18, 2011 Se você quer um sistema muito bom, tente esse aqui: http://webreflection.blogspot.com/2009/03/safari-4-multiple-upload-with-progress.html Tem até barra de progresso dos uploads. Eu uso bastante ele. Falow. :skull: :ninja: Compartilhar este post Link para o post Compartilhar em outros sites
Denio35 0 Denunciar post Postado Março 18, 2011 A intenção é pegar dicas e aprender a usar o php e o que ele oferece. Mesmo assim agradeço sua ajuda. Valeu Compartilhar este post Link para o post Compartilhar em outros sites