Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Sign in to follow this  
Playline

Ajuda - Upload Files

Recommended Posts

Playline

Bons dias.

Estou de volta de um portal e estou a fazer uma alteração de um AVATAR para um profile. O código apresenta alguma complexidade porque a minha itenção é ter o nome do ficheiro registado em base de dados (user_avatar) mas quando é feito o upload a extenção da imagem pode variar, o nome da foto é que não.

if(count($_POST) > 0) {
// directorio dos avatares
$directorio="images/avatars/upload/";

// selecção da foto actual 
$sql_avatar = "SELECT * from users where user_id = '{$_SESSION['id']}'";
$query_avatar = mysql_db_query($database,$sql_avatar,$conn);
while($request=mysql_fetch_array($query_avatar)) {
$foto = $request["user_avatar"];
$file = $directorio.$foto;

// extenção e nome da foto actual
list($antigo_nome, $antigo_ext) = array_map('intval', explode('.', $foto));

}

// apago a foto antiga se existir
if ($foto) {
if (file_exists($file)) {
unlink($file);
}
}

// upload do novo ficheiro com mesmo nome mas extenção diferente
$ficheiro = (!isset($_FILES['foto'])?'': $_FILES['foto']);
$temporario = $ficheiro['tmp_name'];
list($novo_ficheiro, $novo_ext) = array_map('intval', explode('.', $ficheiro['name']));
$novo = $antigo_nome.$novo_ext;
if (is_uploaded_file($_FILES['foto'])) {
if (move_uploaded_file($temporario, $directorio.$novo)) {
// novo query na DB com novo avatar (nome + extençao)
$sql_insert_avatar="UPDATE users set user_avatar = '$novo' where user_id = '{$_SESSION['id']}'";
$query_insert_avatar = mysql_db_query($database,$sql_insert_avatar,$conn);
if ($query_insert_avatar) {
print("Alteração feita com sucesso");
}
}
}
}


}

O que é facto é que não obtenho resultados. Alguém pode ajudar ?  :confused:

Share this post


Link to post
Share on other sites
Bjecas

Assim por alto, e sem perceber bem o problema já que foste bastante vago no erro, há aqui algo que me parece estranho. Alteraria esta parte:

// extenção e nome da foto actual
list($antigo_nome, $antigo_ext) = array_map('intval', explode('.', $foto));

...para algo assim:

// extenção e nome da foto actual
$temparray = explode('.', $foto);
array_pop($temparray);
$antigo_nome = implode('.', $temparray);

E depois nesta parte:

// upload do novo ficheiro com mesmo nome mas extenção diferente
$ficheiro = (!isset($_FILES['foto'])?'': $_FILES['foto']);
$temporario = $ficheiro['tmp_name'];
list($novo_ficheiro, $novo_ext) = array_map('intval', explode('.', $ficheiro['name']));
$novo = $antigo_nome.$novo_ext;

Ficaria algo assim:

// upload do novo ficheiro com mesmo nome mas extenção diferente
$ficheiro = (!isset($_FILES['foto'])?'': $_FILES['foto']);
$temporario = $ficheiro['tmp_name'];
$novo_ext = strrchr($ficheiro["name"],"."));
$novo = $antigo_nome .".". $novo_ext;

Se isto não resultar, tenta ser um pouco mais específico.  :confused:

Share this post


Link to post
Share on other sites
Nuno

Assim por alto, e sem perceber bem o problema já que foste bastante vago no erro, há aqui algo que me parece estranho. Alteraria esta parte:

// extenção e nome da foto actual
list($antigo_nome, $antigo_ext) = array_map('intval', explode('.', $foto));

...para algo assim:

// extenção e nome da foto actual
$temparray = explode('.', $foto);
array_pop($temparray);
$antigo_nome = implode('.', $temparray);

penso k se alterares so esta parte ja deve funcionar..

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
Sign in to follow this  

×

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.