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

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 :google: avec "images et mysql"

Posté : 20 nov. 2006, 17:17
par dunbar
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 :google: avec "images et mysql"
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 :roll:
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 :lol:
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 :wink:

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