Cherche méthodes pour ajouter photos associer a Un ID

Eléphant du PHP | 183 Messages

07 sept. 2006, 14:59

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.

Avatar du membre
ViPHP
ViPHP | 3008 Messages

07 sept. 2006, 15:04

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.

Eléphant du PHP | 183 Messages

07 sept. 2006, 15:12

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 ;)

Avatar du membre
ViPHP
ViPHP | 3008 Messages

07 sept. 2006, 15:14

Evites de stocker des images en BDD. Stockes juste l'URL ;)

Eléphant du PHP | 183 Messages

08 sept. 2006, 00:51

--- Edit jai changer de code
Modifié en dernier par fabien_14 le 08 sept. 2006, 10:46, modifié 1 fois.

Eléphant du PHP | 183 Messages

08 sept. 2006, 10:27

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 :)

Mammouth du PHP | 19672 Messages

08 sept. 2006, 10:32

Tu devrais jeter un coup d'oeil ici pour voir comment tu pourrais avantageusement optimiser cette structure.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

ViPHP
ViPHP | 2144 Messages

08 sept. 2006, 10:41

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.

Eléphant du PHP | 183 Messages

08 sept. 2006, 10:53

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 !!!

Eléphant du PHP | 183 Messages

08 sept. 2006, 11:01

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 ?
Modifié en dernier par fabien_14 le 08 sept. 2006, 11:09, modifié 2 fois.

ViPHP
ViPHP | 2144 Messages

08 sept. 2006, 11:04

Tu dois l'avoir dans ceci : $_FILES['imgfile']['name'][$key]
Mais attention, aux risques d'avoir des noms communs à plusieurs fichiers.

Eléphant du PHP | 183 Messages

08 sept. 2006, 11:21

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

ViPHP
ViPHP | 2144 Messages

08 sept. 2006, 11:31

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.

Eléphant du PHP | 183 Messages

08 sept. 2006, 11:44

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

Eléphant du PHP | 183 Messages

08 sept. 2006, 12:27

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