Problème d'upload de fichiers

Fermé
vleeks Messages postés 29 Date d'inscription jeudi 20 décembre 2012 Statut Membre Dernière intervention 7 octobre 2014 - 2 sept. 2013 à 11:54
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 - 2 sept. 2013 à 12:30
Bonjour,

j'ai un soucis dans mon script. Je développe le site web d'une startup et il doit être possible d'ajouter des "produits". Pour chaque produit, une image correspondante, et la possibilité d'uploader des fichiers comme le manuel d'utilisation...

Bref, j'ai un joli formulaire ou tout fonctionne sauf 2 choses, l'upload de l'image, et l'éventuel upload du fichier lié. VOici l'input pour chaque fichier :

Pour l'image :
<input type="file" name="pict_prod" id="pict" accept="image/jpeg, image/jpg, image/png, image/gif" />


Pour le fichier lié :
<input type=file name="ddl_file" />


Maintenant la partie PHP :
include("data_transfert.php");
		include("connectdb.php");
		
		/* Définition des variables */
		$type_prod     = Securite::bdd($_POST['type']);
		$titre   	   = Securite::bdd($_POST['title_prod']);
		$img_name      = $_FILES["pict_prod"]["name"];
		$img_desc_fr   = Securite::bdd($_POST['pict_description_fr']);
		$img_desc_en   = Securite::bdd($_POST['pict_description_en']);
		$text_fr       = Securite::bdd($_POST['text_fr']);
		$text_en   	   = Securite::bdd($_POST['text_en']);
		
		move_uploaded_file($_FILES["pict"]["tmp_name"],
		"../images/" . $_FILES["pict"]["name"]);
		
		if(isset($_POST['ddl'])) { //Si un téléchargement est ajouté à la page
		
			$name           = $_FILES["ddl_file"]["name"];
			$type           = Securite::bdd($_FILES["ddl_file"]["type"]);
			$size           = Securite::bdd($_FILES["ddl_file"]["size"] / 1024); //Pour des kilobytes (Kb)
			$description_fr = Securite::bdd($_POST['file_desc_fr']);
			$description_en = Securite::bdd($_POST['file_desc_en']);
			
			if (file_exists("upload/" . $name))
			{
				header("location:panel.php?msg=Nom du fichier déjà utilisé");
			}
			
			else
			{
				$location = "/upload/". $name;
				move_uploaded_file($_FILES["ddl_file"]["tmp_name"],
				"../upload/" . $_FILES["ddl_file"]["name"]);
				
				
				$sql = "INSERT INTO files(name, extension, taille, location, description_fr, description_en, timestamp) VALUES('".$name."', '".$type."', '".$size."', '".$location."', '".$description_fr."', '".$description_en."', '" .time()."')"; 
				mysql_query($sql) or die('Erreur SQL lors de l\'insertion !<br>'.mysql_error()); 
				
				$id_ddl = "SELECT id FROM files WHERE name = '".$name."' "; //On récupre l'id du fichier qui vient d'être ajouté
			}
		}
		
		$id_d = "";
		
		if(isset($id_ddl)) { //Si le fichier a été uploadé
			$id_d = $id_ddl;	
		}
		else { //Sinon on ne lie rien
			$id_d = 0;
		}
		
		$sql2 = "INSERT INTO produits(type, titre, pict, description_img_fr, description_img_en, text_fr, text_en, ddl_id) VALUES('".$type_prod."', '".$titre."', '".$img_name."', '".$img_desc_fr."', '".$img_desc_en."', '".$text_fr."', '".$text_en."', '".$id_d."')"; 
		mysql_query($sql2) or die('Erreur SQL lors de l\'insertion !<br>'.mysql_error()); 
		
		mysql_close();
		header("location:panel.php?msg=Produit ajouté ".$_FILES["pict"]["name"]."");


Le script récupère chaque donnée passée et fonctionne bien. Il est également censé récuperer le nom de l'image et stocker le nom dans la base, et si il est demandé d'uploader un fichier, alors les infos de ce fichier sont censées être uploadées vers une table qui recence les fichiers (l'image n'a rien à voir, elle est propre au produit, le manuel d'utilisation lui doit pouvoir être atteignable partout).

Le truc c'est que tout est bien transferé dans la base, sauf le nom de l'image, ou rien n'est passé, et si je veux uploader un fichier, la taille, le nom ne sont pas passés. De plus, l'id du fichier que je suis censé récuperer reste à 0.

Ou est mon erreur ?
Merci beaucoup du temps que vous passez pour m'aider !
A voir également:

1 réponse

Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
2 sept. 2013 à 12:30
Salut,

Première piste : ajouter l'attribut enctype au formulaire (on l'oublie souvent)

<form method="post" action="page.php" enctype="multipart/form-data">


Bonne journée
0