Problème d'upload de fichiers

vleeks Messages postés 32 Statut Membre -  
Pitet Messages postés 2845 Statut Membre -
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 2845 Statut Membre 527
 
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