Page 1 sur 2

Cherche méthodes pour ajouter photos associer a Un ID

Posté : 07 sept. 2006, 14:59
par fabien_14
bonjour

Alors en faite c'est plus pour m'expliquer comment faire ou alors si une base existe que je recherche car j'au du mal a démarer ....

j'ai une sorte de libre d'or et je voudrai que les gens puissent donc mettre un petit mot mais aussi et c'est la que je bloque puisse mettre 10 ou 20 photos.

En gros sa ferai comment ceci
Message 1 Posté par Fabien a 14;59.
texte du message du livre d'or blablabla ... [voir photos] (< c ceci que je voudrai faire quand je cliqque dessus ca maffiche les photos.)
Merci de votre aide.

Posté : 07 sept. 2006, 15:04
par charabia
Chaque message correspond un ID. Tu peux avoir une table d'images qui réunit toutes les images, et à pour chaque image, tu rajoutes un champ id pour faire la correspondance.

Ensuite quand on clique sur le lien avec l'identifiant, cela mène vers une page avec la bonne requête.

Posté : 07 sept. 2006, 15:12
par fabien_14
Ok merci :)

je vois a peu pret le principe.

Je vais essayer de me basé la dessus pour inserer les images : http://www.supinfo-projects.com/fr/2006 ... s_mysql/4/

je pense revenir :) j'aurai sans doute d'autre question ;)

Posté : 07 sept. 2006, 15:14
par charabia
Evites de stocker des images en BDD. Stockes juste l'URL ;)

Posté : 08 sept. 2006, 00:51
par fabien_14
--- Edit jai changer de code

Posté : 08 sept. 2006, 10:27
par fabien_14
Me revoila ... pas bcp dormi dédiou ji arriverai.

pour la structure de la base de donnée c'est mieux de faire comme ceci pour stoker les images ?

CREATE TABLE `up_image` (
`id` int(10) NOT NULL default '0',
`id_auteur` varchar(10) NOT NULL default '',
`nom_auteur` varchar(40) NOT NULL default '',
`rubrique` varchar(5) NOT NULL default '',
`id_parent` varchar(10) NOT NULL default '',
`image1` varchar(50) NOT NULL default '',
`image2` varchar(50) NOT NULL default '',
`image3` varchar(50) NOT NULL default '',
`image4` varchar(50) NOT NULL default '',
`image5` varchar(50) NOT NULL default '',
`image6` varchar(50) NOT NULL default '',
`image7` varchar(50) NOT NULL default '',
`image8` varchar(50) NOT NULL default '',
`image9` varchar(50) NOT NULL default '',
`image10` varchar(50) NOT NULL default '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

Merci :)

Posté : 08 sept. 2006, 10:32
par Cyrano
Tu devrais jeter un coup d'oeil ici pour voir comment tu pourrais avantageusement optimiser cette structure.

Posté : 08 sept. 2006, 10:41
par iclo
Salut, je vais me permettre de te donner quelques conseils.

Ta structure de base de donnée me fait un peu peur, car si les gens ont peu de photos (1 ou 2 en moyenne par ex) ce ne sera pas très optimal, d'avoir tout des champs vide pour les autres photos. Ensuite il est possible qu'un jour tu souhaites permettre d'avoir plus que 9 photos par membre.

Il vaudrait mieux avoir deux tables: une Membre, avec les informations propres à un membre, et une autre avec les couples idPhotos et IdMembres. le champ idMembre faisant référence au champ id de la table membre.
Avec cette structure, tu n'es pas limité sur le nombre de photo.

Ensuite, je ne comprends pas trop pourquoi tu dois avoir une création dynamique de répertoire, la base de donnée te permet de faire le lien entre les photos et les membres, tu peux donc les stocker toutes dans un même dossier.
Par la même occasion, il est nécessaire d'utiliser un nom unique pour les fichiers photos, pour qu'il n'y ai pas de remplacement d'une photo existante par celle d'un autre membre, pour ça l'idPhoto de la table des photos, peut-être utilisé vu qu'il sera en autoincrément et donc unique.

Posté : 08 sept. 2006, 10:53
par fabien_14
Je commence a voir, je vait regarder la structure de la base de donnée effectivement c'est pas top.

Sinon j'ai deja une zone membre avec id ... Id_auteur est ici pour justement corréler l'image a son auteur.

Pour les dossier j'etais parti pour avoir une creation des dossier dynamique afin de pouvroir structurer tous ceci. Je vai voir ceci :)

Sinon j'ai donc reussi a faire tou ca (creation de dossier) et upload multiple.

Cependant (meme si je vai revoir la structure de la BDD image avec ce code

Code : Tout sélectionner

<?php if ($_GET['e'] == TRUE ) { $rub = "1"; $idme = "$userid"; $aaa = "$rub$idme"; $path_big = "image_up/photos_carnet"; $path_thumbs = "$path_big/$aaa/mini"; if(file_exists("$path_big/$aaa/index.html")) { echo ""; } else { mkdir ("$path_big/$aaa", 0777); mkdir ("$path_big/$aaa/mini", 0777); $fichier = fopen("$path_big/$aaa/index.html", "w+"); } //the new width of the resized image. $img_thumb_width = 100; // in pixel $extlimit = "yes"; //Do you want to limit the extensions of files uploaded (yes/no) //allowed Extensions $limitedext = array(".gif",".jpg",".png",".jpeg",".bmp"); //check if folders are Writable or not //please CHOMD them 777 if (!is_writeable($path_thumbs)){ die ("Erreur: Le dossier <b>($path_thumbs)</b> n'est pas accessible"); } if (!is_writeable($path_big)){ die ("Erreur: Le dossier <b>($path_big)</b> n'est pas accessible"); } //if the for has submittedd if (isset($_POST['upForm'])){ foreach ($_FILES['imgfile']['tmp_name'] as $key => $value) { $file_tmp=$value;//nom reel de l'image $file_type = $_FILES['imgfile']['type'][$key]; $file_name = $_FILES['imgfile']['name'][$key]; $file_size = $_FILES['imgfile']['size'][$key]; //check if you have selected a file. //if(!is_uploaded_file($file_tmp)){ //echo "Error: Veuillez sélectionner une image!. <br />--<a href=\"#\">retour</a>"; //exit(); //exit the script and don't do anything else. //} //check file extension $ext = strrchr($file_name,'.'); $ext = strtolower($ext); if (($extlimit == "yes") && (!in_array($ext,$limitedext))) { //echo "L'extension du fichier sélectionné n'est pas correcte. <br /><a href=\"#\">retour</a>"; exit(); } //get the file extension. $getExt = explode ('.', $file_name); $file_ext = $getExt[count($getExt)-1]; //create a random file name $rand_name = md5(time()); $rand_name= rand(0,999999999); //get the new width variable. $ThumbWidth = $img_thumb_width; //keep image type if($file_size){ if($file_type == "image/pjpeg" || $file_type == "image/jpeg"){ $new_img = imagecreatefromjpeg($file_tmp); }elseif($file_type == "image/x-png" || $file_type == "image/png"){ $new_img = imagecreatefrompng($file_tmp); }elseif($file_type == "image/gif"){ $new_img = imagecreatefromgif($file_tmp); } //list width and height and keep height ratio. list($width, $height) = getimagesize($file_tmp); $imgratio=$width/$height; if ($imgratio>1){ $newwidth = $ThumbWidth; $newheight = $ThumbWidth/$imgratio; }else{ $newheight = $ThumbWidth; $newwidth = $ThumbWidth*$imgratio; } $resized_img = imagecreatetruecolor($newwidth,$newheight); imagecopyresized($resized_img, $new_img, 0, 0, 0, 0, $newwidth, $newheight, $width, $height); //save image Imagepng ($resized_img,"$path_thumbs/$rand_name _mini.png"); ImageDestroy ($resized_img); ImageDestroy ($new_img); echo "<br>Image Thumb: <a href=\"$path_thumbs/$rand_name _mini.png\" target=\"_new\" >$path_thumbs/$rand_name _mini.png</a>"; } //envoyer la grosse image///////////////////// move_uploaded_file ($file_tmp, "$path_big/$aaa/$rand_name.$file_ext"); echo "<br>grosse image: <a href=\"$path_big/$rand_name.$file_ext\" target=\"_new\">$path_big/$rand_name.$file_ext</a>"; echo "<br /><h3>Les photos ont bien étaient envoyés elle seront disponible après vérification</h3>"; } ?> <br /><br/> <? }}else{ //if the form hasn't been submitted. } ?> <br /><h3>Formulaire d'envoie de photos</h3> <form method="post" name="upForm" enctype="multipart/form-data" action="index.php?dest=up&e=1"> <input type="file" name="imgfile[]" /><br /> <input type="file" name="imgfile[]" /><br /> <input type="file" name="imgfile[]" /><br /> <input type="file" name="imgfile[]" /><br /> <input type="file" name="imgfile[]" /><br /> <input type="file" name="imgfile[]" /><br /> <input type="file" name="imgfile[]" /><br /> <input type="file" name="imgfile[]" /><br /> <input type="file" name="imgfile[]" /><br /> <input type="file" name="imgfile[]" /> <br /><br /> <input type="Submit" name="upForm" value="Envoie de l'image" /> <br /><br /> <img src='' name='img_vv' width='0'> </form>
Comment on reconnais le nom de l'image a inserer dans la base ?

Code : Tout sélectionner

INSERT INTO `up_image` VALUES (1, '1', 'root', '5', '25', 'image1', 'image2', 'image3', 'image4', 'image5', '', '', '', '', '');
Les images 1;2;3;4;5 je ne vois pas les variable :?

Merci !!!

Posté : 08 sept. 2006, 11:01
par fabien_14
Je revien de faire la structure de la table

CREATE TABLE `up_image2` (
`id_photos` int(10) NOT NULL default '0',
`id_membres` int(10) NOT NULL default '0',
`rubrique` int(10) NOT NULL default '0',
`description` text NOT NULL,
`id_parent` int(10) NOT NULL default '0',
PRIMARY KEY (`id_photos`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

Donc si j'ai bien compris il faut que pour chaque photos envoyé sa s'insere comme un nouvel enregistrement ?

Posté : 08 sept. 2006, 11:04
par iclo
Tu dois l'avoir dans ceci : $_FILES['imgfile']['name'][$key]
Mais attention, aux risques d'avoir des noms communs à plusieurs fichiers.

Posté : 08 sept. 2006, 11:21
par fabien_14
Exacte,

J'ai reusi a faire une premiere insertion dans la base de donnée

$sql = mysql_query(" INSERT INTO up_image2 SET id_membres ='$userid', rubrique = '1', description = 'blabla', id_parent = '15' ") or die( mysql_error());

Pour l'instant j'ai mi tou les truc en dur mais plus tard je metrai les variable ....

Mais un probleme persite comment on peu faire pour renomer l'image en fonction de l'id auto increment ?

c'est a dire que si mon auto increment est a 35 ... et qu'une personne envoi 5 photos que les photos soit renomer 36.jpg, 37.jpg, 38.jpg, 39.jpg, 40.jpg ?

Merci

Posté : 08 sept. 2006, 11:31
par iclo
Avec une structure à deux tables, après avoir fait une insertion pour une photo (dans la table photo, tu aurais une photo = une ligne) tu peux utiliser mysql_insert_id() qui te renverra l'id autoincrémenté de l'insertion que tu viens d'effectuer.

Posté : 08 sept. 2006, 11:44
par fabien_14
J'ai essayer alors c'est etrange

sa ne marche que sur une photos , j'ai mi sa

Code : Tout sélectionner

//Recuperation du dernier id et renomage $rand_name = mysql_insert_id();
au lieu de :

Code : Tout sélectionner

//create a random file name $rand_name = md5(time()); $rand_name= rand(0,999999999);
si j'envoi 3 photos : sa me donne sa

Code : Tout sélectionner

Image Thumb: image_up/photos_carnet/12/mini/0 _mini.png grosse image: image_up/photos_carnet/0.jpg Les photos ont bien étaient envoyés elle seront disponible après vérification Image Thumb: image_up/photos_carnet/12/mini/12 _mini.png grosse image: image_up/photos_carnet/12.jpg Les photos ont bien étaient envoyés elle seront disponible après vérification Image Thumb: image_up/photos_carnet/12/mini/13 _mini.png grosse image: image_up/photos_carnet/13.jpg
donc en gros tous marche sauf la premiere qui reste toujours a 0 :? alors que sa devrai etre

Code : Tout sélectionner

Image Thumb: image_up/photos_carnet/12/mini/11 _mini.png grosse image: image_up/photos_carnet/11.jpg

Posté : 08 sept. 2006, 12:27
par fabien_14
Je viens de trouver c'etais tous con ... il fallai mettre la requete sql avant le rename ! :shock:

$sql = mysql_query(" INSERT INTO up_image2 SET id_membres ='$userid', rubrique = '1', description = 'blabla', id_parent = '15' ") or die( mysql_error());

//Recuperation du dernier id et renomage
$rand_name = mysql_insert_id();

je pense pas que la requete soi au bon endroit ! si qlq peu m'expliker pkoi il fau metre la requete avant le renomage ?

Aussi je voudrai limiter l'envoi des image a 600 Ko (par exemple) comment faut t'il faire ? et aussi mettre un message d'erreur pour toute les photos qui n'ont pas été envoyées.


merci