Renommer ces images avant l insertion en base de donnée [Résolu]

Signaler
Messages postés
2902
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
10 juin 2021
-
Messages postés
32937
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
10 juin 2021
-
bonjour a tous
lors de l upload des images dans ma base de donnée les images ne sont pas renommées et je pense que cela va poser des problèmes

j ai bien un système qui évite d avoir des doublons mais cela n est pas ce qu il y a de mieux

en effet si jean a sur son pc une image image 1.jpg et qu il l upload
j aurais dans mon dossier uploads sur mon serveur l image 1.jpg

si André a aussi une image image1.jpg et qu il veux l envoyer dans le dossier upload
il ne va pas comprendre pourquoi je lui informe qu elle existe déjà

donc est il possible de renommer les images par exemple en aaaaaaa001 pour la première
en aaaaaaa002 pour la deuxième
et ainsi de suite

je souhaiterais savoir si il existe un moyen pour éviter les doublons

10 réponses

Messages postés
32937
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
10 juin 2021
3 553
Bonjour,

Tu peux préfixer le nom des images par l'ID de ton utilisateur et utiliser, en plus, la fonction UNIQID pour générer une string aléatoire.
Par exemple, Ton fichier serait de la forme 1-78fsdf465.png

Messages postés
2902
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
10 juin 2021
138
bonjour jordane

merci pour la réponse aussi rapide
c est super
oui cela n a aucune importance du moment que cela est une chose simple a mettre en place et qu il soit impossible d avoir deux fois la même dénomination pour une image
l idéal comme tu connais mon code serait par exemple d avoir par exemple son pseudo et l id de la journée de pêche et bien sur le string aléatoire

juste pour m y retrouver dans les images
Messages postés
2902
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
10 juin 2021
138
voila je viens d essayer avec ce code
amis j ai un soucis avec l extension
comment je pourrais ajouter les extensions

j ai ajouter la ligne 41

<?php
// Démarrage SESSION
session_start();
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);

//Connexion à la bdd
require_once 'base.php';

// Variables/constantes...
  $allowed = array(
            "jpg" => "image/jpg",
            "JPG" => "image/JPG",
            "jpeg" => "image/jpeg",
            "JPEG" => "image/JPEG",
            "gif" => "image/gif",
            "png" => "image/png",
            "PNG" => "image/PNG"
        );

$res = array();// variable qui contiendra les infos à retourner au script JS
        
// récupération PROPRE des variables de type "array" AVANT de les utiliser  (j'ai l'impression de radoter vu le nombre de fois que je t'ai déjà donné ce genre de code !!!! )
$getpseudo = !empty($_COOKIE['pseudo']) ? $_COOKIE['pseudo'] : NULL;
$pseudo = !empty($_POST['pseudo']) ? $_POST['pseudo']: $getpseudo;
$id = !empty($_POST['id']) ? $_POST['id']: NULL;
$photos = !empty($_FILES["photo"]) ? $_FILES["photo"] : NULL;    
$contenu = !empty($_POST["contenu"]) ? $_POST["contenu"] : "";  

// Vérifier si le formulaire a été soumis
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    // Vérifie si le fichier a été uploadé sans erreur.
   
    if ($photos ){
      if( $photos["error"] != 0 ){
        $err = 'Erreur : ' . $photo['error']; 
      }else{
        $filename = $photos["name"];
        $filetype = $photos["type"];
        $filesize = $photos["size"];
        
        
        $filename = uniqid("img_",true) ;
        
        // Vérifie l'extension du fichier
        $ext = pathinfo($filename, PATHINFO_EXTENSION);
        if (!array_key_exists($ext, $allowed)) {
          $err = 'Erreur : Veuillez sélectionner un format de fichier valide.</br> <a href="javascript:history.back()">Pour recommencer</a>';
        }
        // Vérifie la taille du fichier - 5Mo maximum
        $maxsize = 5 * 1024 * 1024;
        if ($filesize > $maxsize){
            $err = 'Error: La taille du fichier est supérieure à la limite autorisée.</br> <a href="javascript:history.back()">Pour recommencer</a>';
        }else{
          // Vérifie le type MIME du fichier
          if (in_array($filetype, $allowed)) {
              // Vérifie si le fichier existe avant de le télécharger.
              if (file_exists("uploads/" . $photos["name"])) {
                  $err =  $photos["name"] . ' existe déjà.</br> <a href="javascript:history.back()">Pour recommencer</a>';
              } else {
                if(! move_uploaded_file($photos["tmp_name"], "uploads/" . $photos["name"])){
                  $err = "Erreur lors de l'upload du fichier";
                }else{
                  $res['message'] = '<style="font-size:22px; margin-left:20%; margin-top:90px;text-align: center;">Votre fichier a été téléchargé avec succès.>';
                  
                   //préparation de la requête et des variables
                  $sql = 'INSERT INTO galerie_images (pseudo, id_img, nom_img, nom_min, contenu ) VALUES (:pseudo, :id_img, :nom_img, :nom_min, :contenu)';
                  $datas = array(
                      ':pseudo' => $pseudo,
                      ':id_img' => $id,
                      ':nom_img' => $filename,
                      ':nom_min' => $filename,
					  ':contenu' => $contenu
                  );
                  //exécution de la requêete préparée
                  try{
                    $req = $bdd->prepare($sql);
                    $req->execute($datas);
                  }catch(Exception $e){
                    $err = " Erreur dans la requête : " . $e->getMessage();
                  }
                }
              }
          } else {
            $err = 'Error: Il y a eu un problème de téléchargement de votre fichier. Veuillez réessayer.</br> <a href="javascript:history.back()">Pour recommencer</a>';
          }
        }
      }
    } else  {
      $debug = ['POST'=>$_POST,'FILE'=>$_FILES];
      $err =  "Error: " . $photos["error"] . "   ---  " . print_r($debug,true);
    } 
  } else {
    $err = "Méthode invalide"; 
  }
  
  $res['error'] = $err;
  
  // On renvoi la réponse au format JSON
  echo json_encode($res);
 exit;
Messages postés
32937
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
10 juin 2021
3 553

        $filename . "." . $ext


Attention à bien le faire pour la sauvegarde en bdd ET lors du move_uploaded_file
Messages postés
2902
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
10 juin 2021
138
merci jordane
es ce que je ne devrais pas réaliser cela lors de l upload
j ai trouve ce code sur cette page
https://stackoverflow.com/questions/8810656/change-file-name-to-uniqid-in-php/8810759

$fileInfo = pathinfo($_photos["file"]["name"]);

move_uploaded_file($_photos["file"]["tmp_name"],
    "uploads/" . uniqid() . '.' . $fileInfo['extension']);
Messages postés
2902
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
10 juin 2021
138
voila je viens de refaire des essais

donc a présent j ai bien l image dans la base de donnée avec un non généré
dans le dossier uploads j ai aussi l image mais malheureusement c est le nom original du fichier

donc il faut pouvoir modifier le nom aussi dans l upload
et de ce cote je sèche

voici le code que j ai ajoute pour l instant pour avoir le résultat explique

  $ext = pathinfo($filename, PATHINFO_EXTENSION);
        
        $filename = uniqid("img_",true).$ext ;
Messages postés
2902
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
10 juin 2021
138
voila avec ce code j ai les noms des images qui ont été mortifiées
par contre c est pas bon avec l extension

le nom de mon image est ainsi

img_60ba6e9dba9472.30017962JPG
<?php
// Démarrage SESSION
session_start();
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);

//Connexion à la bdd
require_once 'base.php';

// Variables/constantes...
  $allowed = array(
            "jpg" => "image/jpg",
            "JPG" => "image/JPG",
            "jpeg" => "image/jpeg",
            "JPEG" => "image/JPEG",
            "gif" => "image/gif",
            "png" => "image/png",
            "PNG" => "image/PNG"
        );

$res = array();// variable qui contiendra les infos à retourner au script JS
        
// récupération PROPRE des variables de type "array" AVANT de les utiliser  (j'ai l'impression de radoter vu le nombre de fois que je t'ai déjà donné ce genre de code !!!! )
$getpseudo = !empty($_COOKIE['pseudo']) ? $_COOKIE['pseudo'] : NULL;
$pseudo = !empty($_POST['pseudo']) ? $_POST['pseudo']: $getpseudo;
$id = !empty($_POST['id']) ? $_POST['id']: NULL;
$photos = !empty($_FILES["photo"]) ? $_FILES["photo"] : NULL;    
$contenu = !empty($_POST["contenu"]) ? $_POST["contenu"] : "";  

// Vérifier si le formulaire a été soumis
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    // Vérifie si le fichier a été uploadé sans erreur.
   
    if ($photos ){
      if( $photos["error"] != 0 ){
        $err = 'Erreur : ' . $photo['error']; 
      }else{
        $filename = $photos["name"];
        $filetype = $photos["type"];
        $filesize = $photos["size"];
         $ext = pathinfo($filename, PATHINFO_EXTENSION);
        
        $filename = uniqid("img_",true).$ext ;
        
        // Vérifie l'extension du fichier
        $ext = pathinfo($filename, PATHINFO_EXTENSION);
        if (!array_key_exists($ext, $allowed)) {
          $err = 'Erreur : Veuillez sélectionner un format de fichier valide.</br> <a href="javascript:history.back()">Pour recommencer</a>';
        }
        // Vérifie la taille du fichier - 5Mo maximum
        $maxsize = 5 * 1024 * 1024;
        if ($filesize > $maxsize){
            $err = 'Error: La taille du fichier est supérieure à la limite autorisée.</br> <a href="javascript:history.back()">Pour recommencer</a>';
        }else{
          // Vérifie le type MIME du fichier
          if (in_array($filetype, $allowed)) {
              // Vérifie si le fichier existe avant de le télécharger.
              $photos["name"]= $filename;
              if (file_exists("uploads/" . $photos["name"])) {
                  $err =  $photos["name"] . ' existe déjà.</br> <a href="javascript:history.back()">Pour recommencer</a>';
              } else {
                if(! move_uploaded_file($photos["tmp_name"], "uploads/" . $photos["name"])){
                  $err = "Erreur lors de l'upload du fichier";
                }else{
                  $res['message'] = '<style="font-size:22px; margin-left:20%; margin-top:90px;text-align: center;">Votre fichier a été téléchargé avec succès.>';
                  
                   //préparation de la requête et des variables
                  $sql = 'INSERT INTO galerie_images (pseudo, id_img, nom_img, nom_min, contenu ) VALUES (:pseudo, :id_img, :nom_img, :nom_min, :contenu)';
                  $datas = array(
                      ':pseudo' => $pseudo,
                      ':id_img' => $id,
                      ':nom_img' => $filename,
                      ':nom_min' => $filename,
					  ':contenu' => $contenu
                  );
                  //exécution de la requêete préparée
                  try{
                    $req = $bdd->prepare($sql);
                    $req->execute($datas);
                  }catch(Exception $e){
                    $err = " Erreur dans la requête : " . $e->getMessage();
                  }
                }
              }
          } else {
            $err = 'Error: Il y a eu un problème de téléchargement de votre fichier. Veuillez réessayer.</br> <a href="javascript:history.back()">Pour recommencer</a>';
          }
        }
      }
    } else  {
      $debug = ['POST'=>$_POST,'FILE'=>$_FILES];
      $err =  "Error: " . $photos["error"] . "   ---  " . print_r($debug,true);
    } 
  } else {
    $err = "Méthode invalide"; 
  }
  
  $res['error'] = $err;
  
  // On renvoi la réponse au format JSON
  echo json_encode($res);
 exit;
Messages postés
32937
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
10 juin 2021
3 553
Messages postés
32937
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
10 juin 2021
3 553 >
Messages postés
32937
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
10 juin 2021

en complément, tu devrais forcer en minuscule la variable filename

 $filename = strtolower ( uniqid("img_",true) . "." . $ext ) ;
Messages postés
2902
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
10 juin 2021
138
bonsoir Jordane
un grand merci pour ton aide
c est vraiment la dernière difficultés pour mon site
enfin je pense

voila j ai applique les corrections

mais cela ne fonctionne pas
pourtant j ai suivi pas a pas le code ...
je te joins une copie du code modifie
et une copie d écran de la réponse

<?php
// Démarrage SESSION
session_start();
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);

//Connexion à la bdd
require_once 'base.php';

// Variables/constantes...
  $allowed = array(
            "jpg" => "image/jpg",
            "JPG" => "image/JPG",
            "jpeg" => "image/jpeg",
            "JPEG" => "image/JPEG",
            "gif" => "image/gif",
            "png" => "image/png",
            "PNG" => "image/PNG"
        );

$res = array();// variable qui contiendra les infos à retourner au script JS
        
// récupération PROPRE des variables de type "array" AVANT de les utiliser  (j'ai l'impression de radoter vu le nombre de fois que je t'ai déjà donné ce genre de code !!!! )
$getpseudo = !empty($_COOKIE['pseudo']) ? $_COOKIE['pseudo'] : NULL;
$pseudo = !empty($_POST['pseudo']) ? $_POST['pseudo']: $getpseudo;
$id = !empty($_POST['id']) ? $_POST['id']: NULL;
$photos = !empty($_FILES["photo"]) ? $_FILES["photo"] : NULL;    
$contenu = !empty($_POST["contenu"]) ? $_POST["contenu"] : "";  

// Vérifier si le formulaire a été soumis
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    // Vérifie si le fichier a été uploadé sans erreur.
   
    if ($photos ){
      if( $photos["error"] != 0 ){
        $err = 'Erreur : ' . $photo['error']; 
      }else{
        $filename = $photos["name"];
        $filetype = $photos["type"];
        $filesize = $photos["size"];
        
        
         $ext = pathinfo($filename, PATHINFO_EXTENSION);
        
     $filename = strtolower ( uniqid("img_",true) . "." . $ext ) ;
    
        // Vérifie l'extension du fichier
      
        if (!array_key_exists($ext, $allowed)) {
          $err = 'Erreur : Veuillez sélectionner un format de fichier valide.</br> <a href="javascript:history.back()">Pour recommencer</a>';
        }
        // Vérifie la taille du fichier - 5Mo maximum
        $maxsize = 5 * 1024 * 1024;
        if ($filesize > $maxsize){
            $err = 'Error: La taille du fichier est supérieure à la limite autorisée.</br> <a href="javascript:history.back()">Pour recommencer</a>';
        }else{
          // Vérifie le type MIME du fichier
          if (in_array($filetype, $allowed)) {
              // Vérifie si le fichier existe avant de le télécharger.
           
              if (file_exists("uploads/" . $filename)) {
                  $err =  $filename . ' existe déjà.</br> <a href="javascript:history.back()">Pour recommencer</a>';
              } else {
                if(! move_uploaded_file($photos["tmp_name"], "uploads/" . $filename)){
                  $err = "Erreur lors de l'upload du fichier";
                }else{
                  $res['message'] = '<style="font-size:22px; margin-left:20%; margin-top:90px;text-align: center;">Votre fichier a été téléchargé avec succès.>';
                  
                   //préparation de la requête et des variables
                  $sql = 'INSERT INTO galerie_images (pseudo, id_img, nom_img, nom_min, contenu ) VALUES (:pseudo, :id_img, :nom_img, :nom_min, :contenu)';
                  $datas = array(
                      ':pseudo' => $pseudo,
                      ':id_img' => $id,
                      ':nom_img' => $filename,
                      ':nom_min' => $filename,
					  ':contenu' => $contenu
                  );
                  //exécution de la requêete préparée
                  try{
                    $req = $bdd->prepare($sql);
                    $req->execute($datas);
                  }catch(Exception $e){
                    $err = " Erreur dans la requête : " . $e->getMessage();
                  }
                }
              }
          } else {
            $err = 'Error: Il y a eu un problème de téléchargement de votre fichier. Veuillez réessayer.</br> <a href="javascript:history.back()">Pour recommencer</a>';
          }
        }
      }
    } else  {
      $debug = ['POST'=>$_POST,'FILE'=>$_FILES];
      $err =  "Error: " . $photos["error"] . "   ---  " . print_r($debug,true);
    } 
  } else {
    $err = "Méthode invalide"; 
  }
  
  $res['error'] = $err;
  
  // On renvoi la réponse au format JSON
  echo json_encode($res);
 exit; 
Messages postés
32937
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
10 juin 2021
3 553
ça ne marche pas... c'est à dire ?
par ce que la réponse ajax te dit bien que c'est sauvegardé ...
Messages postés
32937
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
10 juin 2021
3 553 >
Messages postés
32937
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
10 juin 2021

Ah oui, l'erreur javascript à la fin...
étrange..

Tu peux, dans la fenêtre de réponse, tout à droit, cliquer sur le bouton "Brut" et nous montrer ce que ça contient ?
Messages postés
2902
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
10 juin 2021
138
ouppsss désolé jordane
cela fonctionne , c est vraiment magique , encore un grand merci
sauf qu'avant j avais le message
que le fichier était bien enregistre
a présent l écran reste figé de avec ce message

Messages postés
32937
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
10 juin 2021
3 553
Messages postés
2902
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
10 juin 2021
138
oui voici la capture
Messages postés
32937
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
10 juin 2021
3 553
Vu que tu peux voir le message d'erreur.... Je te laisse chercher ( vu que la dernière fois tu m'as indiqué que je t'avais répondu trop vite )
ou tu veux la réponse maintenant ?
Messages postés
32937
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
10 juin 2021
3 553 >
Messages postés
32937
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
10 juin 2021

bon,
je te donne la réponse maintenant, je ne vais pas tarder à aller me coucher ..

Donc,
ligne 23 initialise la variable $err
par exemple
$err = NULL;


Autre solution, utiliser un ternaire à la ligne indiquée par l'erreur
 $res['error'] = !empty($err) ? $err : NULL;


(tu peux faire les deux si tu veux )
Messages postés
2902
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
10 juin 2021
138
c est merveilleux jordane cela fonctionne a ravir
non j aurais pas trouver , du moins pas avant plusieurs jours
je tenais a te remercier très sincèrement de ton aide a travers tous mes petits soucis
cela a été vraiment gentil
passe une bonne nuit
Messages postés
32937
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
10 juin 2021
3 553
Bonne nuit à toi également,
Pense à marquer le sujet en RESOLU.