Transfert d'une image via un form html

Mickael86480 Messages postés 660 Date d'inscription   Statut Membre Dernière intervention   -  
Pitet Messages postés 2826 Date d'inscription   Statut Membre Dernière intervention   -
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   Statut Membre Dernière intervention   527
 
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   Statut Membre Dernière intervention   35
 
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   Statut Membre Dernière intervention   527
 
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   Statut Membre Dernière intervention   35 > Pitet Messages postés 2826 Date d'inscription   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   527
 
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   Statut Membre Dernière intervention   35
 
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   Statut Membre Dernière intervention   35
 
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   Statut Membre Dernière intervention   527
 
$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   Statut Membre Dernière intervention   35
 
ah d'accord comment dois-je faire alors stp?
0
Pitet Messages postés 2826 Date d'inscription   Statut Membre Dernière intervention   527
 
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   Statut Membre Dernière intervention   35 > Pitet Messages postés 2826 Date d'inscription   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   527
 
C'est bien ça. N'hésite pas à afficher les valeurs des variables via echo ou var_dump() pour comprendre le code ;)
0