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

Playline

Ajuda - Upload Files

3 mensagens neste tópico

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:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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..

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora