Uploader une image

Par Microse, il y a 8 ans


Bonjour,

J'ai concu un code en m'inspirant de diverses site pour uploader une image dans un dossier déjà créer mais il me dit que mon $img = $_POST['img'] est nul alors que je l'upload avec un formulaire avez vous des idées pourquoi?

mon index.php

<!Doctype html> <html> <head> <title> uploader une image </title> </head> <body> <form action="index.php" method="post" enctype="multipart/form-data"> <input type="text" name="nom" placeholder="Nom" /> <input type="text" name="prenom" placeholder="Prenom" /> <input type="file" name="img" id="img" /> <button type="submit" name="val"> Valider </button> </form> <br /> <?php include("fonction.php"); if(isset($_POST['val'])) { $nom = $_POST["nom"]; $prenom = $_POST['prenom']; $img = $_POST['img']; var_dump($img); upload($img, "fichier/"); } ?> </body> </html>

12 réponses

Microse, il y a 8 ans

erreur ressortis :

Notice: Undefined index: img in /home/tibdev/Public/www/test_img/index.php on line 21 Call Stack # Time Memory Function Location 1 0.0001 363616 {main}( ) .../index.php:0 /home/tibdev/Public/www/test_img/index.php:22:null
Carouge10, il y a 8 ans

Bonsoir,
Oui car le "input" de type "file" ne vas pas dans le $_POST mais dans un $_FILES

Microse, il y a 8 ans

ok mais encore deux erreurs :

pour

$uploadFichier = $destination . basename($_FILES[$index]['name']); et if(move_uploaded_file($_FILES[$index]['tmp_name'], $uploadFichier))

il me sort un

Warning: Illegal offset type

et pourtant je voie par pourquoi car il prend pas en compte le $_FILES[$index]['name'] et $_FILES[$index]['tmp_name'] ce qui est bizarre car, dans la doc ils disent que sa s'écrit comme sa.

Carouge10, il y a 8 ans

C'est ton $index qui pose soucis, d'ailleurs, tu le sors d'où ?
Il faut le remplacer par le name de ton input file, à savoir img.

Cet page sur l'upload devrait t'aider.

Microse, il y a 8 ans

enfaite mon $index est le name de mont input contenant le fichier.
voila ma fonction upload

function upload($index, $destination) { $uploadFichier = $destination . basename($_FILES[$index]['name']); var_dump($uploadFichier); echo "<pre>"; if(move_uploaded_file($_FILES[$index]['tmp_name'], $uploadFichier)) { echo "Le fichier est valide, et a été téléchargé avec succès. Voici plus d'informations :\n"; } else { echo "Attaque potentielle par téléchargement de fichiers. Voici plus d'informations :\n"; } echo 'Voici quelques informations de débogage :'; print_r($_FILES); echo '</pre>'; }

et mon index.php

<!Doctype html> <html> <head> <title> uploader une image </title> </head> <body> <form action="index.php" method="post" enctype="multipart/form-data"> <input type="text" name="nom" placeholder="Nom" /> <input type="text" name="prenom" placeholder="Prenom" /> <input type="file" name="img" id="img" /> <button type="submit" name="val"> Valider </button> </form> <br /> <?php include("fonction.php"); if(isset($_POST['val'])) { $nom = $_POST["nom"]; $prenom = $_POST['prenom']; $img = $_FILES['img']; var_dump($img); upload($img,"/home/tibdev/Public/www/test_img/fichier/"); } ?> </body> </html>
Carouge10, il y a 8 ans

et je pari qu'elle ne fonctionne pas ?

Microse, il y a 8 ans

effectivement sa ne marche pas

Carouge10, il y a 8 ans

Je vais suivre ta logique en reprenant ton code et en laissant les erreurs :

<!Doctype html> <html> <head> <title> uploader une image </title> </head> <body> <form action="index.php" method="post" enctype="multipart/form-data"> <input type="text" name="nom" placeholder="Nom" /> <input type="text" name="prenom" placeholder="Prenom" /> <input type="file" name="img" id="img" /> <button type="submit" name="val"> Valider </button> </form> <br /> <?php include("fonction.php"); if(isset($_POST['val'])) { $nom = $_POST["nom"]; $prenom = $_POST['prenom']; $img = $_FILES['img']; var_dump($img); upload($img,"/home/tibdev/Public/www/test_img/fichier/"); // Je pourrais remplacer par ceci : // upload($_FILES['img'],"/home/tibdev/Public/www/test_img/fichier/"); } ?> </body> </html>

Ensuite on passe à la fonction

//Nous sommes d'accord que $index = $_FILES['img'] function upload($index, $destination) { $uploadFichier = $destination . basename($_FILES[$index]['name']); // Donc je remplace $index par la vrai valeur qu'on lui a atribué // $uploadFichier = $destination . basename($_FILES[$_FILES['img'] ]['name']); // Es-tu tu sur que c'est ce que tu veux ? var_dump($uploadFichier); echo "<pre>"; if(move_uploaded_file($_FILES[$index]['tmp_name'], $uploadFichier)) { echo "Le fichier est valide, et a été téléchargé avec succès. Voici plus d'informations :\n"; } else { echo "Attaque potentielle par téléchargement de fichiers. Voici plus d'informations :\n"; } echo 'Voici quelques informations de débogage :'; print_r($_FILES); echo '</pre>'; }

Alors ta réponse ?

Microse, il y a 8 ans

ok j'ai compris, il faut tous simplement enlever le $img = $_FILES['img']

Carouge10, il y a 8 ans

Le remplacer tout simplement par 'img'

Microse, il y a 8 ans

du coup j'ai adapté ma fonction à mon code en le modifiant
ma nouvelle fonction upload :

function upload($index, $destination) { $tmp_file = $_FILES[$index]['tmp_name']; if( !is_uploaded_file($tmp_file) ) { exit("Le fichier est introuvable"); } // on vérifie maintenant l'extension $type_file = $_FILES[$index]['type']; if( !strstr($type_file, 'jpg') && !strstr($type_file, 'jpeg') && !strstr($type_file, 'bmp') && !strstr($type_file, 'gif') ) { exit("Le fichier n'est pas une image"); } // on copie le fichier dans le dossier de destination $name_file = $_FILES[$index]['name']; if( !move_uploaded_file($tmp_file, $destination . $name_file) ) { exit("Impossible de copier le fichier dans $destination"); } echo "Le fichier a bien été uploadé"; }

mon index.php

include("fonction.php"); if(isset($_POST['val'])) { $nom = $_POST["nom"]; $prenom = $_POST['prenom']; upload('img',"/home/tibdev/Public/www/test_img/fichier/"); }

et j'ai des problèmes de droit cette fois du style

Warning: move_uploaded_file(/home/tibdev/Public/www/test_img/fichier/intercite.jpg): failed to open stream: Permission denied in /home/tibdev/Public/www/test_img/fonction.php on line 61

je fais un chmod() du coup?

Microse, il y a 8 ans

sujet résolu enfaite, j'ai réussi merci :)