Problème avec images dans mysql

Fermé
pierre1098 Messages postés 80 Date d'inscription vendredi 5 juin 2009 Statut Membre Dernière intervention 2 février 2012 - 23 janv. 2012 à 09:41
pierre1098 Messages postés 80 Date d'inscription vendredi 5 juin 2009 Statut Membre Dernière intervention 2 février 2012 - 2 févr. 2012 à 20:00
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

22 réponses

Melooo Messages postés 1405 Date d'inscription vendredi 28 novembre 2008 Statut Membre Dernière intervention 18 mars 2013 84
23 janv. 2012 à 10:43
Salut,
Donne nous ce que tu obtiens lorsque tu le met dans la base de données
0
pierre1098 Messages postés 80 Date d'inscription vendredi 5 juin 2009 Statut Membre Dernière intervention 2 février 2012 2
23 janv. 2012 à 13:30
un truc dans ce genre

b55da081f52b722ac0294d4e159a284e
0
pierre1098 Messages postés 80 Date d'inscription vendredi 5 juin 2009 Statut Membre Dernière intervention 2 février 2012 2
24 janv. 2012 à 22:10
un petit up svp
0
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
pierre1098 Messages postés 80 Date d'inscription vendredi 5 juin 2009 Statut Membre Dernière intervention 2 février 2012 2
26 janv. 2012 à 17:33
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
0
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 ?
0
pierre1098 Messages postés 80 Date d'inscription vendredi 5 juin 2009 Statut Membre Dernière intervention 2 février 2012 2
27 janv. 2012 à 11:04
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
0
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.
0
pierre1098 Messages postés 80 Date d'inscription vendredi 5 juin 2009 Statut Membre Dernière intervention 2 février 2012 2
Modifié par pierre1098 le 27/01/2012 à 14:10
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
0
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 ?
0
pierre1098 Messages postés 80 Date d'inscription vendredi 5 juin 2009 Statut Membre Dernière intervention 2 février 2012 2
27 janv. 2012 à 14:17
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
0
pierre1098 Messages postés 80 Date d'inscription vendredi 5 juin 2009 Statut Membre Dernière intervention 2 février 2012 2
27 janv. 2012 à 14:20
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.
0
pierre1098 Messages postés 80 Date d'inscription vendredi 5 juin 2009 Statut Membre Dernière intervention 2 février 2012 2
31 janv. 2012 à 16:14
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 ??
0
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.
0
pierre1098 Messages postés 80 Date d'inscription vendredi 5 juin 2009 Statut Membre Dernière intervention 2 février 2012 2
31 janv. 2012 à 17:23
Oui mais justement c'est pas la première fois que je fait ça et j'ai super fait attention à la casse
0
pierre1098 Messages postés 80 Date d'inscription vendredi 5 juin 2009 Statut Membre Dernière intervention 2 février 2012 2
31 janv. 2012 à 17:26
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
0
Que des trucs bizarres...
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
0
pierre1098 Messages postés 80 Date d'inscription vendredi 5 juin 2009 Statut Membre Dernière intervention 2 février 2012 2
31 janv. 2012 à 18:13
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 ^^
0
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)
0
pierre1098 Messages postés 80 Date d'inscription vendredi 5 juin 2009 Statut Membre Dernière intervention 2 février 2012 2
1 févr. 2012 à 15:19
Le truc c'est que je voit ou il plante c'est lorsque je clique sur envoyer

ça envoi bien l'image dans mon dossier fichiers/img/ateliers mais pas dans ma base
0