Stocker des images dans une BDD

Pascal-Jr -  
 Pascal-Jr -
Bonjour,
Je voudrais stocké des images dans une base de données MySQL.

En fait ça serait pour un système d'annonce :
j'ai une liste de moto à vendre sous forme de tableau (comme sur le bon coin).
Des personnes m'ont aidé à achever mes scripts, d'ailleurs je les en remercies encore,
mon système fonctionne.

Mon problème :
Je voudrais afficher des photos pour chacune des moto :
- une photo visible de la liste des motos
- et 3 photos visible de la fiche de la moto choisi par l'utilisateur.
En cherchant, j'ai entendu parlé de BLOB ou de stocker seulement le chemin de l'image.

Merci d'avance à tous pour votre implication.


A voir également:

7 réponses

MastercroW Messages postés 1094 Date d'inscription   Statut Membre Dernière intervention   163
 
Bonsoir,
Me revoilà x), mais je pense je vais te résoudre ton problème dès la première réponse !
Le but c'est de les appeler par un nom et de les mettre dans un dossier.
Exemple :
<img src="motos/<?php echo $_SESSION['image']; ?>.png" title="<?php echo $_SESSION['image']; ?>" width="100" height="100"/>
Dans ta base de donnée ta moto s'appelle par exemple corsaro, et dans ton dossier ton image s'appelle corsaro.png
En gros sa affichera <img src="motos/corsaro.png" title="corsaro" width="100" height="100"/>
Voilà j'espère que mon aide t'aura été utile.
1
MastercroW Messages postés 1094 Date d'inscription   Statut Membre Dernière intervention   163
 
PS : je pense pas que c'est dans une $_SESSION mais à toi de changer sa après.
Exemple : <img src="motos/<?php echo $donnees['image']; ?>.png" title="<?php echo $donnees['image']; ?>" width="100" height="100"/>
0
Profil bloqué
 
C'est mieux, et ne met surtout pas tes photos directement dans la base de donnée. (oui déjà vu ça, et après ça demande pourquoi les accès bases sont lents :) )
0
Pascal-Jr
 
Mais par rapport à la structure de la table quel type je mets à "images" ?
C'est inutile de mettre BLOB, vu que je vais stocké du texte, n'est-ce pas ?
0
MastercroW Messages postés 1094 Date d'inscription   Statut Membre Dernière intervention   163
 
Ben regardes bien.
<img src="motos/<?php echo $donnees['image']; ?>.png" j'ai mis PNG après tu peux changé en mettant JEPG, GIF etc
Mais il faut que toute tes images soit au même format pour pas endurcir la chose.
Sinon tu peux mettre en base de donnée :
BMW.png et mettre ceci en codage HTML/PHP :
<img src="motos/<?php echo $donnees['image']; ?>" title="<?php echo $donnees['image']; ?>" width="100" height="100"/>

0
Pascal-Jr
 
Oui mais concernant la table SQL, je ne vais pas mettre INT à "image" dans la table, ni BLOB vu que je vais l'enregistrer dans un dossier et me servir de la base de données pour l'afficher.
Je me trompes ?
0
MastercroW Messages postés 1094 Date d'inscription   Statut Membre Dernière intervention   163
 
Tes images vont être dans un dossier dans ton site.
Donc tu mets juste une colonne image en text ou varchar par exemple
0
Pascal-Jr
 
Ok c'est ce que je me disais.
Et pardon pour le commentaire déplacé (si tu l'as vu) c'est mon collègue qui aime bien faire des ... blagues ... En même temps, il n'a pas totalement tord. :)
0
Pascal-Jr
 
Par contre, comment combiné un script d'upload et l'envoi du nom de l'image sur la base de données ?
0
MastercroW Messages postés 1094 Date d'inscription   Statut Membre Dernière intervention   163
 
Si dans ta base de donnée c'est BMW.png

Le serveur te retournera :
<img src="motos/BMW.png" title="BMW.png" width="100" height="100"/>
0
idrissess Messages postés 87 Date d'inscription   Statut Membre Dernière intervention   12
 
Bonjour;
Avec MySQL vous n'avez qu'a ajouter pour un table une colonne de type LONGBLOB (DATATYPE) et parcourir l'image pour la stocker.
0
MastercroW Messages postés 1094 Date d'inscription   Statut Membre Dernière intervention   163
 
A quoi sa sert ?
A rien du tout en plus sa ralenti ta base de donnée.
Mon idée est plus simple et moins compliqué.
0
Pascal-Jr
 
Ca serait plus simple pour moi vu que je suis un débutant.
Mais je me disais que si je n'avais qu'une dizaine de modèle en vente, peut-être que je pourrais utilisé la manière simple.
0
MastercroW Messages postés 1094 Date d'inscription   Statut Membre Dernière intervention   163
 
Non pascal c'est pas plus simple tu sais quand tu affiche ton modèle, et ben tu affiche ton image !
0
Pascal-Jr
 
Erf ... Je suis totalement paumé ...
Par contre je me disais que je pouvais me servir de la supervariable $_FILES['photo']['name'] pour récupérer le nom de l'image à l'upload
0
MastercroW Messages postés 1094 Date d'inscription   Statut Membre Dernière intervention   163
 
Envoi ton code PHP ?
0

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

Posez votre question
Pascal-Jr
 
Avec plaisir :

// Code de traitement pour la base de données
<?php
try
{
$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
$bdd = new PDO('mysql:host=localhost;dbname=annonces' , 'root', '', $pdo_options);

$req = $bdd->prepare('INSERT INTO article(modele, photo, cylindree, km, annee, prix, description) VALUES(:modele, :photo, :cylindree, :km, :annee, :prix, :description)');
$req->execute(array(
'modele' => $_POST['modele'],
'photo' => $_POST['photo'],
'cylindree' => $_POST['cyl'],
'km' => $_POST['km'],
'annee' => $_POST['annee'],
'prix' => $_POST['prix'],
'description' => $_POST['description'],
));
echo "L'annonce a bien été publiée";
}
catch(Exception $e)
{
die('Erreur : '.$e->getMessage());
}
?>

//Code de traitement de l'image
<?php
if (isset($_FILES['photo']) AND $_FILES['photo']['error'] = 0)
{
if ($_FILES['photo']['size'] <= 3000000)
{
$infosfichier = pathinfo($_FILES['photo']['name']);
$extension_upload = $infosfichier['extension'];
$extension_autorisees = array('jpg', 'jpeg', 'JPEG', 'JPG' 'gif', 'GIF', 'png', 'PNG');
if (in_array($extension_upload, $extension_autorisees))
{
move_upload_files($_FILES['photo']['tmp_name'], 'images/occasions/' . basename($_FILES['photo']['name']));
echo "<p>L'envoie de la photo a bien était effectué</p>";
}
}
}
?>
0
MastercroW Messages postés 1094 Date d'inscription   Statut Membre Dernière intervention   163
 
Celui qui montre l'annonce plutôt, je te ferais voir comment faire pour envoyer tes images.
0
Pascal-Jr
 
Sous forme de tableau ou la fiche descriptive du véhicule ?
Dans le doute je mets les deux.

<?php
// Code de pour l'affichage des annonces
try
{
$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
$bdd = new PDO('mysql:host=localhost;dbname=annonces' , 'root', '', $pdo_options);

$req = $bdd->query('SELECT * FROM article');

while ($donnees = $req->fetch())
{
?>
<tr>
<td><img src="images/occasions/<?php echo $donnees['photo']; ?>.jpg" title="<?php echo $donnees['photo']; ?>" width="150px" height="113px" /></td>
<td><a href="fiche.php?id=<?php echo $donnees['id']; ?>" action="fiche.php?id=<?php echo $donnees['id']?>"; title="Consulter la fiche"><?php echo $donnees['modele']; ?></a></td>
<td><?php echo $donnees['cylindree']; ?>cc</td>
<td><?php echo $donnees['km']; ?></td>
<td><?php echo $donnees['annee']; ?></td>
<td><?php echo $donnees['prix']; ?></td>
</tr>
<?php
}
$req->closeCursor();
}
catch(Exception $e)
{
die('Erreur : '.$e->getMessage());
}
?>

// Code d'affichage du modèle choisi
<?php
try
{
$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
$bdd = new PDO('mysql:host=localhost;dbname=annonces', 'root', '', $pdo_options);

$req = $bdd->prepare('SELECT * FROM article WHERE id = ?');
$req->execute(array($_GET['id']));

while ($donnees = $req->fetch())
{
?>
<ul>
<li><img src="images/occasions/<?php echo $donnees['photo']; ?>.jpg" title="<?php echo $donnees['photo']; ?>" width="500px" height="376px" /></a>
<li>Marque/Modèle : <?php echo $donnees['modele']; ?></li>
<li>Cylindrée : <?php echo $donnees['cylindree']; ?></li>
<li>Km : <?php echo $donnees['km']; ?></li>
<li>Année : <?php echo $donnees['annee']; ?></li>
<li>Prix : <?php echo $donnees['prix']; ?></li>
<li>Description : <?php echo $donnees['description']; ?></li>
</ul>
<?php
}
$req->closeCursor();
}
catch(Exception $e)
{
die('Erreur : '.$e->getMessage());
}
?>
0
MastercroW Messages postés 1094 Date d'inscription   Statut Membre Dernière intervention   163
 
Ben tu mets toutes tes images dans : images/occasions/ du formats .jpg.
Dans artice sur la colonne photo tu met un nombre par exemple.
Et dans tes images/occasions/ tu mets l'image qui correspond au nombre. C'est aussi simple que ça !
0
Pascal-Jr
 
o_O Si tu le dis ...
Pour le nombre, je mets l'auto-incrémentation ?
0
MastercroW Messages postés 1094 Date d'inscription   Statut Membre Dernière intervention   163
 
Comme tu veux x)
0
Pascal-Jr
 
Ne pouvant pas utiliser l'auto-incrémentation pour ma colonne photo (en plus de la colonne 'id')
j'ai mit :
<td><img src="images/occasions/<?php echo $donnees['id']; ?>.jpg" title="<?php echo $donnees['modele']; ?>" width="150px" height="113px" /></td>
Ca revient au même (de mon point de vue).
Maintenant ce que j'aimerais c'est que l'upload soit synchro avec l'annonce que je poste.
Par exemple, si je poste mon annonce qui utilisera l'"id" n° 4, l'image se renomme à l'upload 4.jpg.
0
Pascal-Jr
 
J'ai essayé de me servir de l'auto-incrémentation et de rajouté un à chaque fois à la dernière entrée, ce qui ma donné ce script :
<?php
try
{
$pdo_options[PDO::ERRMODE] = PDO::ERRMODE_EXCEPTION ;
$bdd = new PDO('mysql:host=localhost;dbname=annonces', 'root', '', $pdo_options);

$req = $bdd->query('SELECT * FROM article ORDER BY id DESC LIMIT 0,1');

if (isset($_FILES['photo']) AND $_FILES['photo']['error'] == 0)
{
if ($_FILES['photo']['size'] <= 5000000)
{
$infosfichier = pathinfo($_FILES['photo']['name']);
$extension_upload = $infosfichier['extension'];
$extensions_autorisees = array('jpg', 'jpeg', 'JPG', 'JPEG', 'gif', 'GIF', 'png', 'PNG');
if (in_array($extension_upload, $extensions_autorisees))
{
// C'est ici que je me suis servi de l'A-I pour rajouté "+1"
move_uploaded_file($_FILES['photo']['tmp_name'], 'images/occasion/'. echo $donnees['id']+1;'.png');
}
}
}
}
catch (Exception $e)
{
die('Erreur : '.$e->getMessage());
}
?>
Le principe étant que je rajoute "1" à l'id a chaque fois que je rajoute une entrée je fais la même chose à l'upload de l'image.
Etant donné que si je veux mettre l'annonce n°6 et que j'en suis à la 5 je rajoute 1 à l'id pour avoir un id égal a 6 et un numéro à l'image égal à 6.
Mais ça ne marche pas -_-'.
Une idée ?
J'ai une erreur unexpected T_ECHO au niveau de move_uploaded_file(...)
0
Pascal-Jr
 
Une erreur de débutant (que je suis), il fallait faire :
move_uploaded_file($_FILES['photo']['tmp_name'], 'images/occasions/' . $donnees['id'] + 1 . '.jpg');
0