Page 1 sur 1

Script d'upload d'image et min avec insertion BDD

Posté : 11 mars 2011, 16:09
par lorenzo16000
Bonjour, je suis nouveau sur ce forum et c'est avec désespoir que je post ici afin d'avoir de l'aide, je vous préviens je suis un très grand débutant qui essaye de comprendre j'ai donc fait un script d'upload de 4 images a partir d'une class qui me crée la miniature, il se trouve que je souhaiterais que le script renommer mes images automatiquement avec un time() ou un rename ou rand() etc...... avant de l'uplodé sur le serveur et de l'inséré dans ma BDD, je joins tous le code mais attention je vous demande juste un peu d'indulgence je suis vraiment débutant dans le domaine, si par contre vous avez des chose a me conseiller etcc vos idée et vos conseille seront les bien venu.
<?php
	require "../imgClass.php";
	require "../config.php";

	/* Appel du fichier contenant la fonction pagination() */
  include('../libs/pagination.php');
 
  /* Connexion à la BDD (se place normalement dans un fichier externe) */
  define('DB_HOST', '....');
  define('DB_USER', '....');
  define('DB_PASSWORD', '....');
  define('DB_NAME', '....');
   $dbc = @mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
  if (!$dbc)
  {
    trigger_error('Connexion à la BDD impossible : ' . mysqli_connect_error() );
    exit();
  }
	
	//Traitement données.
	if(!empty($_FILES)){
			$img = $_FILES['img'];
			$img2 = $_FILES['img2'];
			$img3 = $_FILES['img3'];
			$img4 = $_FILES['img4'];
			
			$ext = strtolower(substr($img['name'],-3));
			$ext = strtolower(substr($img2['name'],-3));
			$ext = strtolower(substr($img3['name'],-3));
			$ext = strtolower(substr($img4['name'],-3));
			
			$allow_ext = array('jpg');//posibilité d'ajouter des extentions autre exemple('jpg','png','gif')
			$erreur1 = '';
			if(empty($_FILES['img']['name'])
			|| empty($_FILES['img2']['name'])
			|| empty($_FILES['img3']['name'])
			|| empty($_FILES['img4']['name']))
			{
			$erreur1 = '<h2 style="font-weight:bold; font-size:19px; margin:1px 323px">Veuillez charger toutes les images !</h2>';
			}
			
			$erreur2 = '';
			if((file_exists('../../photos-motos-occasions/grand-format/'.$img['name'])) 
			|| (file_exists('../../photos-motos-occasions/grand-format/'.$img2['name']))
			|| (file_exists('../../photos-motos-occasions/grand-format/'.$img3['name']))
			|| (file_exists('../../photos-motos-occasions/grand-format/'.$img4['name'])))
			{
			$erreur2 = '<h2 style="font-weight:bold; font-size:19px; margin:1px 323px">Le nom d\'une des images existe déja !</h2>';
			}
			else{
 
			
			if(in_array($ext,$allow_ext)){
				move_uploaded_file($img['tmp_name'],"../../photos-motos-occasions/grand-format/".$img['name']);
				move_uploaded_file($img2['tmp_name'],"../../photos-motos-occasions/grand-format/".$img2['name']);
				move_uploaded_file($img3['tmp_name'],"../../photos-motos-occasions/grand-format/".$img3['name']);
				move_uploaded_file($img4['tmp_name'],"../../photos-motos-occasions/grand-format/".$img4['name']);
				
				Img::creerMin("../../photos-motos-occasions/grand-format/".$img['name'],"../../photos-motos-occasions/photo-annonce/",$img['name'],170,128);//image redimentioné en image min
				Img::creerMin("../../photos-motos-occasions/grand-format/".$img2['name'],"../../photos-motos-occasions/min/",$img2['name'],140,68);//image redimentioné en image min
				Img::creerMin("../../photos-motos-occasions/grand-format/".$img3['name'],"../../photos-motos-occasions/min/",$img3['name'],140,68);//image redimentioné en image min
				Img::creerMin("../../photos-motos-occasions/grand-format/".$img4['name'],"../../photos-motos-occasions/min/",$img4['name'],140,68);//image redimentioné en image min
				
				Img::convertirJPG("../../photos-motos-occasions/grand-format/".$img['name']);
				Img::convertirJPG("../../photos-motos-occasions/grand-format/".$img2['name']);
				Img::convertirJPG("../../photos-motos-occasions/grand-format/".$img3['name']);
				Img::convertirJPG("../../photos-motos-occasions/grand-format/".$img4['name']);
				extract($_POST);
	$GrandFormat1 = "../../photos-motos-occasions/grand-format/".$img2['name'];
	$GrandFormat2 = "../../photos-motos-occasions/grand-format/".$img3['name'];
	$GrandFormat3 = "../../photos-motos-occasions/grand-format/".$img4['name'];
	$PhotoAnnonce = "../../photos-motos-occasions/photo-annonce/".$img['name'];
	$PhotoAnnonce2 = "../../photos-motos-occasions/grand-format/".$img['name'];
	$Miniature1 = "../../photos-motos-occasions/min/".$img2['name'];
	$Miniature2 = "../../photos-motos-occasions/min/".$img3['name'];
	$Miniature3 = "../../photos-motos-occasions/min/".$img4['name'];
	
	$date = $_POST['date'];
	$sql="INSERT INTO motosOccasions (
	titreAnnonce,
	Cyleindre,
	Annee,
	Prix,
	AncienPrix,
	Type,
	Marque,
	Modele,
	Couleur,
	MiseEnCirculation,
	Kilometrage,
	Garantie,
	Descriptif,
	GrandFormat1,
	GrandFormat2,
	GrandFormat3,
	PhotoAnnonce,
	PhotoAnnonce2,
	Miniature1,
	Miniature2,
	Miniature3,
	
	date) VALUES (
	
	'".mysql_real_escape_string($titreAnnonce)."',
	'".mysql_real_escape_string($Cyleindre)."',
	'".$Annee."',
	'".$Prix."',
	'".$AncienPrix."',
	'".mysql_real_escape_string($Type)."',
	'".mysql_real_escape_string($Marque)."',
	'".mysql_real_escape_string($Modele)."',
	'".mysql_real_escape_string($Couleur)."',
	'".mysql_real_escape_string($MiseEnCirculation)."',
	'".$Kilometrage."',
	'".mysql_real_escape_string($Garantie)."',
	'".mysql_real_escape_string($Descriptif)."',
	'".$GrandFormat1."',
	'".$GrandFormat2."',
	'".$GrandFormat3."',
	'".$PhotoAnnonce."',
	'".$PhotoAnnonce2."',
	'".$Miniature1."',
	'".$Miniature2."',
	'".$Miniature3."',
	NOW())";
	$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
			if($req);
			$modif = "<img style=\"margin:-7px 460px;\" src=\"../images/valide.gif\"/><h2 style=\"margin:-13px 110px -4px; color:GreenYellow\">Nouvelle annonce importer avec succé</h2>";
			
			}
			else{
			$nonmodif = "<img style=\"margin:-7px 460px;\" src=\"../images/error.gif\"/><h2 style=\"margin:-13px 110px -4px; color:GreenYellow\">Votre fichier n'est pas une image JPG ou un fichier non conforme</h2>";
		}
	}
}
?>

Re: Script d'upload d'image et min avec insertion BDD

Posté : 11 mars 2011, 16:35
par moogli
salut,

utilise les balise php (juste au dessus de la zone de saisie) pour mettre le code en couleur la c'est un peu imbuvable ;)

pour ce qui est de ton code il y a un soucis au niveau de la construction. a tu regardé la doc de move_uploaded_file ?

sur le principe tu devrais nommer les champs file avec la notation tableau (par exemple name="img[]") tu récupère ainsi un tableau que tu traite avec la fonction foreach. L'avantage c'est que ton code reste plus clair et plus maintenable ;)
dans le même esprit je pense que tu devrais profiter de la une structure du systeme de fichier que tu a fait pour ne pas mettre plusieurs noms.

D'ailleurs tu devrais avoir une table qui s'occupe des images et une des annonces, ainsi tu peut mettre autant d'image que tu veut sans polluer la table annonce.
concrètement cela revient a virer les champs grandformat photo mini (9 champs quand même ;)) et de remplacer cela par une table
par exemple
create table imagesAnnonces(
idImage int unsigned not null auto_increment,
idAnnonce int unsigned not null,
nomImage text not null,
primary key(idImage)
)type=MyIsam
Le format de idAnnonce est à mettre en corrélation avec la clef primaire de la table des annonces (d'ailleur tu pourrais utilise le type de table innodb plutot que Myisam pour exploiter les clefs étrangères).

avec tous ça quand tu valide le formulaire tu utilise un foreach sur les champ de type file ça te permet de ne pas de prendre la tête si au bout on ne met qu'un image (avec ton code tu a une erreur si une image n'est pas "remplis").
Pour ce qui est du nommage de l'image tu peut utiliser plusieurs méthode, un nom unique bien entendu, mais par exemple contenant l'id de l'annonce avec un index (de 1 à 3 dans ton cas) + un timestamp, tu peut aussi simplement utiliser uniqid pour avoir un nom unique a chaque fois (cela ne dispense pas quand même de vérifier l'existence du fichier sur le disque :) ).

cela peut paraitre bien compliqué mais au final tu peut gérer plus facilement les images et éviter d'avoir des champs inutile et parfois dans la table annonces.
pour ce qui est du stockage des images c'est "simple" tu garde ta structure de fichier (c'est a dire un dossier grande format, un dossier miniature et un dossier "normal" ?) mais tu met dans chaque dossier des images avec le même nom cela va te permettre d'avoir une seul ligne dans la table pour (au final) une seule image mais avec 3 formats différent. lors de l'affichage tu choisis le bon répertoire ;)

Je te propose de regarder la classe de AB qui permet l'upload, la retaille de l'image et le renommage ;)
avec cette classe ta validation de formulaire peut tenir sur une dizaine de ligne :)

@+

Re: Script d'upload d'image et min avec insertion BDD

Posté : 11 mars 2011, 17:50
par lorenzo16000
Pouwaaa enorme ton explication je suis content de trouver des gens comme toi sur le net, je t'avoue que ton explication me parait valide mais je suis actuellement en formation et je t'avoue que pour faire ce que tu me dit je suis pas si sûr de pouvoir le faire correctement avec une clés étranger etcc jamais fait :?

Esque tu pense que l'on peu se capter autre part genre msn pour que l'on puisse mettre ça en place ?
sinon MERCI POUR TON AIDEEE

Re: Script d'upload d'image et min avec insertion BDD

Posté : 11 mars 2011, 21:59
par moogli
le coup des clef étrangères tu peut t'en passer pour commencer il te faudra juste la gérer à la main ce qui n'est pas si compliqué que cela.

sache simplement que le fait d'utiliser dans une table la valeur d'une clef primaire (pour faire référence à un tuple) s'appel une clef étrangère (car ce n'est pas une clef de la table).

donc si j'ai la table annonces avec
idAnnonce : clef primaire
nom
date
etc

et imagesAnnonces avec
idimage clef primaire
idAnnonce
etc

dans la table imagesAnnonces idAnnonce permet la liaison avec une annonce qui se trouve dans la table annonces. cette liaison c'est la relation entre les tables (ici 1 à n) elle te permet de retrouver les images d'une annonce grace à idAnnonce :)
ic idAnnonce est une clef étangère dans la table imagesAnnonces.

Pour ce qui est de bucher sur le SQL ma préférence va vers http://sqlpro.developpez.com/ c'est très complet.

Donc dans ton cas tu a un formulaire pour ajouter une annonce. Dedans il y a un ou plusieurs champs de type images.
Lors de la validation du formulaire tu insère les données de l'annonce dans la table annonces ensuite tu effectue l'upload des images et tu insère dans la table imagesAnnonces les noms des images avec l'id de l'annonce insérée :)

Cela te permet de changer le nombre d'image possible à la volée sans changer le code, tu peu supprimer une image sans modifier l'annonce et ainsi éviter d'avoir des champs vide (qui prennent quand même de la place sur le disque puisse que le champs existe ^^).

essai de mettre cela en place et revient si tu bloque ;)

@+