Jump to content
NIKESLB

Substituição do ficheiro durante upload

Recommended Posts

NIKESLB

Olá,

tenho um script PHP para fazer upload de imagens. Aquilo que adicionei foi um campo "select" ao formulário. Conforme a escolha da opção, ao fazer upload a imagem será guardada para a respectiva pasta.

Também adicionei um ciclo "do while", isto irá mudar o nome para img_1.jpg, mas quando fizer outros upload irá continuar com img_2.jpg, img_3.jpg, img_4.jpg, etc... É aquilo que quero exactamente. O que é estranho é que se eu guardar na própria pasta que contém o ficheiro upload "./" aquilo faz exactamente certo, mas se eu fizer noutras pastas, como tá no cod "galeria_ff/", não funciona. Faz o primeiro upload "img_1.jpg", mas se fizer outro a seguir este irá sempre substituir pela vez de continuar com img_2.jpg, img_3.jpg...

Como poderei resolver o problema para que funciona para as minhas sub pastas? Podem me ajudar por favor?

 <?php

//Extensões permitidas
$ext = array("gif","jpg","png");

//Quant. de campos do tipo FILE
$campos = 1;

//Formulário
?>
  <form method="post" action="<?php $PHP_SELF ?>" enctype="multipart/form-data">
  <?php
echo ' Imagem: <input type="file" name="file[]">

  <br /><br />
  Categoria:
    <select name="categoria">
            <option selected="selected" value="ff">ff</option>
            <option value="kh">kh</option>

            <option value="outros">Outros</option>       
            </select><br /><br />

                         <input type="submit" name="submit" value=" OK ">
  </form>';
//se for necessário poderei adicionar mais Arquivo: <input type="file" name="file[]">

//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>Imagem enviada:
</b>";
    }
      echo $name." - ";

//adicionar mais 1 ao nome da img
$f = 0;
do {
$f++;
$filename = 'img_'.$f.'.jpg';

} 
while(file_exists($filename));
      //Movendo arquivo's do upload
          
          if ($_POST['categoria'] == 'ff') 
          {
          $dir = "galeria_ff/";
      $up = move_uploaded_file($f_tmp[$i], $dir.$filename);
          }     
          elseif ($_POST['categoria'] == 'kh') 
          {
          $dir = "galeria_kh/";
      $up = move_uploaded_file($f_tmp[$i], $dir.$filename);
          }     
          elseif ($_POST['categoria'] == 'outros') 
          {
          $dir = "galeria_outros/";
      $up = move_uploaded_file($f_tmp[$i], $dir.$filename);
          }     
                
                
        //Status
        if ($up==true):
            echo  "<i>Enviado!</i>";
              $cont++;
        else:
            echo "<i>Falhou!</i>";
        endif;
                
           echo "
";
  }

}
}
?>

Share this post


Link to post
Share on other sites
NIKESLB

já fiz isto, mas dá-me erro:

Warning: move_uploaded_file(admin/galeria/galeria_ff/img_1.jpg) [function.move-uploaded-file]: failed to open stream: No such file or directory in D:\wamp\www\test\admin\galeria\upload.php on line 177

e este:

Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move 'D:\wamp\tmp\phpAB16.tmp' to 'admin/galeria/galeria_ff/img_1.jpg' in D:\wamp\www\test\admin\galeria\upload.php on line 177

e pus este cod:

$dir = "/admin/galeria/galeria_ff/";

Share this post


Link to post
Share on other sites
brunoais

Essa pasta, para onde estás a enviar esse ficheiro, existe?


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites
brunoais

com essa pasta acabaste de demonstrar que não.

A pasta: admin/galeria/galeria_ff/

não existe.


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites
ruimcosta

podes sempre via código testar se a pasta existe, caso não exista é preciso criar!

if( !file_exists("minhapasta/imagens") ){
    mkdir("minhapasta/imagens");
}

De qualquer forma com a tua imagem, visto utilizares caminhos relativos, so comprovas o que o Bruno disse: Não existe. A partir da localização do teu upload.php não existe a pasta admin/galeria/galeria_ff/, certo?

Troca esse caminho OU por caminho absoluto, ou então substitui esse caminho por galeria_ff/


Abraços e beijinhos,Rui Costa

Share this post


Link to post
Share on other sites
NIKESLB

Então como posso usar um caminho absoluto? Sabendo que estou localmente usando wamp e alias.

Share this post


Link to post
Share on other sites
fantasma

Experimenta:


$dir = $_SERVER['DOCUMENT_ROOT']."admin/galeria/galeria_ff/".

É uma versão mais martelada do código do yoda (que deveria funcionar), mas nunca se sabe, pode ser que te ajude.

Share this post


Link to post
Share on other sites
brunoais

Experimenta:


$dir = $_SERVER['DOCUMENT_ROOT']."admin/galeria/galeria_ff/".

É uma versão mais martelada do código do yoda (que deveria funcionar), mas nunca se sabe, pode ser que te ajude.

Talvês...

$dir = test/admin/galeria/galeria_ff/";

ou

$dir = $_SERVER['DOCUMENT_ROOT']/test/admin/galeria/galeria_ff/";


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites

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.