Astuce #3: Stocker les images dans une base de données
ฝัง
- เผยแพร่เมื่อ 22 ส.ค. 2024
- Il est possible de stocker les images dans une base de données. C'est également le cas pour les fichiers avec d'autres formats comme les PDF, DOC... Le champ dédié à accueillir ces fichiers là est de type BLOB. La fonction file_get_contents() permet de traiter l'image en tant que chaîne de caractères afin de la stocker dans la base de données. Dans cette astuce nous allons voir comment stocker les images dans une base de données et comment les récupérer pour les afficher dans le navigateur.
- วิทยาศาสตร์และเทคโนโลยี
Pour plus de cours, rendez-vous sur chiny.me
Merci beaucoup Mohamed pour ce nouveau cours. Tes astuces sont vraiment instructives. j'ai hâte de voir le prochain cours.
De rien Jewel. J'essaierai de publier des vidéos dans cette série régulièrement. Merci :)
Merci d'avance Mohamed...Apprendre par les exemples est une bonne méthode, et on a la chance de t'avoir comme formateur ...
merci d'avoir expliquer ces deux méthodes d'ajout des images sachant que le choix va se faire selon le contexte d'utilisation et au cas où l'on choisit la base de données la solution est de limiter la taille des images pour ne pas déborder.
C'est bien vu. En effet, c'est le contexte d'utilisation qui dicte quelle méthode utiliser. Merci pour votre commentaire :)
Merci pour ce tuto. J'ai regardé pas mal d'autres et à chaque fois c'était "l'image contient des erreurs". Merci
De rien. Donc ça marche maintenant ou le problème subsiste encore?
@@MohamedChiny Super! Mais quand utilise -t-on header("Content-type: image/jpg"); ? J'ai vu ça partout.
@@infotuto C'est surtout pour forcer le navigateur à interpréter la réponse du serveur en tant qu'image JPEG (faut mettre jpeg à la place de jpg). Mais ça marche souvent sans déclarer ce header.
Salam, svp une question si vous permettez. Pour un formulaire web avec un dossier inscription qui doit contenir une photo d'identité et des documents en pdf. Faut-il insérer les documents pdf dans un champs de base de données ou les transférer dans un dossier? MERCI.
Salam. Le mieux c'est de placer les fichiers dans un dossier et non pas dans la base de données. J'ai souligné cette remarque dans la vidéo. Donc, ce que vous pouvez faire, c'est uploader vos images et pdfs dans les dossiers voulus, et enregistrer leurs chemins dans la base de données.
Afin d'empêcher l'accès direct à ces fichiers-là, vous utilisez un .htaccess, comme je l'ai expliqué dans la première vidéo de cette série th-cam.com/video/_-W2wO5Sgro/w-d-xo.html
C'est applicable pour les images, pdfs et tout autres types de fichiers.
Bon courage :)
@@MohamedChiny Grand merci vous m'orientez énormément.
@@ahmedbenahmed3799 De rien. Je vous souhaite bon courage :)
bonjour, dans mon formulaire de transfert j'ai inséré une input text pour commentaire que je voudrais transférer dans la base avec l'image. Comment je dois la mettre dans la requête, alors que c'est $_Files qui est utilisé? je n'ai pas trouvé la solution. MERCI
Bonjour. C'est exactement ce qui a été expliqué dans la vidéo. Un formulaire, un champs de type file et une base de données. Vous avez besoin de faire un traitement autre que celui expliqué?
@@MohamedChiny oui, je me suis mal expliqué. Dans ce même formulaire, je voudrais mettre une input type text pour commentaire de l’image.: . Mais question est, comment l’inserer dans la requête exécute afin que l’image et un commentaire de l’image soit insérer au même clic. J’ai du mal à trouver la solution ? Alors que le champ du formulaire est de type file. Merci pour votre aide
@@MohamedChiny ok j'ai trouvé j'ai oublié de le mettre la variable $_POST et non $_FILES
@@afibase6100 Bravo :)
merci Moha
De rien :)
j'aimerais récuperer les informations dans ma base de données sous forme de liste, comme si toute les images de ma base de données étaient listés sur ma page, problème: je ne vois pas comment je pourrait procéder. Pourrais-tu m'éclairer s'il-te-plaît.
@@ju2420
est ce que c'est le studion visuale qui vous utilisez pour vous code par ce que moi ça marche pas la requete avec studio visuelle
Pour cette vidéo j'ai utilisé Sublime. Pour d'autres j'utilise Atom. De toute façon, l'éditeur n'a rien à voir avec le fonctionnement des requêtes SQL. Peut être que c'est votre code qu'il faudrait vérifier.
@@MohamedChiny j'ai fait exactement comme dans la video mais il me dit undefined variable pdo et function name must be a string
@@ounissanezla1793 Alors vous n'avez pas créé la chaine de connexion. Moi je l'ai placé dans un fichier nommé connexion.php. J'ai pas traité ce fichier dans cette vidéo car je l'ai déjà fait avant. Sinon déclarez là directement dans votre code. Je vous invite à regarder cette vidéo: th-cam.com/video/iMp19c-36ak/w-d-xo.html
Courage :)
D'accord merci beaucoup
bonjour, j'ai un problème de format de l'image. l'image ne s'affiche pas. a la place apparait de signes bizarres de fichier corrompu (des petits carrés, losanges, point d'interrogation etc...pouvez vous m'aider? merci
Bonjour. C'est probablement un problème d'encodage. Si l'image que vous avez stockée est de format jpg alors il faut renseigner au début de votre document php:
Cela permet de préparer le navigateur pour accueillir l'image au format voulu. Réessayez et dites moi ce que ça donne. Bonne chance :)
@@MohamedChiny Merci pour le retour. Ok C'est fait ! maintenant j'ai une page sombre avec un petit carré blanc. mais toujours pas d'image. Il doit manquer quelque chose !
@@afibase6100 Normalement, le problème tel que vous l'avez décrit est généralement dû au mauvais encodage. Sinon il se peut que ce soit dû au mauvais type dans la base de données. Veuillez spécifier LONGBLOB et regardez ce que ça donne.
Merci Boss 👍
De rien. Merci pour votre commentaire :)
Peut-être aura ont droit à une formation api rest php 😁 🎉
@@TheRh26 Oui bien sûr c'est prévu, faut juste trouver le temps pour lancer une playlist sur le sujet. Merci :)
Hello merci pour la démo, mais comment ça marche avec les fichiers PDF, EXCEL ET WORD. Je vous remercie.
De rien. Pour les autres fichiers, c'est exactement le même traitement. Absolument rien ne change (si ce n'était le nom et l'extension du fichier). Juste une chose, parfois il est préférable d'ajouter l'entête (fonction header) au document PHP qui souhaite récupérer le fichier depuis la base de données comme header("content-type:image/png") qui indique que l'on souhaite récupérer une image PNG. Mais dans la plupart des cas, c'est automatique. Bonne chance :)
Salut comment réaliser un QCM avec PHP et MySQL d'ont on va écrire tous les questions et réponses dans la base de données
Salut.
On peut envisager deux tables "questions" et "responses" on met les deux en relation via "id_question" que l'on placera dans la table "reponses" et on prévoit un champ pour indiquer la (ou les) bonnes réponses.
Le reste c'est du codage classique.
Bon courage :)
Dans la bdd, on stock uniquement le chemin vers l'image, pas l'image
Je crois que vous n'avez pas regardé la vidéo, mais juste le titre. J'ai mentionné que cette méthode est déconseillée, mais dans certains cas, le stockage des binaires dans la base (que ce soient des petites images ou autre) s'avère utile. Voilà la meilleure méthode (en prenant en compte le nommage régulier des média ou le stockage de leurs noms dans une base de données): th-cam.com/video/_-W2wO5Sgro/w-d-xo.html
@@MohamedChiny ça roule, alors ça va, car je suis prof en php depuis 1941, et j'ai été à hard vard
@@MohamedChiny et surtout,je voulais écrire ce com avant de lire la vidéo pour vérifier que vous alliez dire la même chose et sans triché , je suis pho man, le meilleur langage du web depuis 1981
@@pro_stat1993 Y a juste des erreurs dans les dates que vous avez saisies, mais je pense que c'est une erreur de frappe. Merci :)
Bonjour, votre vidéo est top mais je n'arrive pas à afficher mes images dans la BD. Je n'ai aucun message d'erreur ni rien. Je selectionne mon fichier, je clique sur "charger" la page se rafraichit et puis plus rien ne se passe. Avez-vous une solution? Ou bien un fichier zip avec les codes pour correctement comparer avec les miens? Merci
Bonjour. Quand vous chargez votre image, vous vérifiez si un enregistrement a été ajouté dans la base de données? Si aucun enregistrement n'est ajouté et en plus vous n'avez aucune erreur affiché, cela veut dire que le problème vient de votre SQL et non pas du code PHP. Vérifiez les champs de votre table (nom des attributs, types...), ensuite vérifiez si votre code SQL (encapsulé dans le PHP) vérifie les mêmes attributs et s'il contient pas de simples ou doubles cotes de plus ou de moins. Je n'ai pas gardé le code source de cette vidéo malheureusement, mais si vous suivez à la lettre les différentes étapes de ce tuto, vous y arriverez c'est sûr. Courage :)
salut s'il te plais j'aimerais savoire comment insere des video dans un repertoire avec php comme pour les image
Voilà une vidéo où j'ai traité l'upload dans un répertoire. ça s'applique à tous les types de fichiers: th-cam.com/video/Tl04uewyKYk/w-d-xo.html
@@MohamedChiny Merci beaucoup
@@touresiaka551 De rien. Bonne chance :)
@@MohamedChiny Merci t'a vidéo m'a beaucoup aidé
@@touresiaka551 De rien. Je suis content qu'elle vous ait été utile :)
Bonjour, Merci pour tes vidéos. Ils sont très bien expliqué. J'ai pu reprendre les exemples sans difficultés. Mais cela fait déjà deux jours j'éssais en vain d'allé plus loin avec le projet.
En effet je souhaiterais pouvoir afficher les fichiers déjà enregistrés dans mysql dans un tableau php en donnant la possibilité au utilisateurs de cliquer sur une ligne de la table pour télécharger le fichier.
En fait je veux créer un système de partage de fichiers.
Donc je sollicite encore ton aide.
Merci d'avance.
Normalement, ce qui est présenté dans la vidéo est suffisant pour montrer votre projet. Vous listez le contenu sous forme de liens qui mènent vers le fichier souhaité. Vous passez l'id du fichier à travers le lien (exemple:
Merci pour ta réponse je m'y met
Bonjour, lorsque je télécharge un pdf, un word, numbers, pages, ... ils ne s'ajoutent pas à la base de données alors que c'est le cas pour des fichiers .php .jpg, ... avez vous une solution pour ce problème ?
Normalement, si certains fichiers s'ajoutent alors il n'y a aucune raison pour que d'autres ne s'ajoutent pas. Dans ce cas, vérifiez juste si le fichier ajouté n'est pas trop gros. Essayez aussi de renommer vos fichiers par des noms simples. Le problème pourrait être vague, donc mieux vaut commencer par les trucs les plus simples pour voir d'où ça vient. Bonne chance :)
excellent
Merci, c'est motivant :)
Bonjour Monsieur Chiny, merci pour ce tuto.
J'étais en train de voir la vidéo et je me suis rendu compte que c'était vous le propriétaire de la vidéo, je suis un de vos anciens étudiants. J'ai une question, je suis en cours de développement d'une application mobile et j'ai besoin d'envoyer des vidéos à une base donnée externe que je vais créer, est-ce que cela est possible?
Bonjour Ssi El Mehdi. Je suis ravi de lire votre commentaire. Pour votre question, oui, il est possible de mettre les vidéos dans une base de données, mais c'est fortement déconseillé. D'ailleurs j'ai mentionné sur cette vidéo que cette méthode est déconseillée pour les images aussi, mais y'en a qui le font quand même. Par contre, essayez de suivre la méthode que j'ai expliqué dans cette vidéo (c'est valable pour tous type de fichiers) th-cam.com/video/_-W2wO5Sgro/w-d-xo.html
Bonne chance et encore merci :)
bonjour comment allez-vous?
je travail sur une application d'archivage je peux avoir quelque conseil auprès de vous?
Bonsoir. Ça va merci et vous?
Vous voulez des conseils à propos de la méthode de stockage des données à archiver?
Bonjour, pourquoi mets-on un "UNSIGNED" comme attribut pour l'ID ? Qu'est-ce qui va changer si je ne le sélectionne pas ? Et si j'ajoute d'autres tables à ma base de données, il faudra également que les autres Id soient attribué d'un "UNSIGNED", sinon lors de la liaison pour assigner des clés étrangères cela ne fonctionnera pas ? J'ai fais quelques recherches et malheureusement mon anglais n'est pas excellent alors je n'ai pas compris l'utilité de cet attribut. Merci ;)
Bonjour, merci pour votre tuto mais j'aimerais savoir comment je pourrais faire pour justement inserer une images avec d'autre données exemple : id , nom_personne , prenom , images ? cordialement
De rien. Pour l'insertion, il suffit d'ajouter les champs que vous voulez dans la base de données (nom, prenom...) et ajouter ces champs là ainsi que leurs valeurs dans la requête. Techniquement, ça change rien de ce qui a été expliqué, faut juste ajouter les champs voulus. Si vous voulez un exemple avancé d'insertion je vous recommande de regarder cette vidéo (mais ça contient pas d'insertion d'image): th-cam.com/video/m1TYzKW8sW4/w-d-xo.html Bonne chance et merci pour votre commentaire :)
@@MohamedChiny Merci beaucoup de votre réactivité et bonne continuation :)
@@dreniahmetaj4230 De rien. Merci à vous aussi :)
j'ai un souvis avec le Execute j'ai cette erreur "Call to a member function execute() on bool" et je ne sais pas àquoi cela est due donc je me demande est ce que tu as coder cette fonction dans la page connexion.php ?
Non, dans la page connexion.php y a seulement la chaine de connexion (new PDO). C'est la même page connexion que j'ai utilisée dans les autres exemples. Le message d'erreur n'est pas suffisant pour comprendre l'erreur, faut aussi que je vois votre code. Sinon essayez d'écrire exactement la même chose que moi et ça va aller. Bonne chance :)
Bonjour est-ce qu'il est possible de stocker des preset positions d'une webcam en base données mysql ? Autrement dit des images en direct provenant de différents angles d'une webcam IP.
Bonsoir. Si on suppose que vous avez déjà extrait les données de votre webacm alors oui, c'est possible. Mais qui dit webcam dit un nombre important de données surtout si la résolution est élevée, alors dans ce cas de figure il est préférable de recourir à des bases de données noSQL comme MongoDB.
@@MohamedChiny Bonsoir merci beaucoup pour votre réponse
bonjour, svp aidez moi est ce que c'est la meme approche si nous voulons stocker des fichiers html dans une base de données.
Le stockage concerne tous les types de fichiers. Ces fichiers sont dits "des binaires" d'où le nom du type BLOB (Binary Large Object). Donc la réponse est oui, on peut stocker aussi des fichiers HTML. Y a juste une chose, dans certains cas, il faut renseigner l'encodage à l'aide des entêtes HTTP (spécifiées généralement en PHP) au moment de la restitution du fichier depuis la base de données. J'ai parlé de ce détail dans la vidéo 1 de cette série.
@@MohamedChiny merci pour la reponse. La toute dernière question c'est est ce que vous pouvez me mettre le lien du tutoriel que vous avez fait concernant le stockage d'images mais en utilisant le chemin des images. je ne l'ai pas retrouvé sur votre chaine.
JE vous remercie d'avance
Bonjour merci beaucoup pour cette vidéo. Je l'ai essayé ça marche pas
De rien. Vous avez suivi les instructions de la vidéo à la lettre? C'est à dire les bons types des champs de la base de données, le code PHP... Normalement, y a pas quelque chose de spéciale qui aurait empêché le code de marcher, à condition de vérifier les deux points que j'ai mentionnés. Bon courage :)
J'ai pas compris l'inclusion "include(connexion.php)"
Et que le signifie le mot clé "require".
J'ai déjà utilisé cette inclusion dans les vidéos précédentes, c'est pourquoi je me suis pas arrêté là dessus. C'est pour inclure la chaîne de connexion en PDO. "require" et "include" font la même chose, càd inclure des fichiers, la seule différence c'est au niveau de la gravité des erreurs retournées: th-cam.com/video/SBqeE76YV-A/w-d-xo.html
bonjour,
enfin j'ai trouvé ca que je cherché. merci pour votre tutoriel. Cependant j'ai une question? dans le cas d'une session php, comment je dois le formuler dans la requete ? merci
Ça dépend de comment vous gérez votre session. Si vous utilisez la clé primaire de la table que tant qu'identifiant de session alors ça sera simple, remplacez juste l'ID par la variable de session dans la requête. Bonne chance :)
@@MohamedChiny merci, c’est fait !
@@afibase6100 De rien. Bonne continuation :)
Svp je veux comment je peut stocker audio dans ma bdd
C'est le même principe, vraiment rien à modifier dans le code, faut juste remplacer l'image par un fichier quelconque.
Bonjour, pourrions nous avoir le contenue du connexion.php svp.
Bonjour. Dans la description de cette vidéo vous trouverez le code source, y compris le fichier connexion.php qui est pratiquement le même. th-cam.com/video/m1TYzKW8sW4/w-d-xo.html
Courage.
@@MohamedChiny merciiii!
Merci pour cette vidéo... . Mais je veux créer une base de donnée avec python qui contient des fichiers de type dicom...comment puis-je faire ça s'il vous plaît ☺️
De rien. Pour votre question c'est une truc qui a un rapport avec la radiologie je pense. En fait je n'ai jamais travaillé sur le standard DICOM, donc je ne peux pas vous être utile sur le sujet. J'ai fait une petite recherche et j'ai trouvé cette liste de solution opensource DICOM. En creusent un peu je pense que vous y trouverez ce que vous cherchez: medevel.com/10-open-source-pacs-dicom/#:~:text=1%2D%20Orthanc%3A%20Developer%2Dfriendly,different%20database%20and%20DICOM%20viewers.
Bonne chance.
@@MohamedChiny merci beaucoup pour votre réponse rapide et désolé pour le dérangement
Bonjour omar je t'écris suite à la lecture de ton commentaire est ce que tu avais réussi à stocker les images DICOM dans ta BD , si oui tu peux m'expliquer un peu ta technologie que tu avais utilisé et comment ?
Merci d'avance
Quel est le rôle de l'attribut "enctype"
enctype="multipart/form-data" est obligatoire quand on veut procéder à l'upload des fichiers. Si enctype n'est pas renseigné alors sa valeur par défaut est enctype="application/x-www-form-urlencoded". Je vous suggère de regarder la vidéo sur l'upload pour mieux comprendre le principe th-cam.com/video/Tl04uewyKYk/w-d-xo.html
Comment faire si on veux afficher tout les images grâce à ton tableau ?
Pour ça il suffit de programmer une boucle, le traitement dans la boucle est le même que celui expliqué dans la vidéo.
@@MohamedChiny ou avez-vous expliquer le traitement de boucle ?
@@spirit9739 Je ne l'ai pas traité dans la vidéo mais il me semble que ça sera facile pour vous de le faire.
@@MohamedChiny J'ai utilisé la méthode que ta fait sur l'astuce #4 que tu à faite mais ça fonctionne pas la voici :
for ($i=0; $i
@@spirit9739 Ce n'est pas comme ça qu'il faut boucler. Vous bouclez sur , come ça vous aurez intégré autant de balises et chacune d'entre elles va appeler le fichier export.php avec l'ID que vous avez prévu.
Ou est ce que tu as définis la variable $pdo ? Et pourquoi j'ai une erreur avec la fonction prepare dy style "Call to a memeber function prepare() on null"
Merci ! Et super vidéo !
La variable $pdo est initialisée dans le fichier connexion.php (qui contient la chaine de connexion). L'erreur que vous avez eue est probablement due à la mauvaise initialisation de cette variable. Vous trouverez comment faire dans cette vidéo: th-cam.com/video/iMp19c-36ak/w-d-xo.html
Merci pour votre commentaire :)
@@MohamedChiny Merci ! Maintenant que tout est bon, il se passe des choses mais l'image ne s'affiche pas...
@@yasin8732 Vous avez reproduit exactement le même code que moi? Normalement ça devrait s'afficher sans problème, car même les problèmes de droits et privilèges sur l'images ne sont pas envisageables dans ce cas.
@@MohamedChiny Cela a finalement fonctionné, je vous remercie infiniment, si j'ai une bonne note à mon projet ce sera grâce a vous !
@@yasin8732 Je suis content pour vous. La bonne note vous la méritez amplement. C'est vous qui avez fait le travail, mon cours n'est qu'une documentation comme une autre, mais vous en avez fait bon usage. Bravo :)
bonjour merci pour le tuto quans j'essai jai une erreur au niveau de la ligne
$req->execute(array($_FILES["image"]["name"],$_FILES["image"]["size"],$_FILES["image"]["type"],file_get_contents($_FILES["image"]["tmp_name"])));
l'erreur qui vient est :
Notice: Undefined index: image in C:\xampp\htdocs\testo\test.php on line 5
Notice: Undefined index: image in C:\xampp\htdocs\testo\test.php on line 5
Notice: Undefined index: image in C:\xampp\htdocs\testo\test.php on line 5
Notice: Undefined index: image in C:\xampp\htdocs\testo\test.php on line 5
Warning: file_get_contents(): Filename cannot be empty in C:\xampp\htdocs\testo\test.php on line 5
Image
Merci
Bonjour. En fait, elle ne s'agit pas d'une erreur stricte mais une notification. Elle n'empêche pas l'exécution du script PHP. Si vous voulez masquer ce genre d'erreur il suffit de mettre @ avant l'instruction (par exemple@$_FILES["image"]["size]). J'ai déjà traité ce sujet dans l'une de mes vidéos. Bonne chance.
Je demande le lien de la video
Mon code PHP ne n'exécute pas j'arrive a inséré les informations dans ma base de données
@@fadilderme8893 th-cam.com/video/Lyhgawy0H5g/w-d-xo.html
@@fadilderme8893 Il faut donc revoir le code, et il est préférable de l'exécuter étape par étape, si vous écrivez le code entier que vous exécutez ensuite, il est souvent plus difficile d'identifier l'erreur.