Stocker des images dans une BDD
Pascal-Jr
-
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.
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:
- Stocker des images dans une BDD
- Des images - Guide
- Légender une image - Guide
- Extraire images pdf - Guide
- Insérer une image dans word sans bouger le texte - Guide
- Créer une image iso - Guide
7 réponses
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.
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.
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']; ?>.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"/>
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.
Avec MySQL vous n'avez qu'a ajouter pour un table une colonne de type LONGBLOB (DATATYPE) et parcourir l'image pour la stocker.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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>";
}
}
}
?>
// 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>";
}
}
}
?>
Celui qui montre l'annonce plutôt, je te ferais voir comment faire pour envoyer tes images.
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());
}
?>
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());
}
?>
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 !
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 !
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.
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.
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(...)
<?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(...)
Exemple : <img src="motos/<?php echo $donnees['image']; ?>.png" title="<?php echo $donnees['image']; ?>" width="100" height="100"/>
C'est inutile de mettre BLOB, vu que je vais stocké du texte, n'est-ce pas ?