Upload fichier dynamique (PHP)

encoreali -  
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,
J'ai un problème depuis quelques semaines, j'essaye de faire un formulaire où on upload un fichier avec plusieurs cases( chaque case correspond à un dossier) pour savoir où mettre le fichier.

<?php
// <input name="file" type="file" id="file"><br /><br />Cliquez pour télécharger<br /></input>

define('DOSSIER', './uploaded_files/paritel/*');
echo count(glob(DOSSIER . '/*', GLOB_ONLYDIR)) . ' sous-dossiers trouvés dans ' . DOSSIER;
echo '</br> </br>';
$b=count(glob(DOSSIER . '/*', GLOB_ONLYDIR));

echo "<label for='file'>Le fichier appartient à quel dossier ?</label>";

$dirs = glob("./uploaded_files/*/*/", GLOB_ONLYDIR);

$bases= array();

$value=array();
$i=0;

foreach($dirs as $dir)
{  
  $base = basename($dir);
  $bases[] = $base;
  $base = print_r("$bases[$i]",true) ;
  
  $value = basename($dir);
  $values[] = $value;
  $value = print_r("$values[$i]",true) ;
  
  echo '</br>';
  echo "<html> </br> </br>";
  echo "<form name='checkbox' method='post' action='upload.php'> ";
  echo "<input type='checkbox' name='base[]' value='$i'>";
  echo "<label for='$i'> Mettre sur le dossier $base ? </br> </label>";
  //echo "<input type='file' name='file' id='fileToUpload'>";
  echo "<input type='submit' value='upload' name='submit[]'>";
  //echo "<input type=nom id='' name='$base' value=''  placeholder='Nom du fichier'>";
    
  echo '</html>';
  //echo ' ' . $base . '<br>';
  //echo $base;
  $i++;
}

//name='submit[]'

//print_r($bases);

// enctype='multipart/form-data' LIGNE 38!!!

?>

<script>
$(document).ready(function(){
    $('input:checkbox').click(function(){
        $('input:checkbox').not(this).prop('checked', false);
    });
});
</script>

Puis lorsque l'on clique sur Submit (=Bouton Upload), on est envoyé dans une autre page permettant l'upload.
<?php
include "tableau.php";
define('DOSSIER', './uploaded_files/paritel/*');
$b=count(glob(DOSSIER . '/*', GLOB_ONLYDIR));

$i = 0;

extract($bases, EXTR_PREFIX_SAME,$base);



// $dirs1 = pathinfo($_FILES["file"]['tmp_name']);
// print_r($dirs1);
$bases[] = $base;
$base = print_r("$bases[$i]",true) ;
print_r(pathinfo($_FILES["$bases[$value]"]['tmp_name']));

foreach( $_POST['base'] as $key => $value ) {
  if(isset($_POST['submit'])){
    if(isset($_POST['base'])){
      //echo("$bases[$value]");
      if (file_exists("$bases[$value]")) {
        echo "Le fichier $bases[$value] existe déjà";
      }
      else{
        if (move_uploaded_file( $_FILES["$bases[$value]"]['tmp_name'])){
          echo "ok";
      }

        else{
          echo "non ok";
        }
      }
                }
    else{
      echo "cocher la case !";
        }
  }
  else{
    echo "Appuyer sur submit";
    }
  $i++;
  }

?>

Le problème est que je n'arrive pas à faire un move_upload_file. je n'arrive pas à comprendre le if (move_uploaded_file( $_FILES["$bases[$value]"]['tmp_name'])). Si quelqu'un peut m'aider!

Merci!

EDIT : Ajout des BALISES DE CODE

A voir également:

3 réponses

jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Bonjour,

La fonction move_uploaded_file attend deux paramètres.
https://www.php.net/manual/fr/function.move-uploaded-file.php

$emplacementOuMettreLeFichier = " .. le chemin ou mettre le fichier ...";

 if (move_uploaded_file( $_FILES["$bases[$value]"]['tmp_name'] , $emplacementOuMettreLeFichier)){
     echo "ok";
 }

0
encoreali
 
Bonjour,
Après avoir mis votre code, j'ai comme erreur :
" Notice: Undefined index: erwan in C:\wamp64\www\html\upload.php "
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Le souci vient de ton code
$_FILES["$bases[$value]"]

C'est quoi ça :
$bases[$value]
??

A noter que tu as, dans le code que tu nous as montré, mis l'input File en commentaires ... donc.. il n'est pas actif sur ton site...
Il manque également le enctype dans ton form
enctype="multipart/form-data"


Une fois corrigé, ajoute donc un var_dump de la variable $_FILES au début de ton script histoire de voir ce qu'elle contient...
0
encoreali
 
$bases[$value] est dans une boucle et permet de donner les noms des dossiers (Lié à un autre code dynamique permettant de crée des dossiers). Pour le enctype je l'ai mis juste avant la boucle foreach est-ce bon?

Pour le var_dump( $_FILES["$bases[$value]"] ), j'obtiens C:\wamp64\www\html\upload.php:38:null

Le problème est $bases[$value], mais comment faire pour nommer les fichiers si nous n'avons pas $bases[$value]?
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Pour le enctype je l'ai mis juste avant la boucle foreach est-ce bon?

Non.
le enctype... ça se met dans la déclaration du FORM
=> https://www.google.com/search?q=php+enctype%3D%26%2334%3Bmultipart%2Fform-data%26%2334%3B


Pour le var_dump( $_FILES["$bases[$value]"] )

Je t'ai demandé :
var_dump de la variable $_FILES

$_FILES .. TOUT COURT...
0