Bonsoir à tous
C'est pas vraiment un probleme mais plutot des conseils pour me mettre sur la bonne voie.
Voila J'ai la table avec les champs suivants
img
id_img | nom_img |titre |src |type | ext |alt | href | target
Cette table me permettrai via mon formulaire d'ajouter des images de contenu/gallerie etc.. sur mon site. ( coter admin)
Donc je vais logiquement me retrouver avec la page qui contient le contenu avec les images, la page admin/ajout-img.php.
La ou je bloque c'est dans la maniere d'afficher les images. je demarre mon code de la maniere suivante.
<?php require_once('includes/condb.inc.php');
$requete= $bdd -> query('SELECT * FROM img');
$img = $requete -> fetch();
Si je fait un echo j'ai bien ma premiere entrée qui saffiche.
echo $img['id_img'] . "<br/>";
Mais ce que que chose en toute logique c'est d'afficher tout les images que j'aurai selectionner via SELECT donc je devrait utiliser la boucle while? Si je me sert de la boucle
while ( $img = $requete -> fetch())
{
echo $img['id_img'] . "<br/>";
} ?>
le probleme c'est qu'il me repete en boucle ( normal car je lui demande ) la liste d'image à chaque fois que j'appel justement une image.
<img src="img/<?= $i['src'], ?>" class="img-responsive">
ce que je souhaiterai faire c'est qu'il me les affiches par id. Par exemple :
<div class="container-fluid">
<div class="row">
<section class="bloc-content">
<img src="img/<?= $i['src'] ?>" class="img-responsive"><!--Correspond à l'entree id_img (1) dans ma table-->
<p>blabla</p>
</section>
</div>
</div>
Second bloc
<div class="container-fluid">
<div class="row">
<section class="bloc-content">
<img src="img/<?= $i['src'] ?>" class="img-responsive"><!--Correspond à l'entree id_img (2) dans ma table-->
<p>blabla</p>
</section>
</div>
</div>
Voila en gros, j'imagine que c'est une histoire de $_GET ['ig_img']?
Merci de votre aide.
Nathan
En gros:
$query= $bdd -> query('SELECT * FROM img WHERE id_img IN (1, 2)'); // Si tu utilises l'image 1 et 2 dans ta page par exemple
$results = $requete -> fetchAll();
$images = [];
foreach ($result as $results) {
$images[$result['id_img']] = $result;
}
Et pour l'utiliser:
<img src="img/<?= $images[1]['src'] ?>" class="img-responsive">
Par exemple.
(J'ai pas testé, il se peut qu'il y ai des erreurs de syntaxe...)
Bonsoir,
Si tu souhaites lister toutes les images de la table, je procède un peu différemment.
$requete= $bdd -> query('SELECT * FROM img');
$img = $requete -> fetchAll(); // Récupére toute les données dans un tableau
// Parcours de mon tableau
foreach ($images as $image) {
echo $image['id_img'];
}
Cela te permettra de styliser comme tu le souhaites chaque image.
Oui je trouve ta methode plus parlante. J'ai bien chaque image qui s'affiche id deriere l'autre.
Mais le soucis c'est qu'il me repete en boucle le contenu lorem ipsum.
<?php
$requete= $bdd -> query('SELECT * FROM img');
$img = $requete -> fetchAll();
foreach ($img as $i) { ?>
<div class="container-fluid">
<div class="row">
<section class="bloc-content">
<img src="img/<?= $i['src'] ?>" class="img-responsive">
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Nam itaque suscipit voluptates impedit consequuntur minus cupiditate voluptatibus qui amet excepturi, iure nihil neque sit rem perferendis, incidunt accusantium facere dolores!</p>
</section>
</div>
</div>
<?php } ?>
C'est logique puisque foreach est une boucle qui parcours un élément tant qu'il n'est pas arriver à la fin.
Oui je me suis fait la reflexion, mais alors comment afficher uniquement url de l'id1, puis au besoin l'url de id2 sur un autre bloc?
je doit a chaque fois refaire une requete? avec un SELECT * FROM img LIMIT 0,1; oui LIMIT 1,2; etc? ou un WHERE id_img = 1 ?
Non mais j'ai détailler plus haut la table avec le champ url mais j'ai pas de champs url sorry, c'est le src qui contient url.
Oui mais avec le src j'ai pas de soucis pour afficher mes images sauf qu'il respete la boucle avec le test, ce que je ne souhaite pas.
Pour le moment j'ai trouver cette facon.
<?php
$requete= $bdd -> query('SELECT * FROM img WHERE id_img = 1');
$img = $requete -> fetchAll();
foreach ($img as $i) { ?>
<div class="container-fluid">
<div class="row">
<section class="bloc-content">
<img src="img/<?= $i['src'] ?>" class="img-responsive"><?php } ?>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Nam itaque suscipit voluptates impedit consequuntur minus cupiditate voluptatibus qui amet excepturi, iure nihil neque sit rem perferendis, incidunt accusantium facere dolores!</p>
</section>
</div>
</div>
<!--BLOC 2-->
<?php
$requete= $bdd -> query('SELECT * FROM img WHERE id_img = 2');
$img = $requete -> fetchAll();
foreach ($img as $i) { ?>
<div class="container-fluid">
<div class="row">
<section class="bloc-content">
<img src="img<?= $i['src'] ?>" class="img-responsive"><?php } ?>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Nam itaque suscipit voluptates impedit consequuntur minus cupiditate voluptatibus qui amet excepturi, iure nihil neque sit rem perferendis, incidunt accusantium facere dolores!</p>
</section>
</div>
</div>
je joue avec le "id-img" mais pas sur que ca soit la bonne précedure et surtout si je doit faire une requete a chaque image. ?
Oula c'est quoi ça.
Tu mélange fetch et fetchAll
Quand tu as besoin d'afficher une seule ligne de ta BDD, il te faut un fetch sinon s'il y en a plusieurs, c'est un fetchAll.
Donc pour toi cette requete est mieux adapter?
<?php require_once('includes/condb.inc.php');
$requete= $bdd -> query('SELECT * FROM img WHERE id_img = 1');
while($img = $requete -> fetch()) { ?>
<div class="container-fluid">
<div class="row">
<section class="bloc-content">
<img src="img/<?= $img['src'] ?>" class="img-responsive">
<?php } ?>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Nam itaque suscipit voluptates impedit consequuntur minus cupiditate voluptatibus qui amet excepturi, iure nihil neque sit rem perferendis, incidunt accusantium facere dolores!</p>
</section>
</div>
</div>
obliger donc de refaire une requete a chaque fois a la bdd pour chaque appel 'img' si je veut pouvoir afficher les img par id?
non, il te suffit de faire comme je t'ai montrer pour lister toutes tes images.
<?php
$requete= $bdd -> query('SELECT * FROM img');
$img = $requete -> fetchAll();
foreach ($img as $i) { ?>
<div class="container-fluid">
<div class="row">
<section class="bloc-content">
<img src="img/<?= $i['src'] ?>" class="img-responsive">
<p>Nom : <?= $i['titre'] ?></p>
</section>
</div>
</div>
<?php } ?>
Et si tu veux en faire voir une
$requete= $bdd -> query('SELECT * FROM img WHERE id_img = 1');
$img = $requete -> fetch();
?>
<div class="container-fluid">
<div class="row">
<section class="bloc-content">
<img src="img/<?= $img['src'] ?>" class="img-responsive">
<p>Nom : <?= $img['titre'] ?></p>
</section>
</div>
</div>
Donc comme je disait plus haut , suivant le besoin et le contenu de la page, pour afficher les images selon l'id, je suis obliger de refaire une requete pour chaque img? ( sauf pour une galerie par exemple on fera une boucle).
Salut
L'autre solution est de loader toutes les images dont tu as besoin (id IN (1,2) ) ou toutes les images au pire et de récupérer le résultat de la requete grace à un fetchAll().
Ensuite tu index ton tableau par id et quand tu veux t'en servir tu fais: <?= $images[1]['src'] ?>
. Comme ça tu n'as qu'une seule requeête
J'ai compris pour la premiere parti (id IN c'est voulu ou c'est une faute?,) mais je visualise pas pour indexer le tableau par id
C'est parfait. j'avais pratiquement obtenu le meme resultat, sauf que obliger d'indiquer $img[0] pour avoir id-img 1. j'ai une idee du pourquoi mais je suis pas certain, ton avis?
Et pour le le id in (1... )je connaissais pas. super ca merci beaucoup de votre temps .
<?php require_once('includes/meta.inc.php');
require_once('includes/condb.inc.php');
$requete= $bdd -> query('SELECT * FROM img');
$img = $requete -> fetchAll();
?>
<div class="container-fluid">
<div class="row">
<section class="bloc-content">
<img src="img/<?= $img[0]['src'] ?>" class="img-responsive">
<p>1-Lorem ipsum dolor sit amet, consectetur adipisicing elit. Nam itaque suscipit voluptates impedit consequuntur minus cupiditate voluptatibus qui amet excepturi, iure nihil neque sit rem perferendis, incidunt accusantium facere dolores!</p>
</section>
</div>
</div>
Pour t'expliquer que $img[0] corresponds à l'image 1 c'est que l'index d'in tableau commence toujours par 0.