Problème avec images dans mysql
pierre1098
Messages postés
80
Date d'inscription
Statut
Membre
Dernière intervention
-
pierre1098 Messages postés 80 Date d'inscription Statut Membre Dernière intervention -
pierre1098 Messages postés 80 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Voilà, j'ai un soucis en php, je souhaite stocker des images dans ma base de données sous mysql.
Le problème c'est que tout fonctionne dans mes formulaires sauf ce qui concerne l'image, elle est bien stockée dans la BDD mais sous une forme de suite de chiffre que ne comprend pas et du coup elle devient inutilisable.
Je vous colle le code ci-dessous :
Voila le formulaire :
<form action="" method="post" enctype="multipart/form-data">
<table>
<tr>
<td>Photos à ajouter : </td>
<td><input type="file" name="image" /></td>
</tr>
<td>Texte : </td>
<td><textarea name="texte" cols="30" rows="5"></textarea></td>
</tr>
<tr>
<td></td>
<td>
<input type="submit" value="envoyer" />
</td>
</tr>
</table>
</form>
');
$query = mysql_query('SELECT * FROM ateliers');
$ateliers = mysql_fetch_assoc($query);
et la gestion de l'image :
if (!empty($_FILES['image'])) {
$image = $_FILES['image']['tmp_name'];
$image_nom = md5($_FILES['image']['name']);
$texte = $_POST['texte'];
if (!is_uploaded_file($image)) {
echo('L'image n'a pas été téléchargé !!!');
}
else {
echo atelier_upload ($image, '100', $site_chemin_admin . 'fichiers/img/atelier/small/', $image_nom, '100');
echo atelier_upload ($image, '700', $site_chemin_admin . 'fichiers/img/atelier/', $image_nom, '100');
}
/*mysql_query("INSERT INTO ateliers VALUES('','" . $image_nom . "', '" . $texte . "')");*/
mysql_query ("UPDATE jpscouteaux.ateliers SET image_nom = '".$image_nom."', texte ='".$texte."' WHERE ateliers.id ='".$ateliers['id']."' AND ateliers.image_nom = '".$ateliers['image_nom']."' AND ateliers.texte = '".$ateliers['texte']."' LIMIT 1");
}
Je vous remercie d'avance ^^
Configuration: Windows 7 / Firefox 9.0.1
Voilà, j'ai un soucis en php, je souhaite stocker des images dans ma base de données sous mysql.
Le problème c'est que tout fonctionne dans mes formulaires sauf ce qui concerne l'image, elle est bien stockée dans la BDD mais sous une forme de suite de chiffre que ne comprend pas et du coup elle devient inutilisable.
Je vous colle le code ci-dessous :
Voila le formulaire :
<form action="" method="post" enctype="multipart/form-data">
<table>
<tr>
<td>Photos à ajouter : </td>
<td><input type="file" name="image" /></td>
</tr>
<td>Texte : </td>
<td><textarea name="texte" cols="30" rows="5"></textarea></td>
</tr>
<tr>
<td></td>
<td>
<input type="submit" value="envoyer" />
</td>
</tr>
</table>
</form>
');
$query = mysql_query('SELECT * FROM ateliers');
$ateliers = mysql_fetch_assoc($query);
et la gestion de l'image :
if (!empty($_FILES['image'])) {
$image = $_FILES['image']['tmp_name'];
$image_nom = md5($_FILES['image']['name']);
$texte = $_POST['texte'];
if (!is_uploaded_file($image)) {
echo('L'image n'a pas été téléchargé !!!');
}
else {
echo atelier_upload ($image, '100', $site_chemin_admin . 'fichiers/img/atelier/small/', $image_nom, '100');
echo atelier_upload ($image, '700', $site_chemin_admin . 'fichiers/img/atelier/', $image_nom, '100');
}
/*mysql_query("INSERT INTO ateliers VALUES('','" . $image_nom . "', '" . $texte . "')");*/
mysql_query ("UPDATE jpscouteaux.ateliers SET image_nom = '".$image_nom."', texte ='".$texte."' WHERE ateliers.id ='".$ateliers['id']."' AND ateliers.image_nom = '".$ateliers['image_nom']."' AND ateliers.texte = '".$ateliers['texte']."' LIMIT 1");
}
Je vous remercie d'avance ^^
Configuration: Windows 7 / Firefox 9.0.1
A voir également:
- Problème avec images dans mysql
- Des images - Guide
- Mysql community server - Télécharger - Bases de données
- Extraire images pdf - Guide
- Visualisez cette image avec un logiciel d'édition d'images. combien y a-t-il de pixels noirs sur le camion ? - Télécharger - Photo & Graphisme
- Recherche images - Guide
22 réponses
Bonjour
b55da081f52b722ac0294d4e159a284e, c'est le nom de l'image, pas l'image elle même.
Le nom a cette allure-là parce que tu le transformes avec la fonction md5, c'est une drôle d'idée mais pourquoi pas ? Ce serait quand même plus clair si tu rajoutais au moins la bonne extension à la fin du nom...
Par contre, l'image elle-même n'est pas enregistrée dans ta base : ne comprends-tu pas ce que font ton INSERT et ton UPDATE ?
Je suppose qu'elle est enregistrée grâce à la fonction atelier_upload, mais cette fonction ne fait pas partie de bibliothèques standard du PHP, elle doit être quelque part dans un des fichiers de ton application.
On croit deviner qu'elle range tes images dans le répertoire 'fichiers/img/atelier/ et les miniatures dans 'fichiers/img/atelier/small, mais c'est sans garantie
b55da081f52b722ac0294d4e159a284e, c'est le nom de l'image, pas l'image elle même.
Le nom a cette allure-là parce que tu le transformes avec la fonction md5, c'est une drôle d'idée mais pourquoi pas ? Ce serait quand même plus clair si tu rajoutais au moins la bonne extension à la fin du nom...
Par contre, l'image elle-même n'est pas enregistrée dans ta base : ne comprends-tu pas ce que font ton INSERT et ton UPDATE ?
Je suppose qu'elle est enregistrée grâce à la fonction atelier_upload, mais cette fonction ne fait pas partie de bibliothèques standard du PHP, elle doit être quelque part dans un des fichiers de ton application.
On croit deviner qu'elle range tes images dans le répertoire 'fichiers/img/atelier/ et les miniatures dans 'fichiers/img/atelier/small, mais c'est sans garantie
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Tu as tout compris c'est bien ça
Si tu regarde bien la fonction INSERT et en commentaire car après réflection j'ai choisit l'option UPDATE.
En effet la fonction atelier_upload est une fonction déclarée au préalable dans une pages variables.php qui regroupent toutes les variables du site.
Donc mon problème se situe bien au niveau de l'image quand je l'upload j'ai bien son nom dans la base comme tu dit, elle est rangé dans le bon dossier mais sous la forme d'un carré blanc ?????
Dons à ce niveau la je suis bloqué car elle est inutilisable :s
Si tu regarde bien la fonction INSERT et en commentaire car après réflection j'ai choisit l'option UPDATE.
En effet la fonction atelier_upload est une fonction déclarée au préalable dans une pages variables.php qui regroupent toutes les variables du site.
Donc mon problème se situe bien au niveau de l'image quand je l'upload j'ai bien son nom dans la base comme tu dit, elle est rangé dans le bon dossier mais sous la forme d'un carré blanc ?????
Dons à ce niveau la je suis bloqué car elle est inutilisable :s
J'avais bien vu que l'INSERT était en commentaire, ça ne change rien à ce que j'ai dit.
Dans le code que tu donnes, il n'y a rien qui enregistre l'image, sauf probablement la fonction atelier_upload. Mais comme nous n'avons pas le code de cette fonction, nous ne pouvons pas te dire ce qui ne va pas dedans.
Quand tu dis que l'image est stockée sous la forme d'un carré blanc, qu'est-ce que ça veut dire ? Quelle taille fait-elle ? Est-elle enregistrée avec la bonne extension ?
Dans le code que tu donnes, il n'y a rien qui enregistre l'image, sauf probablement la fonction atelier_upload. Mais comme nous n'avons pas le code de cette fonction, nous ne pouvons pas te dire ce qui ne va pas dedans.
Quand tu dis que l'image est stockée sous la forme d'un carré blanc, qu'est-ce que ça veut dire ? Quelle taille fait-elle ? Est-elle enregistrée avec la bonne extension ?
Voila le code de lla fonction atelier_upload :
function atelier_upload ($image, $img_lar, $chemin, $image_nom, $qualite) {
$dimensions = getimagesize($image);
$max = $img_lar;
if ($dimensions[0]>$dimensions[1]) {
$width = $max;
$height = ($dimensions[1]*($max/$dimensions[0]));
}
else {
$width = ($dimensions[0]*($max/$dimensions[1]));
$height = $max;
}
$img_chemin = imagecreatefromjpeg($image);
$img_nouv = imagecreatetruecolor($width,$height);
imagecopyresampled($img_nouv, $img_chemin, 0, 0, 0, 0, $width, $height, $dimensions[0], $dimensions[1]);
imagejpeg($img_nouv, $chemin . $image_nom, $qualite);
imagedestroy($img_chemin);
imagedestroy($img_nouv);
}
Pour l'image, dans le dossier ou elle est enregistrée, le nom de l'image et le même que dans la base donnée c'est à dire un truc comme ça b55da081f52b722ac0294d4e159a284e
l'extension ne se fait pas donc c'est un carré blanc inexploitable
function atelier_upload ($image, $img_lar, $chemin, $image_nom, $qualite) {
$dimensions = getimagesize($image);
$max = $img_lar;
if ($dimensions[0]>$dimensions[1]) {
$width = $max;
$height = ($dimensions[1]*($max/$dimensions[0]));
}
else {
$width = ($dimensions[0]*($max/$dimensions[1]));
$height = $max;
}
$img_chemin = imagecreatefromjpeg($image);
$img_nouv = imagecreatetruecolor($width,$height);
imagecopyresampled($img_nouv, $img_chemin, 0, 0, 0, 0, $width, $height, $dimensions[0], $dimensions[1]);
imagejpeg($img_nouv, $chemin . $image_nom, $qualite);
imagedestroy($img_chemin);
imagedestroy($img_nouv);
}
Pour l'image, dans le dossier ou elle est enregistrée, le nom de l'image et le même que dans la base donnée c'est à dire un truc comme ça b55da081f52b722ac0294d4e159a284e
l'extension ne se fait pas donc c'est un carré blanc inexploitable
Il n'y a pas d'extension parce que tu n'en mets pas. Tu n'as qu'à en ajouter une. Comme il semble que seul le jpeg est traité :
$image_nom = md5($_FILES['image']['name']).'.jpg';et ça devrait marcher.
Le problème n'est pas résolu j'ai toujours la même chose sauf que derrière le nom imbuvable de l'image j'ai .jpg.
En revanche la photo et bien stockées elle est propre mais elle s'affiche mal, c'est à dire que c'est le nom bizard qui s'affiche et pas l'image :s
va falloir que je réfléchisse encore
Merci pour le moment
En revanche la photo et bien stockées elle est propre mais elle s'affiche mal, c'est à dire que c'est le nom bizard qui s'affiche et pas l'image :s
va falloir que je réfléchisse encore
Merci pour le moment
derrière le nom imbuvable de l'image
C'est quand même bien toi qui a choisi de rendre ce nom imbuvable avec md5, non ?
elle est propre mais elle s'affiche mal
Une image propre est une image qui s'affiche bien, non ? Ou veux-tu dire qu'elle s'affiche bien en double-cliquant dessus, mais qu'elle s'affiche mal avec ton script ?
C'est quand même bien toi qui a choisi de rendre ce nom imbuvable avec md5, non ?
elle est propre mais elle s'affiche mal
Une image propre est une image qui s'affiche bien, non ? Ou veux-tu dire qu'elle s'affiche bien en double-cliquant dessus, mais qu'elle s'affiche mal avec ton script ?
c'est pas vraiment moi qui est choisit je fait juste des modifs sur le site d'un ami mais ce n'est pas mon code source ^^ donc je m'adapte.
Quand je dit qu'elle est propre c'est que dans le dossier ou elle est stockées elle est normal mais sur le site elle affiche le nom de l'image que l'on ne peux que surligner comme du texte, Dois-je mettre un format spécial pour cette image dans ma BDD
Quand je dit qu'elle est propre c'est que dans le dossier ou elle est stockées elle est normal mais sur le site elle affiche le nom de l'image que l'on ne peux que surligner comme du texte, Dois-je mettre un format spécial pour cette image dans ma BDD
c'est bon j'ai compris mon erreur.
En fait l'image s'affiche en fonction de l'adresse de celle-ci, c'est à dire par rapport au dossier ou elle est stockée, or dans ma base l'adresse de l'image était vide.
J'ai donc saisie l'emplacement de l'image manuellement et ça marche. Il faut donc que lorsque je stock mon image je récupère l'adresse de celle-ci.
En fait l'image s'affiche en fonction de l'adresse de celle-ci, c'est à dire par rapport au dossier ou elle est stockée, or dans ma base l'adresse de l'image était vide.
J'ai donc saisie l'emplacement de l'image manuellement et ça marche. Il faut donc que lorsque je stock mon image je récupère l'adresse de celle-ci.
Je reviens sur ce post car j'ai encore un soucis.
Voilà après avoir réglé tout mes problèmes d''images etc je me retrouve coincé.
Tout ce que j'ai fait fonctionne bien en local il n'y a aucun soucis, mais arrivé sur le serveur en ligne ça ne marche pas,
mes requêtes sql ne fonctionne pas je ne voit pas trop pourquoi car les fichiers de connections fonctionne bien et sont connectés à la bonne base vu que les autres pages fonctionne mais j'ai deux requêtes qui fonctionne mal quelqu'un aurait une idée ??
Voilà après avoir réglé tout mes problèmes d''images etc je me retrouve coincé.
Tout ce que j'ai fait fonctionne bien en local il n'y a aucun soucis, mais arrivé sur le serveur en ligne ça ne marche pas,
mes requêtes sql ne fonctionne pas je ne voit pas trop pourquoi car les fichiers de connections fonctionne bien et sont connectés à la bonne base vu que les autres pages fonctionne mais j'ai deux requêtes qui fonctionne mal quelqu'un aurait une idée ??
Un grand classique quand on passe de local à en ligne, c'est le problème de majuscules/ minuscules.
Windows est insensible à la casse dans les noms de fichiers, donc aussi ceux des bases et des tables. On appelle une table 'MaTable' dans sa base, et 'matable' dans sa requête, ça passe très bien sous Windows. Mais ça ne marche plus si on est hébergé sous Linux par exemple.
Même problème avec les noms de fichiers et de répertoires.
Windows est insensible à la casse dans les noms de fichiers, donc aussi ceux des bases et des tables. On appelle une table 'MaTable' dans sa base, et 'matable' dans sa requête, ça passe très bien sous Windows. Mais ça ne marche plus si on est hébergé sous Linux par exemple.
Même problème avec les noms de fichiers et de répertoires.
Oui mais justement c'est pas la première fois que je fait ça et j'ai super fait attention à la casse
En fait voila mon code c'est ça :
<div id="corps">
<div id="titre"><img src="' . $site_chemin_absolu . 'fichiers/img/titre/administration.png" alt="Administration" /></div>
<div id="corps_haut"></div>
<div id="corps_milieu">
<div id="texte">
');
include( $site_chemin_admin . 'fichiers/site/modules/_menu_admin.php');
echo('
<hr />
<p>Pour modifier Atelier remplisser les champs suivants.</p>
<form action="" method="post" enctype="multipart/form-data">
<table>
<tr>
<td>Photos à ajouter : </td>
<td><input type="file" name="image" /></td>
</tr>
<td>Texte : </td>
<td><textarea name="texte" cols="30" rows="5"></textarea></td>
</tr>
<tr>
<td></td>
<td>
<input type="submit" value="envoyer" />
</td>
</tr>
</table>
</form>
');
$query = mysql_query('SELECT * FROM atelier');
$atelier = mysql_fetch_assoc($query);
if (!empty($_FILES['image'])) {
$image = $_FILES['image']['tmp_name'];
$image_nom = ($_FILES['image']['name']);
$texte = $_POST['texte'];
if (!is_uploaded_file($image)) {
echo('L'image n'a pas été téléchargé !!!');
}
else {
echo atelier_upload ($image, '100', $site_chemin_admin . 'fichiers/img/atelier/small/', $image_nom, '100');
echo atelier_upload ($image, '700', $site_chemin_admin . 'fichiers/img/atelier/', $image_nom, '100');
}
/*mysql_query("INSERT INTO atelier VALUES('','" . $image_nom . "', '" . $texte . "')");*/
mysql_query ("UPDATE suche114514.atelier SET image_nom = '".$image_nom."', texte ='".$texte."' WHERE atelier.id ='".$atelier['id']."' AND atelier.image_nom = '".$atelier['image_nom']."' AND atelier.texte = '".$atelier['texte']."'");
}
else {
echo('Merci de remplir tous les champs');
}
echo('
</div>
</div>
<div id="corps_bas"></div>
</div>
<div id="bas">
');
include ( $site_chemin_admin . $site_bas_chemin );
echo ('
</div>
</div>
</body>
</html>
');
et le problème c'est lorsque je clique sur envoyer, le bas de la page web ne s'affiche plus et la requête vers la BDD non plus
<div id="corps">
<div id="titre"><img src="' . $site_chemin_absolu . 'fichiers/img/titre/administration.png" alt="Administration" /></div>
<div id="corps_haut"></div>
<div id="corps_milieu">
<div id="texte">
');
include( $site_chemin_admin . 'fichiers/site/modules/_menu_admin.php');
echo('
<hr />
<p>Pour modifier Atelier remplisser les champs suivants.</p>
<form action="" method="post" enctype="multipart/form-data">
<table>
<tr>
<td>Photos à ajouter : </td>
<td><input type="file" name="image" /></td>
</tr>
<td>Texte : </td>
<td><textarea name="texte" cols="30" rows="5"></textarea></td>
</tr>
<tr>
<td></td>
<td>
<input type="submit" value="envoyer" />
</td>
</tr>
</table>
</form>
');
$query = mysql_query('SELECT * FROM atelier');
$atelier = mysql_fetch_assoc($query);
if (!empty($_FILES['image'])) {
$image = $_FILES['image']['tmp_name'];
$image_nom = ($_FILES['image']['name']);
$texte = $_POST['texte'];
if (!is_uploaded_file($image)) {
echo('L'image n'a pas été téléchargé !!!');
}
else {
echo atelier_upload ($image, '100', $site_chemin_admin . 'fichiers/img/atelier/small/', $image_nom, '100');
echo atelier_upload ($image, '700', $site_chemin_admin . 'fichiers/img/atelier/', $image_nom, '100');
}
/*mysql_query("INSERT INTO atelier VALUES('','" . $image_nom . "', '" . $texte . "')");*/
mysql_query ("UPDATE suche114514.atelier SET image_nom = '".$image_nom."', texte ='".$texte."' WHERE atelier.id ='".$atelier['id']."' AND atelier.image_nom = '".$atelier['image_nom']."' AND atelier.texte = '".$atelier['texte']."'");
}
else {
echo('Merci de remplir tous les champs');
}
echo('
</div>
</div>
<div id="corps_bas"></div>
</div>
<div id="bas">
');
include ( $site_chemin_admin . $site_bas_chemin );
echo ('
</div>
</div>
</body>
</html>
');
et le problème c'est lorsque je clique sur envoyer, le bas de la page web ne s'affiche plus et la requête vers la BDD non plus
Que des trucs bizarres...
D'après ton code :
C'est toujours sur la première image de ta base que tu travailles.
De plus, tu ne fais que des mises à jour. Mais pour avoir quelque chose à mettre à jour, il faut bien avoir fait un INSERT au départ...
Pour essayer de piéger une erreur, ajoute des or die(mysql_error()); :
Au passage pourquoi tous ces AND dans ton dernier WHERE ? si id est bien un identifiant unique (comme il devrait l'être en bonne conception) , inutile de tester les autres champs
D'après ton code :
$query = mysql_query('SELECT * FROM atelier'); $atelier = mysql_fetch_assoc($query);
C'est toujours sur la première image de ta base que tu travailles.
De plus, tu ne fais que des mises à jour. Mais pour avoir quelque chose à mettre à jour, il faut bien avoir fait un INSERT au départ...
Pour essayer de piéger une erreur, ajoute des or die(mysql_error()); :
$query = mysql_query('SELECT * FROM atelier') or die(mysql_error()); ... mysql_query ("UPDATE suche114514.atelier SET image_nom = '".$image_nom."', texte ='".$texte."' WHERE atelier.id ='".$atelier['id']."' AND atelier.image_nom = '".$atelier['image_nom']."' AND atelier.texte = '".$atelier['texte']."'") or die (mysql_error());
Au passage pourquoi tous ces AND dans ton dernier WHERE ? si id est bien un identifiant unique (comme il devrait l'être en bonne conception) , inutile de tester les autres champs
Bon alors j'ai bien essayé de pieger une erreur comme tu me l'a conseillé mais le résultat et le même et je sais toujours pas d'où ça vient :s
Oui id est unique ^^
Oui id est unique ^^
Aucun message d'erreur ?
1 - ton script, s'il est vraiment comme on le voit dans ton message de 17h26, ne marche certainement pas en local. Il comporte (au moins) une erreur de syntaxe :
echo('L'image n'a pas été téléchargé !!!'); est incorrect, ce devrait être
echo('L\'image n\'a pas été téléchargée !!!');
Ajoute au début de ton script :
error_reporting(E_ALL); pour faire afficher tous les messages d'erreur.
2 - pour voir à partir d'où ton script plante, ajoute quelques echo 'coucou1'; echo 'coucou2'; etc... ici et là jusqu'à voir à partir de quelle ligne il s'arrête ( à retirer après, bien sûr)
1 - ton script, s'il est vraiment comme on le voit dans ton message de 17h26, ne marche certainement pas en local. Il comporte (au moins) une erreur de syntaxe :
echo('L'image n'a pas été téléchargé !!!'); est incorrect, ce devrait être
echo('L\'image n\'a pas été téléchargée !!!');
Ajoute au début de ton script :
error_reporting(E_ALL); pour faire afficher tous les messages d'erreur.
2 - pour voir à partir d'où ton script plante, ajoute quelques echo 'coucou1'; echo 'coucou2'; etc... ici et là jusqu'à voir à partir de quelle ligne il s'arrête ( à retirer après, bien sûr)