Images affichée en temps réel

Eléphanteau du PHP | 18 Messages

08 mars 2015, 08:11

Bonjour à tous et merci pour votre travail et votre temps.
Je viens de mettre mon premier site en ligne et j'observe un nouveau problème #-o

Mes membres ont la possibilité de modifier leur avatar, grâce à un input files.
Le fichier choisi est renommer en ID_MEMBRE.EXTENSION donc par exemple "1.jpg" et envoyer vers le dossier "avatars".
Quand je charge "maphoto_2.png" ( qui sera renommer en 1.png ) à la place de 1.jpg (nommée initialement "maphoto_1.jpg" ) tout va bien.
Mais quand je charge "maphoto_3.jpg" il le renomme en "1.jpg" et là il affiche maphoto_1.jpg. :non:
En local le problème existé mais disparaissait après deux ou trois rafraîchissement mais en ligne avec OVH même après une fermeture du navigateur le problème persiste. Pourtant le fichier dans le dossier avatars est bien ma_photo_3.jpg et l'info dans le bdd est bien modifiée.

Vue que le problème n'intervient que lorsque l'extension, (donc le nom complet car toujours le même ID pour chaque membre) est identique à l'ancien nom et comme le nouveau fichier est bien transférer à la place de l'autre alors c'est uniquement un problème d'affichage de PHP, non ?

Si oui, comment arrangé ça ?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

08 mars 2015, 08:50

Bonjour,

Il faut que tu nous donnes les extraits pertinents de ton code PHP, notamment les parties où tu renommes le fichier et où tu l'affiches.
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 18 Messages

08 mars 2015, 09:19

Merci @rthur voilà les lignes en question :

FICHIER MODIFIERPROFIL.PHP
if (isset($_POST['valider']) AND !empty($_FILES['avatar']['name'])){
	$erreur = GLOBAL_verif_fichier_photo ($array_de_la_photo_a_verifier = $_FILES['avatar'],$G_taille_maximum_des_fichier_photo,$T_message_erreur);
	if ( !empty ($erreur) ){ 
		$MESSAGE_erreur = $erreur;
		GLOBAL_affiche_message_erreur ($MESSAGE_erreur);		
	} else {
			$erreur = GLOBAL_enregistre_avatar_membre ($id = $_SESSION[$G_SESSION_id],$nom = $_SESSION[$G_SESSION_id],$table = "tab_membres",$col ="col_avatar",$name = $_FILES['avatar']['name'],$tmp_name = $_FILES['avatar']['tmp_name'],$G_bdd,$G_chemin_du_server,$T_message_erreur);
		if ( !empty ($erreur) ){ 
			$MESSAGE_erreur = $erreur; 
			GLOBAL_affiche_message_erreur ($MESSAGE_erreur);
			GLOBAL_efface_avatar_membre ($id = $_SESSION[$G_SESSION_id],$G_chemin_du_server);
		} else {
			GLOBAL_actualise_une_session_membre ($id = $_SESSION[$G_SESSION_id],$G_SESSION_id,$G_SESSION_pseudo,$G_SESSION_email,$G_SESSION_avatar,$G_SESSION_numaleatoire,$G_bdd);		
			GLOBAL_affiche_message_succes ($MESSAGE_succes = $T_message_succes['modification_profil']);	
		}				
	}
}
FICHIER FONCTION.PHP
function GLOBAL_enregistre_avatar_membre ($id,$nom,$table,$col,$name,$tmp_name,$G_bdd,$G_chemin_du_server,$T_message_erreur){	
	$extansion = GLOBAL_recupere_extansion_fichier ($nom_du_fichier = $name);
	@move_uploaded_file($tmp_name,$G_chemin_du_server.'/avatars/'.$nom.'.'.$extansion) OR ($MESSAGE_erreur = $T_message_erreur['upload'].' ( '.$name.' )');
	$nom_avec_extansion = $nom.'.'.$extansion;
	$nom_complet = "'avatars/$nom_avec_extansion'";
	$G_bdd->query(' UPDATE '.$table.' SET '.$col.' = "'.$nom_complet.'" WHERE col_id = "'.$id.'"  ') OR ($MESSAGE_erreur = $T_message_erreur['basededonneeconnexion'] );
	if ( isset ($MESSAGE_erreur) ){	
		return $MESSAGE_erreur;
	}
}
##edit @rthur : ajout des balises
 pour rendre le code lisible

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

08 mars 2015, 13:26

Je pense qu'il faut déjà que tu arrives à isoler le problème pour déterminer à quel moment il y a un bug.

Tu as globalement 2 actions :
1) uploader une image (et la renommer, et enregistrer le nom de cette image dans ta bdd)
2) afficher l'image (j'imagine en allant chercher son nom dans ta bdd, mais on n'a pas le code correspondant)


Pour le 1) :
- Après upload d'une image, en regardant sur ton FTP, est-ce que l'image ID.jpg est bien enregistrée dans le répertoire souhaité ?
- Est-ce que en base de données, en regardant via phpmyadmin, tu retrouve bien le nom de ton image (avatars/ID.jpg) associé au profil correspondant ?

Pour le 2) :
- Si tu regardes le code source de ta page qui est sensée afficher l'avatar, quel est le nom du fichier image ? est-ce bien correspondant à celui en base de données à savoir avatars/ID.jpg ?
Quand tout le reste a échoué, lisez le mode d'emploi...