Partage
  • Partager sur Facebook
  • Partager sur Twitter

image dans base de données Mysql

Enregistrer une image dans une base de donnée et l'afficher

Sujet résolu
10 avril 2011 à 2:10:01

Bonjour tout le monde
Voici mon problème
je veut insérer des images dans ma base de données MySQL et ensuite les afficher en fonction de mes besoins
Mais après après avoir consulter certains sujets du forum on m'a déconseiller de stocker l'image entier dans la base de données, je voudrais avoir une méthode plus légère et efficace pour enregistrer ces images dans ma base de donnée et pouvoir les affiché.
  • Partager sur Facebook
  • Partager sur Twitter
10 avril 2011 à 2:15:08

Tu les stockes sur ton serveur, et tu stockes leur adresse dans la base de données ^^

Exemple :

L'image est transférée et son adresse est : "/pics/tonimage.jpeg"
Tu enregistres cette adresse dans ta base.

Ensuite pour l'affichage, tu fais une requête qui va chercher l'adresse de l'image tout simplement ^^
  • Partager sur Facebook
  • Partager sur Twitter
10 avril 2011 à 2:49:52

Merci
Mais pour plus de précisions voici ce je veut réellement savoir car je suis un zero comment sera le type du champ qui enregistre l'adresse des images.
et quel script me permettras enfin d'afficher une image selon l'Id de l'enregistrement concerné
  • Partager sur Facebook
  • Partager sur Twitter
10 avril 2011 à 11:35:12

Bonjour,pour moi aussi cela m'intéresserai.
  • Partager sur Facebook
  • Partager sur Twitter
Projet: MMORPG en développement avec Node.js et Socket.io sur ageofsurvival.koding.com
10 avril 2011 à 14:27:21

Moi j'utilise comme type de champs un "text" au cas où le visiteur mettrait une image avec un looooooonnng titre.

Et pour l'affichage tu fais une simple requête qui va sélectionner dans ta base de données le champs de l'image et tu l'affiches. Par exemple si tu veux sélectionner l'image du membre dont l'id est celle avec laquelle il est connecté (ici j'utilise une variable session :

<?php

// N'oublie pas la connexion à ta base de données avant ça !

$req = mysql_query("select * FROM TA_TABLE WHERE id = '".$_SESSION["id"]."'") or die(mysql_error());

$data = mysql_fetch_array($req);

$user_image = $data['NOM_DE_TON_CHAMPS_IMAGE_DANS_LA_BASE'];

$repertoire = "/pics/";

?>

<img src="<?php echo $repertoire.$user_image; ?>" alt="" />
  • Partager sur Facebook
  • Partager sur Twitter
13 avril 2011 à 15:09:36

Merci mon frère sa marce
  • Partager sur Facebook
  • Partager sur Twitter
8 avril 2013 à 23:41:51

Moi j'ai pas compris l'insertion, possible d'avoir des explications ?
  • Partager sur Facebook
  • Partager sur Twitter
14 mai 2013 à 17:49:03

C'est normal tu as surement appris le php récemment ( like me ) en gros il faut que tu fasse : 

(Pas sur mais essaye) Et modifie quelque petit truc si sa te parrait bizarre.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
// N'oublie pas la connexion à ta base de données avant ça !
$req = $bdd->query("select * FROM TA_TABLE WHERE id = '".$_SESSION["id"]."'");
$data = req->fetch();
$user_image $data['NOM_DE_TON_CHAMPS_IMAGE_DANS_LA_BASE'];
$repertoire "/pics/";
?>
<img src="<?php echo $repertoire.$user_image; ?>" alt="" />
  • Partager sur Facebook
  • Partager sur Twitter
14 mai 2013 à 17:52:13

Moi même j'ai pas compris le principe de $repertoire = "pics/"
  • Partager sur Facebook
  • Partager sur Twitter
17 mai 2013 à 20:19:39

il a du mettre son image dans un dossier dont la racine est pics.

Quand il fait son echo il obtient le chemin complet: pics/image.jpeg.

-
Edité par jissey 19 mai 2013 à 1:51:02

  • Partager sur Facebook
  • Partager sur Twitter
22 mai 2013 à 12:43:04

Oui je vient de terminer mon code et je vais te montrer comment faire :
//Connection a la base de données

$req = $bdd->query(SELECT * FROM TA TABLE);

//Dans ta table tu a mis le lien de l'image ( ex : Images/Mon_image.jp )

$image = $req->fetch();

<img src = "<?php echo $image['nom de ta colonne'] ?>" alt = ""/>


J'ai utilisé ca dans une boucle while, un peu de css et le tour est joué :)

  • Partager sur Facebook
  • Partager sur Twitter
22 mai 2013 à 12:46:41

Tu peut meme aller plus loin et faire comme moi, je rajoute une colonne "titre" et je la met comme title de mon image dans ma boucle while :

while($image = $req->fetch)
{
 ?><img src = "<?php echo $image[nom de ta colonne] ?>" alt = "" title = "<?php echo$image['title]" ?> />
}

:):):)

  • Partager sur Facebook
  • Partager sur Twitter
28 février 2014 à 13:55:05

Bonjour,

Premier message sur ce forum pour un petit problème:

J'ai créé un formulaire de contact avec possibilité de charger une image 'name="logo"' pour illustrer la fiche de présentation que permet de remplir le formulaire.

Tout se passe bien, le fichier image s'enregistre dans le dossier voulu, le nom de l'image avec extension s'enregistre dans la base de donnée.

Mais problème :

-  l'enregistrement dans la base de données se fait en deux lignes, une ligne avec les infos input du formulaire, et une ligne pour l'image ... donc deux id différentes ... ça posera pb pour la récup' déjà

-  je n'arrive pas à modifier le nom de l'image dans la BDD pour qu'il soit sous la forme ID.$extensions_upload     sachant que l'ID est celui de l'entrée formulaire dans la base de données

Voici mon formulaire :

    <center><fieldset id="enreg">
    	<legend>Formulaire d'inscription : </legend>
        <form action="cible.php" method="post" enctype="multipart/form-data">
        <table>
        	<tr>
                <td><p><label for="nom">Nom : </label>
                    <input type="text" name="nom" id="nom" autofocus required /></p>
                                        
                <p><label for="creation">Date de création : </label>
                	<input placeholder="AAAA/MM/JJ" type="date" name="date" id="date" /></p>
                    
                <p><label for="mail">Adresse mail : </label>
                    <input type="email" name="mail" id="mail" /></p>
                    
                <p><label for="site">URL du site principal : </label>
                    <input type="url" name="site" id="site" /></p></td>
                    
                <td><p><label for="logo">Logo : </label>
                	<input type="hidden" name="MAX_FILE_SIZE" value="1048576" />
                    <input type="file" name="logo" id="logo" /></p>
                    
                <p><label for="forme">Forme juridique : </label>
                    <select name="forme" id="forme">
                        <option value=""></option>
                        <option value="ONG">O.N.G.</option>
                        <option value="Association">Association</option>
                        <option value="Collectif">Collectif</option>
                        <option value="Particulier">Particulier</option>
                    </select></p>
                    
                <p><label for="domaine">Domaine d'action :</label>
                    <input type="text" name="domaine" id="domaine" /></p>
                    
                <p><label for="lieux">Lieux d'action :</label>
                    <input type="text" name="lieux" id="lieux" /></p></td>
                                                            
                <td><p><label for="descriptif">Descriptif :</label>
                    <textarea name="descriptif" id="descriptif" cols="50" rows="10" required></textarea></p>
                    
                    <input type="submit" value="POSTER" class="OK" />
                    <input type="reset" name="effacer" value="EFFACER" class="NOK" /></td>
            </tr>
        </table>
        </form>
    </fieldset></center>



 Et voici mon code dans le fichier cible.php :

<?php

	// Testons si le fichier a bien été envoyé et s'il n'y a pas d'erreur
	if (isset($_FILES['logo']) AND $_FILES['logo']['error'] == 0) $erreur = "Erreur lors du transfert";
	{
		if ($_FILES['logo']['size'] <= 8000000) $erreur = "Le fichier est trop gros";
		{
			$infosfichier = pathinfo($_FILES['logo']['name']);
                $extensions_autorisees = array('jpg', 'jpeg', 'gif', 'png');
                $extension_upload = strtolower(  substr(  strrchr($_FILES['logo']['name'], '.')  ,1)  );
                if (in_array($extension_upload, $extensions_autorisees)) echo "Extention correcte";
				{
					$image_sizes = getimagesize($_FILES['logo']['tmp_name']);
					if ($image_sizes[0] > $maxwidth OR $image_sizes[1] > $maxheight) $erreur = "Image trop grande";
						{
						  	$nom = "avatars/{$id}.{$extension_upload}";
							move_uploaded_file($_FILES['logo']['tmp_name'], '../uploads/' . basename($_FILES['logo']['name']));
							echo "L'envoi a bien été effectué !";
							
							$db = mysql_connect('localhost', 'root', 'root') or die('Erreur de connexion '.mysql_error());
							// sélection de la base
							
							mysql_select_db('annuaire',$db) or die('Erreur de selection '.mysql_error());
							
							// on écrit la requête sql
							$sql = "INSERT INTO ficheID (id, logo) VALUES('','$nom')";
							
							// on insère les informations du formulaire dans la table
							mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
							
							mysql_close(); // on ferme la connexion

						}
					
				}
		
		}
	 
	}

try
{
	$bdd = new PDO('mysql:host=localhost;dbname=annuaire', 'root', 'root');
}
catch(Exception $e)
{
        die('Erreur : '.$e->getMessage());
}


$req = $bdd->prepare('INSERT INTO ficheID (nom, date, domaine, lieux, forme, mail, site, descriptif) VALUES(?, ?, ?, ?, ?, ?, ?, ?)');
$req->execute(array($_POST['nom'], $_POST['date'], $_POST['domaine'], $_POST['lieux'], $_POST['forme'], $_POST['mail'], $_POST['site'], $_POST['descriptif']));
	
?>


Comment puis-je faire ? je commence le php que depuis 2 semaines et j'avoue être dépassé pour trouver cette réponse.

Merci bien pour vos réponses ! :)

  • Partager sur Facebook
  • Partager sur Twitter
Matthieu Charnacé
28 février 2014 à 14:42:31

Up ! Sujet pas résolu pour tout le monde ! ;)

  • Partager sur Facebook
  • Partager sur Twitter
Matthieu Charnacé
28 février 2014 à 19:46:57

Salut Matthieu,

Si j'ai bien compris ton premier problème: tu récupères d'un formulaire des données concernant une image, et tu les ajoutes à ta BDD, mais tu obtiens deux lignes au lieu d'une seule regroupant toutes les infos dans les champs.

C'est à cause de tes requêtes;

<?php

// première requête, ligne 26
$sql = "INSERT INTO ficheID (id, logo) VALUES('','$nom')";

//seconde requête, ligne 51
'INSERT INTO ficheID (nom, date, domaine, lieux, forme, mail, site, descriptif) VALUES(?, ?, ?, ?, ?, ?, ?, ?)'

?>
- La première est correcte, tu inserts correctement une nouvelle ligne dans ta BDD et tu remplies les champs "id" et "logo".

- Mais la seconde est également composée d'un INSERT INTO, qui ajoute une nouvelle ligne dans ta BDD contenant les info de ton formulaire de ta même image.

Ta deuxième requête doit donc modifier une ligne de la BDD et non en ajouter une autre:

<?php

//seconde requête, ligne 51
'UPDATE ficheID SET nom="?", date="?", domaine="?", lieux="?", forme="?", mail="?", site="?", descriptif="?" WHERE logo ="$nom"

?>

Cette requête modifie les champs de la ligne où le champ "logo" vaut $nom.

Concernant ton deuxième problème, tu dis que ID vient de ton formulaire, mais je ne vois pas de champ avec l'attribut "name='ID'"...

-
Edité par Tiboss 28 février 2014 à 19:54:16

  • Partager sur Facebook
  • Partager sur Twitter
On fait tout des erreurs !
28 février 2014 à 21:04:04

Salut !

Si vraiment tu fais deux insertions à la suite, et que tu as besoin dans la seconde de l'ID de ce que tu as enregistré avec la première, tu as la méthode PDO::lastInsertId() qui pourrait bien t'aider.

Edit

Fais bien attention : je n'y avais pas trop regardé, mais tu mélanges allègrement les extensions mysql_* et PDO…

-
Edité par Ymox 19 juillet 2017 à 14:15:38

  • Partager sur Facebook
  • Partager sur Twitter
OC à changerFAQ PHP • Et avant celaTutoriel WAMP • Code illisible ? Un p'tit 👍 ici@Zeste de Savoir
28 février 2014 à 21:07:50

Merci pour ta réponse, j'avais remarqué que ça venait de quelque part dans ce coin :). Du coup sur tes conseils, j'ai combiné les deux pour donner ceci.

<?php

	// Testons si le fichier a bien été envoyé et s'il n'y a pas d'erreur
	if (isset($_FILES['logo']) AND $_FILES['logo']['error'] == 0) $erreur = "Erreur lors du transfert";
	{
		if ($_FILES['logo']['size'] <= 8000000) $erreur = "Le fichier est trop gros";
		{
			$infosfichier = pathinfo($_FILES['logo']['name']);
                $extensions_autorisees = array('jpg', 'jpeg', 'gif', 'png');
                $extension_upload = strtolower(  substr(  strrchr($_FILES['logo']['name'], '.')  ,1)  );
                if (in_array($extension_upload, $extensions_autorisees)) echo "Extention correcte";
				{
					$image_sizes = getimagesize($_FILES['logo']['tmp_name']);
					if ($image_sizes[0] > $maxwidth OR $image_sizes[1] > $maxheight) $erreur = "Image trop grande";
						{
						  	$nom = "avatars/{$id}.{$extension_upload}";
							move_uploaded_file($_FILES['logo']['tmp_name'], '../uploads/' . basename($_FILES['logo']['name']));
							echo "L'envoi a bien été effectué !";
							
							$db = mysql_connect('localhost', 'root', 'root') or die('Erreur de connexion '.mysql_error());
							// sélection de la base
							
							mysql_select_db('annuaire',$db) or die('Erreur de selection '.mysql_error());
							
							try
							{
								$bdd = new PDO('mysql:host=localhost;dbname=annuaire', 'root', 'root');
							}
							catch(Exception $e)
							{
									die('Erreur : '.$e->getMessage());
							}
							
							
							$req = $bdd->prepare("INSERT INTO ficheID (id, nom, date, domaine, lieux, forme, mail, site, descriptif, logo) VALUES('', ?, ?, ?, ?, ?, ?, ?, ?, '$nom')");
							$req->execute(array($_POST['nom'], $_POST['date'], $_POST['domaine'], $_POST['lieux'], $_POST['forme'], $_POST['mail'], $_POST['site'], $_POST['descriptif']));
							
							mysql_close(); // on ferme la connexion

						}
					
				}
		
		}
	 
	}

	
?>

Cela inscrit maintenant qu'une seule ligne dans la BDD. me reste plus qu'à pouvoir modifier le nom pour lui donner l'id de la ligne de la table ...

  • Partager sur Facebook
  • Partager sur Twitter
Matthieu Charnacé
28 février 2014 à 21:47:08

Ok bon j'ai réussi à enregistrer l'image dans le dossier uploads et le renommer pour qu'il ai le 'nom' de la ligne BDD correspondante.

Dernier pb pour l'affichage de cette image, je ne trouve pas comment faire. J'ai ceci sur une page php ou je veux que s'affiche le nom et l'image correspondante :

		<?php
        try
        {
            $bdd = new PDO('mysql:host=localhost;dbname=annuaire', 'root', 'root');
        }
        catch (Exception $e)
        {
                die('Erreur : ' . $e->getMessage());
        }
        
		mysql_query("SET NAMES UTF8");
        
        $reponse = $bdd->query('SELECT nom, logo FROM ficheID ORDER BY ID DESC');
        
        while ($donnees = $reponse->fetch())
        {
        ?> 
        <div id="mini">
			<p><img src="<?php echo 'uploads/' . basename($_FILES['logo']['name']); ?>"></p>
        	<h2><?php echo $donnees['nom']; ?></h2>
        </div>
               
        <?php
        }
        
        $reponse->closeCursor();
        
        ?>

Quelqu'un a une idée pour m'aider s'il vous plait ?

J'ai un message d'erreur, justifié, qui me dit que $_FILES['logo'] n'a pas été identifié. Normal, mais je ne vois pas comment faire un rappel, l'ayant identifié dans une autre page (cible.php)

Help !

  • Partager sur Facebook
  • Partager sur Twitter
Matthieu Charnacé
28 février 2014 à 21:52:49

Fais attention : étant donné que tu peux modifier les messages, fais-le le plus possible. Deux réponses à la suite dans le même sujet, ce n'est toléré que s'il y a 24 heures d'écart :)


Si tu souhaites afficher l'image, il te faut aller rechercher les données dans la BDD, c'est pour pouvoir récupérer ces données que tu les as enregistrées, non ?

  • Partager sur Facebook
  • Partager sur Twitter
OC à changerFAQ PHP • Et avant celaTutoriel WAMP • Code illisible ? Un p'tit 👍 ici@Zeste de Savoir
28 février 2014 à 22:00:47

Oups pardon, je ne referais plus :)

Merci pour ton aide.

C'est bon. J'ai ce code pour récupérer :

		<?php
        try
        {
            $bdd = new PDO('mysql:host=localhost;dbname=annuaire', 'root', 'root');
        }
        catch (Exception $e)
        {
                die('Erreur : ' . $e->getMessage());
        }
        
		mysql_query("SET NAMES UTF8");
        
        $reponse = $bdd->query('SELECT nom, logo FROM ficheID ORDER BY ID DESC');
				
        while ($donnees = $reponse->fetch())
        {
        ?> 
        <div id="mini">
			<p><img src="<?php echo 'uploads/' . basename($donnees['logo']); ?>"></p>
        	<h2><?php echo $donnees['nom']; ?></h2>
        </div>
               
        <?php
        }
        
        $reponse->closeCursor();
        
        ?>

ça fonctionne correctement, me reste plus qu'à mettre la dimension et c'est ok.

Merci ! :)

Et je me suis occupé des mélanges d'extensions mysql et pdo ;)

-
Edité par MatthieuCharnacé 28 février 2014 à 22:01:44

  • Partager sur Facebook
  • Partager sur Twitter
Matthieu Charnacé
28 février 2014 à 22:48:21

Content d'avoir pu t'aider Matthieu

Pendant qu'on est dans le sujet, j'aimerais connaitre votre avis (pour ceux qui en ont un) concernant les différentes méthodes de gestion de base de données d'images : dans mon cas, j'ai des images et des dossiers d'images.

J'utilise actuellement une BDD avec les champs suivants:

id, nom (avec l'extension), chemin (par exemple "racine/stagemusique/"), type ("fichier" ou "dossier")

Physiquement, tous mes fichiers sont dans le même dossier (nommé "racine"), et tous mes sous-dossiers sont virtuels. Au niveau de l'interface, l'URL est comme ceci: uploads.php?chemin=racine/

Dans ma page uplaods.php, je récupère le chemin passé dans l'url et demande à la BDD d'afficher les éléments de tous types où le champ "chemin" = $_GET['chemin']. Avec cette méthode, j'autorise la création de plusieurs dossiers portant le même nom mais dans des sous-dossiers différents.

Ainsi, quand je veux déplacer un fichier dans un dossier, je change le champ "chemin" du fichier à déplacer via un formulaire et une simple requête.

J'ai découvert récemment une autre méthode, mais je n'ai pas assez d'infos dessus : les fonctions mkdir, readdir, rmdir et compagnie (fonctions sur les dossiers). Visiblement elles ne fonctionnent pas en local...

En gros, ça me permettrait d'avoir une BDD simple avec les attributs id et nom contenant uniquement mes images ; mes sous-dossiers seront physiques ; les pages php seraient constituées des fonctions scandir avec une boucle pour lire le contenu d'un dossier passé en url, et le déplacement de mes fichiers serait fait avec les fonctions sur les fichiers.

Avez-vous des infos sur la deuxième méthode de gestion de banque d'images ?

Et quelle méthode est la plus adaptée pour ce genre de BDD ? Merci d'avance :)

-
Edité par Tiboss 28 février 2014 à 22:50:47

  • Partager sur Facebook
  • Partager sur Twitter
On fait tout des erreurs !
2 mars 2014 à 12:38:52

Visiblement, personne n'utilise la deuxième technique xD
  • Partager sur Facebook
  • Partager sur Twitter
On fait tout des erreurs !
10 juillet 2014 à 21:13:19

svp urgent c'est quoi le code sql qui permet l'enregistrement d'une colone de type image..

par exemple on a : varchar, int, date c'est quoi le format pour image svp et merci d'avance

  • Partager sur Facebook
  • Partager sur Twitter
10 juillet 2014 à 23:01:52

On essaie d'éviter d'enregistrer les images directement dans la base de données. On uploade le fichier et on enregistre son nom, éventuellement le chemin depuis la racine du site, mais rarement le fichier lui-même, c'est trop peu pratique quand c'est une image qu'il faut afficher par la suite.

Tu trouveras des tas de sujets qui en parlent ailleurs sur le forum.

Evite cependant de venir poser des questions "urgentes" dans des sujets résolus.

  • Partager sur Facebook
  • Partager sur Twitter
OC à changerFAQ PHP • Et avant celaTutoriel WAMP • Code illisible ? Un p'tit 👍 ici@Zeste de Savoir
10 juillet 2014 à 23:20:32

merci ymox j'ai un examen demain et je voudrai savoir dans le champ de code sql je met quoi comme format 

create table ex1

(

nom varchar(50),

photo ???

)

  • Partager sur Facebook
  • Partager sur Twitter
11 juillet 2014 à 8:06:13

Si vraiment tu tiens à remplir ta base de données avec du contenu volumineux qu'il serait plus simple de manipuler comme de "vrais" fichiers, tu peux utiliser les types BLOB (TINYBLOB, BLOB, MEDIUMBLOB, et LONGBLOB).

Mais encore une fois, il n'est pas recommandé de faire ainsi.

Et il n'y avait pas besoin de répéter ta question, j'avais compris.

  • Partager sur Facebook
  • Partager sur Twitter
OC à changerFAQ PHP • Et avant celaTutoriel WAMP • Code illisible ? Un p'tit 👍 ici@Zeste de Savoir

image dans base de données Mysql

× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
  • Editeur
  • Markdown