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
Auteur
Réponse acceptée

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
Auteur

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

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

Microse
Auteur

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.

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
Auteur

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>

et je pari qu'elle ne fonctionne pas ?

Microse
Auteur

effectivement sa ne marche pas

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
Auteur

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

Le remplacer tout simplement par 'img'

Microse
Auteur

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