Upload fichier dynamique (PHP)

Fermé
encoreali - Modifié le 13 août 2021 à 14:33
jordane45 Messages postés 38296 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 19 novembre 2024 - 16 août 2021 à 15:15
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 38296 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 19 novembre 2024 4 704
13 août 2021 à 14:35
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
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 38296 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 19 novembre 2024 4 704
16 août 2021 à 12:12
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
$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 38296 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 19 novembre 2024 4 704
16 août 2021 à 15:15
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