Tom's Guide > Forum > Programmation > [php/mysql] : extraction du titre de l'image uploadée

[php/mysql] : extraction du titre de l'image uploadée

Forum Programmation : [php/mysql] : extraction du titre de l'image uploadée

TomsGuide.com : 800 000 inscrits répondent à toutes vos questions high-tech et informatique. Pour obtenir de l'aide, inscrivez-vous gratuitement !
Mot :    Pseudo :           
 

bonsoir à tous,

après moultes recherches infructueuses, je finis par vous demander comment on peut récupérer le titre de l'image uploadée, sachant que tout va bien pour l'upload en lui-même.
La difficulté pour moi est que, lorsque j'upload, j'ai le chemin absolu qui s'affiche dans le champ de récupération. Normal me direz-vous mais très ennuyeux car il faut que je récupère uniquement la fin du chemin absolu, c'est-à-dire uniquement : image.jpg

Pour vous éclairer, voici mon code simplifié du formulaire de chargement :

Code :
  1. <form method="post" action="chargement_photo.php" enctype="multipart/form-data">
  2. <table>
  3. <tr>
  4.   <td>
  5.       <input type="hidden" name="MAX_FILE_SIZE" value="1000000000" />
  6.       <input type="file" name="mon_image" size="70" id="mon_image" />
  7.   </td>
  8. </tr>
  9. <tr>
  10.   <td>
  11.       <input type="submit" name="submit" value="Envoyer" />
  12.   </td>
  13. </tr>
  14. <tr>
  15.   <td height="35%" bgcolor=#000000></td>
  16. </tr>
  17. </table>
  18. </form>



voici le code simplifié de mon fichier php :

Code :
  1. <?php
  2. $dossier = 'photos/';
  3. $fichier = basename($_FILES['mon_image']['name']);
  4. $taille_maxi = 1000000000;
  5. $taille = filesize($_FILES['mon_image']['tmp_name']);
  6. $extensions = array('.png', '.gif', '.jpg', '.jpeg', '.JPG');
  7. $extension = strrchr($_FILES['mon_image']['name'], '.');
  8. //connexion à la base mysql club et message si probleme
  9. $connexion=mysql_connect ('localhost','root','') or die ("impossible de se connecter à la base de données" );
  10. mysql_select_db ('phototheque');
  11. //Début des vérifications de sécurité...
  12. if(!in_array($extension, $extensions))
  13. {
  14.     $erreur = "...fichier de type png, gif, jpg, jpeg, JPG";   
  15. }
  16. if($taille>$taille_maxi)
  17. {
  18.     $erreur = "le fichier est trop gros...";
  19. }
  20. //On formate le nom du fichier
  21. $fichier = strtr($fichier,
  22. 'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
  23. 'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
  24. $fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $fichier);
  25. // a ce stade $fichier devrait exactement correspondre au nom sur le disque
  26. if (file_exists ($dossier . $fichier))
  27.     {
  28.      $erreur = "gardez si possible le même nom en...";
  29.         }
  30.         if(!isset($erreur))
  31.         {
  32.         if(move_uploaded_file($_FILES['mon_image']['tmp_name'], $dossier . $fichier))
  33.             {
  34.             echo "chargement réussi !!!";
  35.             }
  36.         else
  37.         {
  38.         echo "ehec du chargement\n";
  39.         }
  40.     }
  41. else
  42. echo $erreur;
  43.  
  44. //fermeture de la connection
  45. mysql_close($connexion);
  46. ?>



voilà où j'en suis... ça fonctionne très bien...
mais, pour la récupération du nom de l'image uploadée (et non celui de l'image donné par le photographe), je vois vraiment pas.

quelqu'un aurait-il une piste, un tutoriel à me conseiller ?

merci d'avance...
(et probablement à demain matin)

Liens sponsorisés
Inscrivez-vous ou connectez-vous pour masquer ceci.

c'est quoi la question??
basename() récupère juste le nom du fichier (donc: image.jpg)
et tu l'utilises déjà!!

Répondre à coca25

ahhhhh d'accord....
en fait, je veux formuler ensuite un : INSERT titre-im INTO photo VALUES (variable qui récupère seulement le nom...)

c'est tout mais j'avais pas fait gaffe au basement()

je vois ça demain...

merci beaucoup en tout cas mister coca25!!!

Répondre à camzo

d'ailleurs, le basename() ne sert à rien, vu que $_FILES['mon_image']['name'] est déjà le basename.

------------------------------ Réseau IRC Francophone | g33k-zone
Répondre à crazycat@idn

bon, j'ai retenu le maximum concernant vos remarques et, tout fonctionne : l'enregistrement de la photo et le chargement de la photo. J'ai donc procédé à la réunion des deux dans un même formulaire mais... je me fais boulé concernant l'upload (encore une fois!!!). Il me dit que l'extension n'est pas bonne... J'ai lu, relu et re-relu mon code... je vois pas !!!

voici en tout cas, le résultat du tout :

Code :
  1. <?
  2. $titre=$_GET['titre'];
  3. $sujet=$_GET['sujet'];
  4. $legende=$_GET['legende'];
  5. $format=$_GET['format'];
  6. $heure=$_GET['heure'];
  7. $date=$_GET['date'];
  8. $IDP=$_GET['IDP'];
  9. $IDS=$_GET['IDS'];
  10. $IDT=$_GET['IDT'];
  11. $fichier=$_GET['mon_image'];
  12. $connexion=mysql_connect ('localhost','root','') or die ("impossible de se connecter à la base de données" );
  13. mysql_select_db ('phototheque');
  14. if($titre=='')
  15. {
  16.     echo "Votre enregistrement doit comporter un titre";
  17.     exit();
  18. }
  19. elseif(preg_match ('/[0-9][0-9]h[0-9][0-9]/', $heure) == 0)
  20. {
  21.     echo "L'heure doit être enregistrée sous la forme : 12h43";
  22.     exit();
  23. }
  24. elseif(preg_match ('/[0-2][0-9][0-9][0-9]-[0-1][0-9]-[0-3][0-9]/', $date) == 0)
  25. {
  26.     echo "La date doit être enregistrée sous la forme : AAAA-MM-JJ";
  27.     exit();
  28. }
  29. elseif($IDP=='')
  30. {
  31.     echo "Revenez à la page précédente et cliquez sur ...";
  32.     exit();
  33. }
  34. elseif($IDS=='')
  35. {
  36.     echo "Revenez à la page précédente et cliquez sur ...";
  37.     exit();
  38. }
  39. elseif($IDT=='')
  40. {
  41.     echo "Revenez à la page précédente et cliquez sur ...";
  42.     exit();
  43. }
  44. $dossier = 'photos/';
  45. $fichier = basename($_FILES['mon_image']['name']);
  46. $taille_maxi = 1000000000;
  47. $taille = filesize($_FILES['mon_image']['tmp_name']);
  48. $extensions = array('.png', '.gif', '.jpg', '.jpeg', '.JPG');
  49. $extension = strrchr($_FILES['mon_image']['name'], '.');
  50. if(!in_array($extension, $extensions)) //Si l'extension n'est pas dans le tableau
  51. {
  52.     echo "Vous devez charger un fichier de type png, gif, jpg, jpeg, JPG";
  53.     exit();
  54. }
  55. elseif($taille>$taille_maxi)
  56. {
  57.     echo "le fichier est trop gros...";
  58.     exit();
  59. }
  60. $fichier = strtr($fichier,
  61. 'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
  62. 'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
  63. $fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $fichier);
  64. if (file_exists ($dossier . $fichier))
  65. {
  66.     echo "gardez si possible le même nom en ...";
  67.     exit();
  68. }
  69. elseif(!isset($erreur))
  70. {
  71.     if(move_uploaded_file($_FILES['mon_image']['tmp_name'], $dossier . $fichier))
  72.     {
  73.     echo "chargement réussi !!!";
  74.     exit();
  75.     }
  76. }
  77. else
  78. echo "raté apparement";
  79.     exit();
  80. $query=mysql_query ("INSERT INTO photo (titre,sujet,legende,format,heure,date,IDP,IDS,IDT,titre_im) VALUES
  81. ('" . $titre . "','" . $sujet . "','" . $legende . "','" . $format . "','" . $heure . "','" . $date . "','" . $IDP . "','" . $IDS . "','" . $IDT . "','" . $fichier . "')" )
  82. or die ("si ça persiste, contactez ..." );
  83. mysql_close($connexion);
  84. ?>



voilà, j'ai l'impression que je récupère que $fichier et qu'il me manque du coup $extension. Mais, où et quoi je dois rajouter ?

merci bien pour les rensignements forts attendus...
cordialement :pt1cable:

Répondre à camzo

j'ai bien avancé !!!

au lieu de :

Code :
  1. $dossier = 'photos/';
  2. # $fichier = basename($_FILES['mon_image']['name']);
  3. $taille_maxi = 1000000000;
  4. $taille = filesize($_FILES['mon_image']['tmp_name']);
  5. $extensions = array('.png', '.gif', '.jpg', '.jpeg', '.JPG');
  6. $extension = strrchr($_FILES['mon_image']['name'], '.');



j'ai mis :

Code :
  1. $path_parts = pathinfo($fichier);
  2. print_r($path_parts);
  3. $taille_maxi = 1000000000;
  4. $extensions = array('png', 'gif', 'jpg', 'jpeg', 'JPG');
  5. $fichier = $path_parts['basename'];
  6. $extension = $path_parts['extension'];



mais ça suffit pas, bizarre non...?

Répondre à camzo

j'ai alors remplacé c dernier bloc par :

Code :
  1. if(isset($_POST['submit']))
  2. {  echo 'Formulaire soumis<br/>';
  3. if(is_uploaded_file($_FILES['mon_image']['tmp_name'])) 
  4. {  echo 'Image présente<br/>';
  5. $path_parts = pathinfo($_FILES['mon_image']['name']);
  6. print_r($path_parts);
  7. $taille_maxi = 1000000000;
  8. $extensions = array('png', 'gif', 'jpg', 'jpeg', 'JPG');
  9. print_r($extensions);
  10. echo $fichier = $path_parts['basename'];
  11. echo $extension = $path_parts['extension'];
  12. echo in_array($extension, $extensions);
  13. }
  14. }



et j'obtiens :

[Array ( [basename] => ) Array ( [0] => png [1] => gif [2] => jpg [3] => jpeg [4] => JPG )code][/code]

toujours pas d'idée...?

merci d'avance

Répondre à camzo

Donc, j'ai corrigé pas mal de truc et ça marche !!!

voici mon formulaire simplifié :

Code :
  1. <form ACTION="f_traitement_photo.php" METHOD="POST" NAME="f_saisie_photo" ENCTYPE="multipart/form-data">
  2. <INPUT TYPE="TEXT" NAME="titre" SIZE="60">
  3. <INPUT TYPE="TEXT" NAME="sujet" SIZE="60">
  4. <INPUT TYPE="TEXT" NAME="legende" SIZE="60">
  5. <INPUT TYPE="TEXT" NAME="format" SIZE="60">
  6. <INPUT TYPE="TEXT" NAME="heure" SIZE="60">
  7. <INPUT TYPE="TEXT" NAME="date" SIZE="60">
  8. <INPUT TYPE="TEXT" NAME="IDP" SIZE="60">
  9. <INPUT TYPE="TEXT" NAME="IDS" SIZE="60">
  10. <INPUT TYPE="TEXT" NAME="IDT" SIZE="60">
  11. <INPUT TYPE="hidden" NAME="MAX_FILE_SIZE" VALUE="1000000000" /><input TYPE="file" NAME="mon_image" SIZE="60" ID="mon_image" />


j'avais une faute dans mon enctype.... (ahhhh!!!!)

et voici mon fichier de traitement simplifié :

Code :
  1. <?
  2. $titre=$_POST['titre'];
  3. $sujet=$_POST['sujet'];
  4. $legende=$_POST['legende'];
  5. $format=$_POST['format'];
  6. $heure=$_POST['heure'];
  7. $date=$_POST['date'];
  8. $IDP=$_POST['IDP'];
  9. $IDS=$_POST['IDS'];
  10. $IDT=$_POST['IDT'];
  11. $fichier=$_POST['mon_image'];
  12. $connexion=mysql_connect ('localhost','root','') or die ("impossible de se connecter à la base de données" );
  13. mysql_select_db ('phototheque');
  14. if(isset($_POST[$titre==''])){
  15.     echo "Votre enregistrement doit comporter un titre";
  16.     exit();}
  17. elseif(preg_match ('/[0-9][0-9]h[0-9][0-9]/', $heure) == 0){
  18.     echo "L'heure doit être enregistrée sous la forme : 12h43";
  19.     exit();}
  20. elseif(preg_match ('/[0-2][0-9][0-9][0-9]-[0-1][0-9]-[0-3][0-9]/', $date) == 0){
  21.     echo "La date doit être enregistrée sous la forme : AAAA-MM-JJ";
  22.     exit();}
  23. elseif($IDP==''){
  24.     echo "Votre enregistrement doit comporter le numéro de saisie du photographe";
  25.     exit();}
  26. elseif($IDS==''){
  27.     echo "Votre enregistrement doit comporter le numéro de saisie du support";
  28.     exit();}
  29. elseif($IDT==''){
  30.     echo "Votre enregistrement doit comporter le numéro de saisie du type";
  31.     exit();}
  32. $dossier = 'photos/';
  33. $path_parts = pathinfo($_FILES['mon_image']['name']);
  34. print_r($path_parts);
  35. $taille_maxi = 1000000000;
  36. $extensions = array('png', 'gif', 'jpg', 'jpeg', 'JPG');
  37. print_r($extensions);
  38. echo $fichier = $path_parts['basename'];
  39. echo $extension = $path_parts['extension'];
  40. echo in_array($extension, $extensions);
  41. if(!in_array($extension, $extensions))
  42. {
  43.     echo "Vous devez charger un fichier de type png, gif, jpg, jpeg, JPG";
  44.     exit();
  45. }
  46. elseif($taille>$taille_maxi)
  47. {
  48.     echo "le fichier est trop gros...";
  49.     exit();
  50. }
  51. $fichier = strtr($fichier,
  52. 'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
  53. 'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
  54. $fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $fichier);
  55. if(file_exists ($dossier . $fichier))
  56. {
  57.     echo " le fichier existe déjà, donnez-lui un autre nom";
  58.     exit();
  59. }
  60. elseif(!isset($erreur))
  61. {
  62.     if(move_uploaded_file($_FILES['mon_image']['tmp_name'], $dossier . $fichier))
  63.     {
  64.     echo "chargement réussi !!!";
  65.     }
  66. }
  67. else
  68. {
  69. echo "raté apparement";
  70.     exit();
  71. }
  72. $query=mysql_query ("INSERT INTO photo (titre,sujet,legende,format,heure,date,IDP,IDS,IDT,titre_im) VALUES
  73. ('" . $titre . "','" . $sujet . "','" . $legende . "','" . $format . "','" . $heure . "','" . $date . "','" . $IDP . "','" . $IDS . "','" . $IDT . "','" . $fichier . "')" )
  74. or die ("l'insertion n'a pas été réalisée" );
  75. mysql_close($connexion);
  76. ?>



j'ai tout remis en POST (c'est mieux et obligatoire...) et j'ai surtout viré un exit() après le chargement de la photo (ça n'allait pas du coup jusqu'à la requête SQL)

Merci en tout cas à vous tous pour votre aide précieuse !!!

Répondre à camzo
Tom's Guide > Forum > Programmation > [php/mysql] : extraction du titre de l'image uploadée
Aller à :

Il y a 296 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

Attention

Vous allez répondre sur un sujet resté inactif pendant plus de 6 mois.
Assurez-vous d'apporter des éléments nouveaux à la discussion avant de poursuivre.

Répondre Annuler
Liens