Renommer ces images avant l insertion en base de donnée

Résolu
flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   -  
jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   -
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

  1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 831
     
    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

    1
  2. flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   190
     
    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
    0
  3. flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   190
     
    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;
    0
    1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 831
       
      
              $filename . "." . $ext
      


      Attention à bien le faire pour la sauvegarde en bdd ET lors du move_uploaded_file
      0
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   190
     
    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 ;
    0
  6. flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   190
     
    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;
    0
    1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 831
       
      0
      1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 831 > jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention  
         
        en complément, tu devrais forcer en minuscule la variable filename

         $filename = strtolower ( uniqid("img_",true) . "." . $ext ) ;
        
        0
  7. flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   190
     
    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; 
    0
    1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 831
       
      ça ne marche pas... c'est à dire ?
      par ce que la réponse ajax te dit bien que c'est sauvegardé ...
      0
      1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 831 > jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention  
         
        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 ?
        0
  8. flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   190
     
    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

    0
  9. flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   190
     
    oui voici la capture
    0
    1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 831
       
      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 ?
      0
      1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 831 > jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention  
         
        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 )
        0
  10. flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   190
     
    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
    0
    1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 831
       
      Bonne nuit à toi également,
      Pense à marquer le sujet en RESOLU.
      0