Bonjour, j'aimerais upload un fichier en php sauf que je ne comprends pas pourquoi mon code ne fonctionne pas Smiley ohwell Smiley decu , je suis bloquée depuis plusieurs jours alors j'espère que quelqu'un pourra m'aider ! Merci d'avance =) Smiley cligne

Je dois pouvoir en fait récupérer des adresses mail noté dans un fichier.csv et ensuite via ma base de données j'affiche les informations des personnes possédant tel ou tel adresse mail. J'y arrive mais il faut que le fichier.csv se trouve au même endroit que mes page.php (mon dossier "CSV"). Le problème est que les utilisateurs vont chercher les fichiers.csv sur leur ordinateur donc il faut que je puisse uploader les fichiers vers ce dossier "CSV". Je ne sais pas si je suis suffisamment clair. Voilà.

Voici mon code pour le upload:

email.php :


<?php
echo "<!DOCTYPE html>
<head>
<title> Fichier csv </title>
</head>

<body>

<form method=\"post\" action=\"import_csv.php\" enctype=\"multipart/form-data\">
<input type=\"hidden\" name=\"MAX_FILE_SIZE\" value=\"100000\" />
<input type=\"file\" name=\"fich\" id=\"fich\"/><br/><br/>
<input type=\"submit\" id=\"importer\" name=\"importer\" value=\"Importer\"/>
</form>

</body>
</html>";
?>





import_csv.php :

<?php
// echo phpinfo();
print_r($_FILES);
$name = $_FILES['fich']['name']; //Le nom original du fichier, comme sur le disque du visiteur (exemple : mon_icone.png).
$type = $_FILES['fich']['type']; //Le type du fichier. Par exemple, cela peut être « image/png ».
$size = $_FILES['fich']['size']; //La taille du fichier en octets.
$tmpName = $_FILES['fich']['tmp_name']; //L'adresse vers le fichier uploadé dans le répertoire temporaire.
$error = $_FILES['fich']['error']; //Le code d'erreur, qui permet de savoir si le fichier a bien été uploadé.
$maxsize = $_POST['MAX_FILE_SIZE'];

echo "name = ".$name."<br/>";
echo "type = ".$type."<br/>";
echo "size = ".$size."<br/>";
echo "tmpName = ".$tmpName."<br/>";
echo "error = ".$error."<br/>";[code=php]


if ($_FILES['fich']['size'] > $maxsize)
{
echo "maxsize = ".$maxsize."<br/>";
echo "Le fichier est trop gros";
}

if ($_FILES['fich']['error'] > 0) $erreur = "Erreur lors du transfert";

$extensions_valides = array('csv');

$extension_upload = strtolower(substr(strrchr($_FILES['fich']['name'], '.') ,1) );
if (in_array($extension_upload,$extensions_valides) ) echo "<br/>Extension correcte";

$nom = "/var/www/html/essai_csv/";
echo "<br/>nom = ".$nom;
$resultat = move_uploaded_file($tmpName,$nom,0777);

if ($resultat)
{
echo "<br/>Transfert réussi";
}else {
echo "<br/>Echec transfert";
}
?>[/code]
Smiley decu
Salut,

Déjà, si ton problème est l'emplacement du fichier lors de la saisie de ton formulaire, l'erreur est dans email.php et non dans import_csv.php. Je n'ai donc pas regardé ce second code.

Pour email.php :

Déjà, pourquoi du PHP juste pour faire un echo ? Mets donc le code html directement ! Le php ne gène pas, mais ne sert à rien, c'est donc la méthode "pourquoi faire simple quand on peut faire compliqué ?".

Ensuite, quelques petites anomalies à voir avant d'aller plus loin (pas sûr que ce soit ça qui coince, quoique...) :
- Il faudrait mettre un DOCTYPE valide
- Il faudrait ouvrir correctement la balise <html> (refermée, mais jamais ouverte !)
- Il faudrait ajouter value="" (ou le nom du fichier par défaut) dans ta balise <input type="file"...>

Après cela, si le problème persiste, il faudrait :
- Si tu persistes à utiliser le php là où le html suffit, t'assurer que le code de la page servie soit bien celui attendu (dans ton navigateur : voir le code source de la page)
- Nous indiquer avec quel(s) navigateur(s) tu constates ce problème et sous quel OS.
Salut jibe74 !
Merci pour ta réponse déjà =)
Ensuite, je n'ai pas seulement cela dans email.php donc j'ai voulu rester dans le même langage pour toute ma page même si j'aurais pu, comme tu le dis, le faire en html ^^.

j'ai rajouté ce qu'il fallait mais cela ne fonctionne toujours pas...
Le code est bien le bon dans le code source de la page ça c'est ok !

J'utilise le navigateur "Mozilla Firefox" et je suis sous linux mint.
J'ai trouvé mon erreur c'est bon ! Merci d'avoir répondu ! =)
Bonne journée à vous tous ! =D Smiley cligne Smiley langue
Salut,

Désolé d'arriver un peu tard : je n'ai pas su trouver comment s'abonner à un sujet qu'on n'a pas ouvert...

Blyh a écrit :
Ensuite, je n'ai pas seulement cela dans email.php donc j'ai voulu rester dans le même langage pour toute ma page même si j'aurais pu, comme tu le dis, le faire en html ^^.

Si je comprends bien, email.php a plus de code, et tu ne nous a donné que ce qui était utile ? Ok. Mais ça n'empêche que tu peux très bien mixer html et php :
<?php
/* Un peu de code php pour commencer, si tu veux, par exemple pour récupérer des variables ou autre utilité */
?>
<DOCTYPE ....>
<html>
<head>
<title="Exemple de mixage html et php" />
</head>
<body>
<?php
/* Un autre bout de code php */
?>
<h1>Et on continue en HTML, avec PHP inclus</h1>
<a href="monautrepage.php?lang=<?php echo $langue; ?>">Cliquez ici pour aller sur l'autre page</a>
<?php /*Et ainsi de suite... */ ?>
</body>
</html>

Et donc tu n'as pas besoin de passer par PHP pour la partie que tu nous a montrée, ce qui ne t'empêche aucunement de l'utiliser plus loin (ou avant) dans ton code.

Dans cet ordre d'idée, tu peux traiter ainsi la réponse à l'upload de ton fichier :
<?php if ($error==false) { ?>
  <div class="fondvert">
    <p>Votre fichier a bien été uploadé. Nous vous en remercions.</p>
<?php }
else { ?>
  <div class="fondrouge">
    <p>Impossible d'uploader le fichier. Vérifiez les droits d'accès et la taille !</p>
<?php } ?>
  </div>

PHP gérérera bien un code ou l'autre selon la valeur de la variable $error, et cela évite des echo inutiles et qui n'améliorent pas la lisibilité. Smiley cligne

Blyh a écrit :
J'ai trouvé mon erreur c'est bon ! Merci d'avoir répondu ! =)

Pas de quoi ! On n'a aucune obligation, donc quand on répond, c'est toujours avec plaisir Smiley smile

Par contre, si tu as deux minutes, c'est toujours sympa d'expliquer comment finalement le problème a été résolu :
- Ça fait toujours plaisir à ceux qui ont répondu de connaître le fin mot de l'histoire avec tous les détails. Dans le cas présent, j'aurais aimé savoir si j'ai loupé quelque chose que j'aurais dû voir (pour essayer de ne pas passer à côté la prochaine fois !) ou si c'était difficile sans avoir les détails que j'ai demandés... et si j'aurais dû en demander d'autres pour nous mettre plus vite sur la voie.
- Et ça peut toujours servir à d'autres qui ont un problème similaire... voire même pour qu'ils sachent quoi faire avant même de pondre du code qui poserait problème ensuite.
Salut Jibe74 =) !

Voici la solution :

- Premièrement, j'indiquais un chemin vers un dossier alors qu'il le faut vers un fichier donc j'ai rajouté mon ".$name;" comme ça je gardes le même nom du fichier importé dans mon dossier.

$name = $_FILES['fich']['name'];
$nom = "/var/www/html/essai_csv/".$name;


- Deuxièmement, la fonction "move_uploaded_file" n'a besoin que de deux paramètres or j'en donnais trois.

$resultat = move_uploaded_file($tmpName,$nom);


Voici le code en entier pour ceux que ça interresse =) ça peut toujours servir !


  <!DOCTYPE html>
	<html>
		<head>
			<title> Fichier csv </title>
		</head>
		<body>
			<form method="POST" action="import_csv.php" enctype="multipart/form-data">
				<input type="file" name="fich" id="fich" value="" /><br/><br/>
				<input type="submit" id="importer" name="importer" value="Importer"/>
			</form>
		</body>
	</html>


le fichier import_csv.php :


<?php
  $name = $_FILES['fich']['name'];
  $type = $_FILES['fich']['type']; 
  $size = $_FILES['fich']['size']; 
  $tmpName = $_FILES['fich']['tmp_name']; 
  $error = $_FILES['fich']['error']; 

  if ($_FILES['fich']['error'] > 0) $erreur = "Erreur lors du transfert";

  $extensions_valides = array('csv');

  $extension_upload = strtolower(substr(strrchr($_FILES['fich']['name'], '.') ,1) );
  if (in_array($extension_upload,$extensions_valides) ) echo "<br/>Extension correcte";

  $nom = "/var/www/html/essai_csv/".$name;
  $resultat = move_uploaded_file($tmpName,$nom);

  if ($resultat)
  {
        echo "<br/>Transfert réussi";
  }else {
        echo "<br/>Echec transfert";
  }
?>
Salut,

Merci pour toutes ces précisions !

Blyh a écrit :
- Premièrement, j'indiquais un chemin vers un dossier alors qu'il le faut vers un fichier

Effectivement, ça c'est le piège ! C'est le truc qu'on oublie toujours de préciser quand on poste, or si on ne le précise pas, les contributeurs ne peuvent pas le deviner !

Blyh a écrit :
- Deuxièmement, la fonction "move_uploaded_file" n'a besoin que de deux paramètres or j'en donnais trois.

Effectivement !

C'est sympa d'avoir partagé ton code : ça en aidera sûrement certains. Merci pour eux ! Smiley smile