Page 1 sur 4
Images et MySQL
Posté : 20 nov. 2006, 14:51
par dunbar
Bonjour,
Quelqu'un connait t'il un bon tuto sur comment faire pour stocker des images dans une TABLE et récupérée celle-ci dans une page Web ?
En gros je cherche à faire un formulaire avec la possibilité de télécharger max 5 images, et plus loin je souhaite pouvoir faire une fiche qui reprend les données du form et les images...
D'avance merci

Posté : 20 nov. 2006, 15:06
par Ajoloca
Bonjour,
Voici 2 adresses qui peuvent t'aider même si je te déconseille fortement cette pratique.
Tu vas faire "grossir" inutillement ta base de données et ralentir considérablement tes applications.
http://beaussier.developpez.com/article ... ysql/blob/
http://developpeur.journaldunet.com/tut ... ages.shtml
Si ça ne correspond pas à ce que tu cherches, un petit

avec "images et mysql"
Posté : 20 nov. 2006, 17:17
par dunbar
Et comment ferais tu
Merci
Posté : 20 nov. 2006, 17:22
par Cyrano
Tu enregistres les images dans un répertoire, et en base de données, tu n'enregistres que les informations sur ces images, nom, type de fichier éventuellement, dimensions, chemin d'accès, ce genre de choses. Ce sera infiniment plus efficace.
Posté : 20 nov. 2006, 17:26
par Ajoloca
Re,
Disons que je couperai la poire en deux.
Dans la base de données je stocke les informations concernant l'image (nom, répertore, mime, taille) pour ne pas avoir à le recalculer à chaque fois.
Et l'image elle même dans le système de fichiers
EDIT: trop tard!
Posté : 20 nov. 2006, 18:26
par dunbar
Tu enregistres les images dans un répertoire, et en base de données, tu n'enregistres que les informations sur ces images, nom, type de fichier éventuellement, dimensions, chemin d'accès, ce genre de choses. Ce sera infiniment plus efficace.
Tu connais un bon tuto la dessus

parce que sur Google je ne trouve rien de vraiment bon.
D'avance merci
Posté : 20 nov. 2006, 21:00
par Cyrano
Pas vraiment. Contrairement à ta signature, on ne peut pas mettre les boeufs et la charrue dans n'importe quel sens. On commence par modéliser et après seulement on développe, jamais l'inverse si on veut faire du développement durable.
Tu as déjà une vision générale de ce que tu veux obtenir : décompose tout ça en éléments plus simples :
- un formulaire :
- Des images et d'autres données textes;
- enregistrer les images dans un répertoire
- éventuellement les traiter pour en produire à des dimensions réduites;
- récupérer les informations nécessaires sur ces images, informations dont tu auras besoin lors de l'affichage dans les pages;
- enregistrement de ces informations dans la base de données;
C'est très général, mais ce squelette devrait te permettre de démarrer de façon cohérente.
Posté : 20 nov. 2006, 23:23
par dunbar
Salut,
J'arrive à télécharger des images dans un répertoire jusque là pas de problème, mais ce que je n'arrive pas à faire ces d'enregistrée le chemein dans ma table
Je dois être fatigué mais je ne trouve pas
Voici mon code :
$target = 'xxxxxxxxxxxxxxxxx'; // Repertoire cible
//$extensions = ('jpg','gif','png','jpeg'); // Extensions possible
$extensions = array("image/jpeg","image/png","image/gif");
$max_size = 10000000; // Taille max en octets du fichier
$width_max = 100000; // Largeur max de l'image en pixels
$height_max = 100000; // Hauteur max de l'image en pixels
//---------------------------------------------
// DEFINITION DES VARIABLES LIEES AU FICHIER
//---------------------------------------------
$nom_file = $_FILES['fichier']['name'];
$taille = $_FILES['fichier']['size'];
$tmp = $_FILES['fichier']['tmp_name'];
$name = $_FILES['fichier']['name'];
//----------------------
// SCRIPT D'UPLOAD
//----------------------
?>
<html>
<head>
<title>Upload d'une image sur le serveur !</title>
</head>
<body>
<?php
if(!empty($_POST['posted'])) {
// On vérifie si le champ est rempli
if(!empty($_FILES['fichier']['name'])) {
// On vérifie l'extension du fichier
//if(substr($nom_file, -3) == $extensions) {
if(!in_array($_FILES['aFile']['type'], $extensions)){
// On récupère les dimensions du fichier
$infos_img = getimagesize($_FILES['fichier']['tmp_name']);
// On vérifie les dimensions et taille de l'image
if(($infos_img[0] <= $width_max) && ($infos_img[1] <= $height_max) && ($_FILES['fichier']['size'] <= $max_size)) {
// Si c'est OK, on teste l'upload
if(move_uploaded_file($_FILES['fichier']['tmp_name'],$target.$_FILES['fichier']['name'])) {
// Si upload OK alors on affiche le message de réussite
echo '<b>Image uploadée avec succès !</b>';
} else {
// Sinon on affiche une erreur système
echo '<b>Problème lors de l\'upload !</b><br /><br /><b>', $_FILES['fichier']['error'], '</b><br /><br />';
}
} else {
// Sinon on affiche une erreur pour les dimensions et taille de l'image
echo '<b>Problème dans les dimensions ou taille de l\'image !</b><br /><br />';
}
} else {
// Sinon on affiche une erreur pour l'extension
echo '<b>Mauvaise extension de fichier</b><br /><br />';
}
} else {
// Sinon on affiche une erreur pour le champ vide
echo '<b>Le champ du formulaire est vide !</b><br /><br />';
}
}
?>
A mon avis je ne suis pas trés loin mais

...
Merci d'avance
Posté : 21 nov. 2006, 01:12
par Cyrano
Pose-toi la question autrement : de quelles informations as-tu besoin ? Quand tu auras défini la réponse, passe à la question suivante : pour chacun des éléments : où est cet élément, comment le récupérer en cours de traitement ?
Posté : 21 nov. 2006, 09:45
par dunbar
Pose-toi la question autrement : de quelles informations as-tu besoin ? Quand tu auras défini la réponse, passe à la question suivante : pour chacun des éléments : où est cet élément, comment le récupérer en cours de traitement ?
Oui juste alors ici finalement je ne dois récupérée que le $target et ['nom']
Avec un simple INSERT ces régler je pense
Mais le soucis est que un enregistrement pourrais comprendre 5 Photos donc.
Dans ce cas de figure si je fais une TABLE 1 champ par photo "pho_1, pho_2 etc.." cela reglerais le problème

Avant de commencer je voudrais juste un avis pour ne pas partir dans une mauvaise direction
MAJ:
Pour l'enregistrement du chemin et du nom j'ai fait ceci :
$sql = "INSERT INTO images (pho_1,chem_pho_1) values ('".$name."','".$target."')";
et cela fonctionne
je me retrouve dans ma table avec un champ pho_1 = nom de l'image et le champ chem_pho_1 = chemin du
dossier ou ce retrouve l'image
Alors ici deux questions
1 comment associer les deux champs pour former une adresse ?
MAJ:
.$target.$name.
-->cette solution fonctionne mais est t'elle sans danger
2 comment comment faire pour récupérée les bonne images de la fiche d'enregistrement
D'avance merci
Posté : 21 nov. 2006, 11:45
par Cyrano
Si ton formulaire comporte plusieurs blocs comprenant des informations et un champs pour récupérer une image, utilise des tableaux : dans les valeurs d'attribut "name", au lieu de
name="fichier", mets
name="fichier[]"
À la sortie, tu vas récupérer des tableaux indexés :
$fichier = $_POST['fichier'];
$val0 = $fichier[0];
$val1 = $fichier[1];
$val2 = $fichier[2];
// ... etc ...
TU peux même éventuellement fichier toi-même l'index du tableau dans le formulaire :
name="fichier[img1]",
name="fichier[img2]", etc... et tu récupères ça de la même manière. Et pour chaque bloc dans ton formulaire tu utilises le même index pour chacun de ses éléments, comme ça, pas de mélanges.
Posté : 21 nov. 2006, 13:38
par dunbar
Si ton formulaire comporte plusieurs blocs comprenant des informations et un champs pour récupérer une image, utilise des tableaux : dans les valeurs d'attribut "name", au lieu de
name="fichier", mets
name="fichier[]"
À la sortie, tu vas récupérer des tableaux indexés :
$fichier = $_POST['fichier'];
$val0 = $fichier[0];
$val1 = $fichier[1];
$val2 = $fichier[2];
// ... etc ...
TU peux même éventuellement fichier toi-même l'index du tableau dans le formulaire :
name="fichier[img1]",
name="fichier[img2]", etc... et tu récupères ça de la même manière. Et pour chaque bloc dans ton formulaire tu utilises le même index pour chacun de ses éléments, comme ça, pas de mélanges.
Donc si je comprend bien je dois refaire mon code plus haut ? j'ai encore une fois mal travailler ?
Ou alors aurai tu une autre solution ?
Posté : 21 nov. 2006, 14:05
par Cyrano
Disons que je te suggère une manière de faire pour moins te casser la tête à regrouper ce qui va ensemble. Ça peut effectivement impliquer que tu doives refaire une partie du code en amont. Mais les modifications seront assez mineures : le rajout de "[index-qui-va-bien]" suffirait et ensuite dans ton code, tu pourras utiliser des boucles pour traiter en rafale chaque bloc.
Posté : 21 nov. 2006, 15:18
par dunbar
Disons que je te suggère une manière de faire pour moins te casser la tête à regrouper ce qui va ensemble. Ça peut effectivement impliquer que tu doives refaire une partie du code en amont. Mais les modifications seront assez mineures : le rajout de "[index-qui-va-bien]" suffirait et ensuite dans ton code, tu pourras utiliser des boucles pour traiter en rafale chaque bloc.
Je sais que je vais avoir l'air con mais que veux dire [index-qui-va-bien]
Tombe pas de ta chaise

Posté : 21 nov. 2006, 15:27
par Cyrano
Tu peux même éventuellement fichier toi-même l'index du tableau dans le formulaire : name="fichier[img1]", name="fichier[img2]", etc... et tu récupères ça de la même manière. Et pour chaque bloc dans ton formulaire tu utilises le même index pour chacun de ses éléments, comme ça, pas de mélanges.
Ce que j'ai noté plus tôt
