upload multiple et rename

Eléphanteau du PHP | 18 Messages

28 mai 2019, 14:01

bonjour à tous ,

j'ai donc un script d'upload multiple qui fonctionne et après j'enregistre tout les fichiers uploader dans la base .

pour l'instant j enregistre la photo avec son nom d'origine , je souhaiterais renommer les photos comme ceci : photo_1, photo_2, etc ....

c'est la que je bloque .... merci d'avance pour votre aide :

Code : Tout sélectionner

if(isset($_REQUEST['AddFiles'])){ $dossier_bien = ($result_biens->photo); $targetFolder = $dossier_bien; //Path to the Uploads Folder if (!empty($_FILES)) { for($i=0;$i<count($_FILES['upload_file']['name']);$i++){ $tempFile = $_FILES['upload_file']['tmp_name'][$i]; $targetFile = rtrim($targetFolder,'/') . '/' . $_FILES['upload_file']['name'][$i]; $fileTypes = array('jpeg','jpg','png','gif'); // Allowed File extensions $fileParts = pathinfo($_FILES['upload_file']['name'][$i]); if(isset($fileParts['extension'])){ if (in_array($fileParts['extension'],$fileTypes)) { move_uploaded_file($tempFile,$targetFile); $pdo->exec("INSERT INTO photo_bien (photo_bien, Id_bien) VALUES ('$targetFile','$Id_bien')");

Avatar du membre
Mammouth du PHP | 976 Messages

28 mai 2019, 15:04

Salut, il te suffit juste de modifier $targetFile :
$fileParts = pathinfo($_FILES['upload_file']['name'][$i]);
$targetFile = rtrim($targetFolder,'/') . '/' . 'photo_'.($i + 1).'.'.$fileParts['extension'];

PS : tu risques d'avoir des problèmes de cache si tu modifies les photos. Tu peux du coup soit générer un nom aléatoire, soit enregistrer la date de l'insert dans la table que tu pourras accoler à la suite du chemin de la photo lors de son affichage :
<img src="path/of/image/image.jpg?20190528152110"/>
J'édite souvent mon message après avoir répondu pour le corriger où y apporter des informations complémentaires alors n'hésitez pas à y jeter un nouveau coup d'oeil ^^

Eléphanteau du PHP | 18 Messages

28 mai 2019, 15:25

bonjour et merci ......

une autre petite question , comment faire si l'utilisateur veut rajouter des photos ? parce que la forcément ça écrase les photos existantes ....

y a t il moyen de récupérer la dernière valeur enregistré , pour redémarré au numéro ou on c"était arrêté ?

merci pour ton aide ....

excuse moi je n'avais pas vu le deuxième message , je pense que je vais faire comme cela avec la date , mais j'ai essayé cela ne fonctionne pas , du coup il ne m'enregistre qu'une seule photo .....

Code : Tout sélectionner

$targetFile = rtrim($targetFolder,'/') . '/' . 'photo_'.date("H:i:s").'.'.$fileParts['extension'];

Avatar du membre
Mammouth du PHP | 976 Messages

28 mai 2019, 16:19

Oui comme ça le problème c'est qu'un nom de fichier avec des : ça doit pas être autorisé. De plus toutes les images seront surement traitées dans la même seconde donc même nom. Moi je te proposais plutôt d'ajouter une colonne datetime dans la table photo_bien que tu pourras utiliser lors de l'affichage pour l'ajouter après le nom de l'image (format du style 'YmdHis') comme ça par exemple si le fichier photo_1.jpg est modifié la date étant différente, le navigateur comprendra que l'image n'est plus la même et chargera la nouvelle. Sans ça il continuera de t'afficher l'image qui est dans son cache jusqu'à ce que le cache soit nettoyé.

Pour savoir ou reprendre le compteur si l'utilisateur ajoute des images, tu peux faire un SELECT COUNT(*) FROM photo_bien WHERE Id_bien = $idBien et partir de count + 1.
J'édite souvent mon message après avoir répondu pour le corriger où y apporter des informations complémentaires alors n'hésitez pas à y jeter un nouveau coup d'oeil ^^

Eléphanteau du PHP | 18 Messages

28 mai 2019, 17:51

super .....

je test cela et je te dis , merci encore