Transfert d'une image via un form html

Fermé
Mickael86480 Messages postés 660 Date d'inscription vendredi 28 mai 2010 Statut Membre Dernière intervention 11 mars 2021 - 30 août 2016 à 12:48
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 - 5 sept. 2016 à 09:50
Bonjour, je viens vers vous car comme l'indique le titre du post je souhaite transférer une image via un form. Je m'explique, je suis en train de monter un site de recette où l'utilisateur peut créer sa recette, je lui donne la possibilité d'importer une image afin d'illustrer sa recette, j'ai bien suivi le tuto ccm ( https://www.commentcamarche.net/faq/889-php-upload-de-fichiers ) et j'en suis arriver à ceci :

<html>
<head>
  <meta charset="utf-8">
</head>
<body>
<!--Le formulaire html-->
<form method="post" action="#" enctype="multipart/form-data">
<input type="hidden" name="MAX_FILE_SIZE" value="5242880"> <!--on informe la taille max à envoyer, ici un peu + 5Mo-->
<input type="file" name="nom_du_fichier">    
<input type="submit" value="Envoyer" name="envoyer">
</form>
<!---->

<?php
if(isset($_POST['envoyer'])){
 if ($_FILES['nom_du_fichier']['error']) {     
          switch ($_FILES['nom_du_fichier']['error']){     
                   case 1: // UPLOAD_ERR_INI_SIZE     
                   echo"Le fichier dépasse la limite autorisée par le serveur.";
                   break;     
                   case 2: // UPLOAD_ERR_FORM_SIZE     
                   echo "Le fichier dépasse la limite autorisée dans le formulaire HTML.";
                   break;     
                   case 3: // UPLOAD_ERR_PARTIAL     
                   echo "L'envoi du fichier a été interrompu pendant le transfert.";
                   break;     
                   case 4: // UPLOAD_ERR_NO_FILE     
                   echo "Le fichier que vous avez envoyé a une taille nulle.";
                   break;     
          }     
 }
 else {
 // $_FILES['nom_du_fichier']['error'] vaut 0 soit UPLOAD_ERR_OK     
 // ce qui signifie qu'il n'y a eu aucune erreur     
  if ((isset($_FILES['nom_du_fichier']['temp_name'])&&($_FILES['nom_du_fichier']['error'] == UPLOAD_ERR_OK))) {
   mkdir('recette/dossiers_utilisateurs/images_recettes/', 0777, true);
   $chemin_destination = 'wamp/www/recette/dossiers_utilisateurs/images_recettes/';
   move_uploaded_file($_FILES['nom_du_fichier']['tmp_name'], $chemin_destination.$_FILES['nom_du_fichier']['name']);
  }
 }
}
?>

</body>
</html>


Les problèmes que je rencontre :

1) Aucun dossier de réception n'est créé.
2) Aucun fichier n'est déplacé.

Merci à tous ceux qui prendrons le temps de me répondre.
A voir également:

2 réponses

Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 526
30 août 2016 à 17:35
Salut,

Tu as une coquille à la ligne 23 :
if ((isset($_FILES['nom_du_fichier']['temp_name']) ...

au lieu de :
if ((isset($_FILES['nom_du_fichier']['tmp_name']) ...


Bonne journée,
0
Mickael86480 Messages postés 660 Date d'inscription vendredi 28 mai 2010 Statut Membre Dernière intervention 11 mars 2021 35
30 août 2016 à 21:10
ok merci pour ta réponse :)

les dossiers sont créés mais je n'ai pas la photo dedans. En revanche, j'ai deux avertissements :

Warning: move_uploaded_file(wamp/www/recette/dossiers_utilisateurs/images_recettes/P1010001.JPG) [function.move-uploaded-file]: failed to open stream: No such file or directory in C:\wamp\www\recette\essai.php on line 37

Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move 'C:\wamp\tmp\php3338.tmp' to 'wamp/www/recette/dossiers_utilisateurs/images_recettes/P1010001.JPG' in C:\wamp\www\recette\essai.php on line 37

je ne comprends pas merci de m'aider.
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 526
Modifié par Pitet le 31/08/2016 à 09:32
Il semble que ce soit un problème de chemin. Essaye de renseigner le chemin absolu du dossier de destination (à partir de la racine du disque dur, soit C: pour windows) :
$chemin_destination = 'C:/wamp/www/recette/dossiers_utilisateurs/images_recettes/';
0
Mickael86480 Messages postés 660 Date d'inscription vendredi 28 mai 2010 Statut Membre Dernière intervention 11 mars 2021 35 > Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022
31 août 2016 à 11:05
WEH! super Pitet ça marche! j'ai bien ma photo dans un dossier créer. Un grand MERCI à toi!!

Dernière remarque, j'ai un autre avertissement qui me le dossier que je veux créer existe déjà, il faut que je test, penses-tu que cela peut suffir :

if(!mkdir('dossiers_utilisateurs/images_recettes/', 0777, true))echo'Dossier existe déjà';
else mkdir('dossiers_utilisateurs/images_recettes/', 0777, true);
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 526
31 août 2016 à 11:28
Tu peux vérifier si un dossier existe avec la fonction is_dir() :
if (!is_dir('dossiers_utilisateurs/images_recettes/')) {
  mkdir('dossiers_utilisateurs/images_recettes/', 0777, true);
}
0
Mickael86480 Messages postés 660 Date d'inscription vendredi 28 mai 2010 Statut Membre Dernière intervention 11 mars 2021 35
31 août 2016 à 11:33
Impeccable! Encore merci pour ton aide. Si j'ai d'autres soucis puis-je te contacter directement par MP?
0
Mickael86480 Messages postés 660 Date d'inscription vendredi 28 mai 2010 Statut Membre Dernière intervention 11 mars 2021 35
31 août 2016 à 16:43
Maintenant le soucis que je rencontre c'est que je n'ai plus d'extension ou plutôt je voudrais y modifier l'extension et y mettre .jpg afin que je ne sois pas surpris du format que je reçois, j'ai bien essayé ça mais ça ne fonctionne pas. J'ai besoin d'un regard extérieur :

//Créer un identifiant difficile à deviner
$nom=uniqid(rand()+'.jpg');
$nom = md5($nom, true);

$chemin_destination = 'C:/wamp/www/recette/dossiers_utilisateurs/images_recettes/'.$pseudo.'/';
$_FILES['nom_du_fichier']['name']=$nom;
move_uploaded_file($_FILES['nom_du_fichier']['tmp_name'], $chemin_destination.$_FILES['nom_du_fichier']['name']);
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 526
31 août 2016 à 17:04
$nom = md5(uniqid(rand()), true) . '.jpg';


Es tu sûr de ne recevoir que des images au formats jpg ? Dans le cas d'une image au format png ou gif par exemple, ce changement d'extension en dur risque de poser problème.
0
Mickael86480 Messages postés 660 Date d'inscription vendredi 28 mai 2010 Statut Membre Dernière intervention 11 mars 2021 35
31 août 2016 à 17:23
ah d'accord comment dois-je faire alors stp?
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 526
Modifié par Pitet le 31/08/2016 à 17:30
Une solution possible est de récupérer l'extension du fichier uploadé :
$ext = pathinfo($_FILES['nom_du_fichier']['tmp_name'], PATHINFO_EXTENSION);
$nom = md5(uniqid(rand()), true) . '.' . $ext;
0
Mickael86480 Messages postés 660 Date d'inscription vendredi 28 mai 2010 Statut Membre Dernière intervention 11 mars 2021 35 > Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022
31 août 2016 à 20:15
D'accord si je comprends bien ton code :

$ext = pathinfo($_FILES['nom_du_fichier']['tmp_name'], PATHINFO_EXTENSION);

$ext prend pour valeur, l'extension du fichier uploadé.

$nom = md5(uniqid(rand()), true) . '.' . $ext;


$nom prend pour valeur un nom inventé avec l'extension du fichier uploadé

est-ce bien ça?
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 526
1 sept. 2016 à 09:04
C'est bien ça. N'hésite pas à afficher les valeurs des variables via echo ou var_dump() pour comprendre le code ;)
0