enregistrer une image uploidée dans la bdd....

Petit nouveau ! | 6 Messages

31 oct. 2005, 14:56

Bojour,

J'ai un script qu'un collègue m'a fait pour uploider une image et la redimenssionner. Ce script fonctionne à merveille.
L'image uploidéé est supprimée et la nouvelle est bien stockée dans le dossier de déstination avec les dimenssion voulue.
Par contre, j'ai essayé de l'enregistrer dans la bdd et je n'y arrive pas.
Aussi je désire pouvoir suprimer l'image du dossier si le chemin est supprimé de la bdd.
J'ai fait des test inimaginagle, fouiner dans les forum et aussi trouver des tutos mais là je sèche....
Pourriez vous m'aider!!!
Ci dessous vous trouverez le script :

Code : Tout sélectionner

<html> <head> <title>Upload des images</title> </head> <body> Veuillez sélectionner l'image que vous voulez envoyez sur notre serveur <br> <form action="upload.php" method="post" enctype="multipart/form-data"> <input type="file" name="fichier" value=""\> <br> <input type="submit" name="" value="Envoyer"\> </form> </body> </html>
<?PHP		
if(extension_correct($fichier_name)){
upload($fichier,$fichier_name);				 
}
else{
echo "votre fichier n'a pas été pris en charge car ce n'est pas une image";
}	
function extension_correct($fichier){
//liste des formats corrects
$liste=array('jpg','jpeg','png','gif','JPG','JPEG','PNG','GIF');
$extension=extensionFichier($fichier);
for($i=0;$i<sizeOf($liste) && $b==0;$i++)
if($extension==$liste[$i])$b=1;
return $b;
}
function extensionFichier($fichier){
//Récupération d el'extension du fichier
$ext=explode(".",$fichier);
return $ext[sizeOf($ext)-1];
}
function nomCorrect($nom){
if(file_exists('logo\\'.$nom.'.png'))$nom=time().$nom;
if(file_exists('img\\'.$nom.'.png'))$nom=time().$nom;
return $nom;
}
function upload($fichier,$nom){
//On vérifie qu'un fichier ne porte pas déjà ce nom sinon on modifiera son nom
$nom=nomCorrect($nom);
if (copy($fichier,$nom)){		
echo $nom." envoyé et stocké sur notre serveur.";		
//Création d'un logo
redimensionne($nom,350,150,'logo\\'.$nom.'.png');
//Création de l'image
redimensionne($nom,250,250,'img\\'.$nom.'.png');		
//Suppression du fichier temporaire
unlink($nom);			
}
else{
echo "Envoi du fichier échoué";	
}		
}
function redimensionne($fichier,$width,$height,$dest){
list($w,$h)=getimagesize($fichier);
list($w,$h,$width,$height)=calcResolutionOptimale($w,$h,$width,$height);
$buffer=imagecreate($width,$height);
$extension=extensionFichier($fichier);
switch ($extension){
case "JPG":
case "jpg":
$image=imagecreatefromjpeg($fichier);
break;
case "GIF":
case "gif":
$image=imagecreatefromgif($fichier);
break;
case "PNG":
case "png":
$image=imagecreatefrompng($fichier);
break;				
}					
imagecopyresized($buffer,$image,0,0,0,0,$width,$height,$w,$h);
imagepng($buffer,$dest);		
}	
function calcResolutionOptimale($w,$h,$width,$height){
return array($w,$h,$width,$height);		
}	   
?>  

Mammouth du PHP | 1776 Messages

31 oct. 2005, 15:15

Avant d'insérer le lien en BDD, tu chopes l'ancien lien de l'image. Ensuite tu upload l'img sur ton ftp via le script et tu inseres en bdd le nouveau lien.
Enfin, si l'insertion s'est bien deroulé, tu fais un unlink() de ton ancienne img (dont tu as chopé le lien au tout début).

La bonne methode que j'utilise, c'est que les photos ont le nom d'id de chaque membre...je m'explique:
Un membre a l'identifiant 3, la photo sera renommée 3_1.jpg (si c'est la première photo...). Ensuite, un seul champs en bdd indiquera dans un tableau les photos disponibles (1==>TRUE, 3 ==> TRUE etc...)
Ainsi, dans mon exemple la photo deux a été supprimé et pas remplacé. Ce n'est pas bien grave...une fonction en php permet de lister QUE la lignes existantes d'un tableau en passant par au dessus des autres.
Au final, on recompose les images presentes ==>
3_1.jpg
3_3.jpg
Note: bien sûr, si le membre supprime l'image, elle disparaitra du ftp mais egalement du array()...

Voilà pour la technique. Ca évite d'avoir tous des liens en BDD...surtout si tu veux plusieurs img par membre.

Eléphant du PHP | 493 Messages

31 oct. 2005, 15:29

tu peux aussi inserer le contenu base64_encode()é de ton image.

Petit nouveau ! | 6 Messages

31 oct. 2005, 15:35

Merci pour ta réponse mais pour moi c'est du chinois, je ne suis pas assez calé dans le php .
J'ésperais simplement pouvoir récuperer le nom du chemin de l'image uploidée pour l enregistrer dans la bdd.

Merci quand meme

FRancis

Mammouth du PHP | 1776 Messages

31 oct. 2005, 15:43

Merci pour ta réponse mais pour moi c'est du chinois, je ne suis pas assez calé dans le php .
J'ésperais simplement pouvoir récuperer le nom du chemin de l'image uploidée pour l enregistrer dans la bdd.

Merci quand meme

FRancis
:shock: Le nom du chemin de l'image uploadé, c'est à toi de le définir !
Donc tu peux le reprendre ! vu que tu le connais...
Je ne vois pas où se situe ton problème ? :roll:

Petit nouveau ! | 6 Messages

31 oct. 2005, 15:55

Oui je connais le nom du chemin de l'image uploidé '' quand elle est stockée sur ''TMP'' ensuite elle n'existe plus.
Donc ce que je souhaite, c'est pouvoir l'enregistrer avec le vrai chemin de déstination avant qu'elle soit supprimer. Du moins c'est ce que j'ai compris dans les forum
Francis

Petit nouveau ! | 6 Messages

31 oct. 2005, 16:04

D'aprés ce que j'ai compris
Quand l'image est uploidée, je trouve son chemin
$_FILES['logo']['tmp_name'] retourne le chemin du fichier temporaire sur le serveur
Par contre je ne sais pas récuperer le nouveau chemin. On me parle de
move_uploaded_file ????

Mammouth du PHP | 1776 Messages

31 oct. 2005, 16:04

Oui je connais le nom du chemin de l'image uploidé '' quand elle est stockée sur ''TMP'' ensuite elle n'existe plus.
Donc ce que je souhaite, c'est pouvoir l'enregistrer avec le vrai chemin de déstination avant qu'elle soit supprimer. Du moins c'est ce que j'ai compris dans les forum
Francis
:?
Ba il faut réfléchir deux secondes (tkt, pas plus...)
Ton script fait quoi ? Ou veux-tu arriver ?
Allez, je vais t'aider à répondre à ces deux questions...
- Tu valide ton formulaire incluant l'image
- Ca execute une page dans laquelle l'image aura été telechargé temporairement.
- A partir de là, tu exécutes tes travaux sur l'image
- Tu l'enregistres sur le ftp
- TU vide le temporaire

exemple:
$size = getimagesize($_FILES['image_2']['tmp_name']); //dimensions
$src_w = $size[0]; //dimensions
$src_h = $size[1]; //dimensions
$destination = imagecreatetruecolor(320,240); //on créé une image vide
$src_im = imagecreatefromjpeg($_FILES['image_2']['tmp_name']); // on chope son emplacement
imagecopyresized($destination,$src_im,0,0,0,0,320,240,$src_w,$src_h); // on colle l'image telechargé dans l'image vide en la redimensionnant
imagejpeg($destination,"../images_upload/".$result_query['id']."_b.jpg"); // on l'enregistre sur le serveur
imagedestroy($destination);  // on détruit l'img vide 
imagedestroy($src_im); // on détruit m'img temporaire

Petit nouveau ! | 6 Messages

31 oct. 2005, 16:09

Alors là, des gars comme toi je n'en connais pas beaucoup, vraiment je te remercie.
Je le met en place de suite.Je te tiens au courant, Merci

Francis

Mammouth du PHP | 1776 Messages

31 oct. 2005, 16:10

D'aprés ce que j'ai compris
Quand l'image est uploidée, je trouve son chemin
$_FILES['logo']['tmp_name'] retourne le chemin du fichier temporaire sur le serveur
Par contre je ne sais pas récuperer le nouveau chemin. On me parle de
move_uploaded_file ????
non, move_uploaded_file c pour la transférer vers le chemin que tu définis sur ton serveur (ftp). COmme je te l'ai dis, le nouveau chemin, c'est toi qui le définit.
Mise en situation:
tu vas faire tes courses dans les rayons (ton pc). Arrivé à la caisse tu place tout sur le tapis (ton fichier temporaire). Après avoir passé, tu les remets dans le caddy (ton serveur). Seulement, il faut prendre les courses et le mettre dans le caddy, ca se fait pas automatiquement (move_uploaded_file) et pour cela, il faut que tu sache où est ton caddy, son emplacement (sinon tu reste avec les courses dans les bras...et comme t'en as fait bcp, ba tu laisse tout là et tu repartirais comme ça).
Au final, faut savoir l'emplacement de ton caddy, pour tout mettre dedans.
Au final, faut savoir l'emplacement ou mettre les img sur ton serveur, pour qu'elles soient telechargées... :wink:

Mammouth du PHP | 1776 Messages

31 oct. 2005, 16:11

Alors là, des gars comme toi je n'en connais pas beaucoup, vraiment je te remercie.
Je le met en place de suite.Je te tiens au courant, Merci

Francis
A noter que ce script est mis en place simplement pour les jpg..., donc il faudra adapter, ce n'est qu'un exemple :wink:

Petit nouveau ! | 6 Messages

31 oct. 2005, 16:24

Bon, je te fais une proposition,
Par rapport à mon script du haut, peut tu me le finir ?
Je te propose 50 € ???
C'est un site que je veux mettre sur le reseau et à cause de ce script, je galère......

Francis

Mammouth du PHP | 1776 Messages

31 oct. 2005, 16:26

Bon, je te fais une proposition,
Par rapport à mon script du haut, peut tu me le finir ?
Je te propose 50 € ???
C'est un site que je veux mettre sur le reseau et à cause de ce script, je galère......

Francis
[email protected]
MSN ou e-mail :wink: