Upload fichier dynamique

encoreali
Invité n'ayant pas de compte PHPfrance

13 août 2021, 11:23

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!

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

13 août 2021, 14:37

move_uploaded_file() a besoin de 2 paramètres, notamment le 2ème pour indiquer où tu veux déplacer le fichier
https://php.net/move_uploaded_file

Le if dans if(move_uploaded_file(...)) c'est juste parce que move_uploaded_file() renvoie true si tout s'est bien passé ou false si il n'a pas pu mettre le fichier uploadé où tu lui as demandé
Quand tout le reste a échoué, lisez le mode d'emploi...

encoreali
Invité n'ayant pas de compte PHPfrance

13 août 2021, 14:51

Bonjour,
Merci de votre réponse, mais je ne comprend toujours pas pourquoi dans if (move_uploaded_file( $_FILES["file"]['tmp_name'])), le site me retourne "Notice: Undefined index: file in C:\wamp64\www\html\upload.php " alors que dans ma première page j'ai bien file comme ci-dessous:
<input type="file" name="file" id="file" multiple> </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='submit' value='upload' name='submit[]'>";
Je ne comprend vraiment pas le soucis...

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

13 août 2021, 15:28

Parce qu'il manque l'input type='file' name='file'
Quand tout le reste a échoué, lisez le mode d'emploi...

ynx
Mammouth du PHP | 586 Messages

13 août 2021, 15:30

Bonjour,

La variable $_FILES['file'] n'est pas définie (undefined index) surement à cause de l'absence de l'attribut enctype sur le formulaire html.

En effet pour l'upload de fichier en PHP, le formulaire html doit posséder un attribut enctype="multipart/form-data" sinon le fichier ne sera pas uploadé :
echo '<form name="checkbox" method="post" action="upload.php" enctype="multipart/form-data">';
echo '<input type="file" name="file" id="file" multiple>';
// [ ... autres champs et bouton submit]
echo '</form>';

L'input type file doit également être inclus dans le formulaire, pas en dehors.

encoreali
Invité n'ayant pas de compte PHPfrance

13 août 2021, 15:40

Bonjour,
C'est bizarre, pourtant j'ai bien mis enctype="multipart/form-data" sur le formulaire html comme ci-dessous (Ligne 3):
	<form action="PATH" method="post" enctype="multipart/form-data"></form>
	<form action="upload.php" enctype="multipart/form-data" method="post">



    <div align="right">
    <a href="login1.php"><button class='formeButton' style='width:120px'>Deconnexion</button></br></br></a>
	<a href="chat.php"><button class='formeButton' style='width:120px'>Accueil</button></br></br></a>
	<a href="liendownload.php"><button class='formeButton' style='width:120px'>Download</button></br></br></a>
	<a href="nouvdossier.php"><button class='formeButton' style='width:120px'>Crée Dossier</button></br></a>

	</div>
	
	
	<div align="middle">	
	<p>Uploadez un fichier en utilisant le formulaire ci-dessous :</p>
	<form enctype="multipart/form-data" action="upload.php" method="post">
	<label for="file">Sélectionnez le fichier à Upload :</label><br /> </br>
	<input type="file" name="file" id="file" multiple> </br> </br>
	
	</form>
	
	<html>

encoreali
Invité n'ayant pas de compte PHPfrance

13 août 2021, 15:43

De plus, le formulaire est dans une boucle foreach donc si je met le <input type="file" name="file" id="file" multiple> </br> </br> dans le formulaire je l'ai n fois.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

13 août 2021, 15:47

Nan mais là ton code HTML c'est n'importe quoi.
Il faut que ton code HTML soit correct : https://validator.w3.org/

Tu multiplies les balises <form> sans raison, parfois sans les fermer
Quand tout le reste a échoué, lisez le mode d'emploi...

Petit nouveau ! | 1 Messages

17 août 2021, 12:57

salut tout le monde j'ai aussi un probleme du meme genre.
je n'arrives pas afficher les images qui sont stockées dans un dossier :cry:

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

17 août 2021, 16:52

salut tout le monde j'ai aussi un probleme du meme genre.
je n'arrives pas afficher les images qui sont stockées dans un dossier :cry:
Et bien tu ne détournes pas le message d'encoreali vu que non tu n'as pas du tout le même problème que lui. :D

Tu ouvres donc un sujet rien qu'à toi en précisant ton problème, ce que tu as essayé, les messages d'erreur que tu ne comprends pas et en citant les extraits de codes pertinents qui ne fonctionnent pas comme tu souhaiterais :)
Quand tout le reste a échoué, lisez le mode d'emploi...