Votre question

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

Tags :
  • MySQL
  • Programmation
Dernière réponse : dans Programmation
18 Janvier 2007 00:37:08

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 :

  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 :

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


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)

Autres pages sur : php mysql extraction titre image uploadee

18 Janvier 2007 00:55:59

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

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!!!
a c 145 L Programmation
18 Janvier 2007 12:13:11

d'ailleurs, le basename() ne sert à rien, vu que $_FILES['mon_image']['name'] est déjà le basename.
18 Janvier 2007 23:59:10

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 :

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


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: 
19 Janvier 2007 01:12:26

j'ai bien avancé !!!

au lieu de :

  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 :

  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...?
19 Janvier 2007 08:34:29

j'ai alors remplacé c dernier bloc par :

  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
19 Janvier 2007 20:00:59

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

voici mon formulaire simplifié :

  1. <form ACTION="f_traitement_photo.php" METHOD="POST" NAME="f_saisie_photo" ENCTYPE="multipart/form-data">
  2.  
  3. <INPUT TYPE="TEXT" NAME="titre" SIZE="60">
  4. <INPUT TYPE="TEXT" NAME="sujet" SIZE="60">
  5. <INPUT TYPE="TEXT" NAME="legende" SIZE="60">
  6. <INPUT TYPE="TEXT" NAME="format" SIZE="60">
  7. <INPUT TYPE="TEXT" NAME="heure" SIZE="60">
  8. <INPUT TYPE="TEXT" NAME="date" SIZE="60">
  9. <INPUT TYPE="TEXT" NAME="IDP" SIZE="60">
  10. <INPUT TYPE="TEXT" NAME="IDS" SIZE="60">
  11. <INPUT TYPE="TEXT" NAME="IDT" SIZE="60">
  12. <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é :

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


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 !!!
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS