[RESOLU] Afficher même type de données mysql dans div différente

Petit nouveau ! | 9 Messages

27 mai 2016, 10:24

Bonjour à tous,

Alors ma question est peut être débile, mais j'aimerai pouvoir afficher les données de cette requête :

Code : Tout sélectionner

function get_presentationContent() { global $bdd; $req = $bdd->prepare("SELECT title, subtitle, content FROM posts WHERE type='presentation'"); $req->execute(); $presentationContent = $req->fetchAll(); return $presentationContent; }
et derrière afficher une donnée comme ça :

Code : Tout sélectionner

<div class="row"> <?php foreach($presentationContent as $presContent): ?> <h2 class="titre"><?php echo $presContent['title']; ?></h1> <h3 class="soustitre"><?php echo $presContent['subtitle']; ?></h2> </div>
et une autre plus loin dans ma page.

Dans 2 divs différentes. Alors déjà en PHP, que faut il que j'utilise ? Si je fais un foreach, ça va tout afficher non ? Si quelqu'un pouvait m'éclairer.

Mammouth du PHP | 688 Messages

27 mai 2016, 10:33

il faut fermer le foreach.
s'il n'y a qu'un enregistrement retourné avec type='presentation', alors le foreach fait l'affaire.

Petit nouveau ! | 9 Messages

27 mai 2016, 10:41

Alors j'ai pas tout mis, je ferme bien le foreach plus loin. Justement il y a plusieurs enregistrement dans "presentation". Et je souhaite afficher 1 donnée dans une div, et une autre dans une autre div.

En gros c'est ça

Code : Tout sélectionner

<section class="presentation"> <div class="row"> <?php foreach($presentationContent as $presContent): ?> <h1 class="titre"><?php echo $presContent['titren°1']; ?></h1> <h2 class="soustitre"><?php echo $presContent['soustitren°1']; ?></h2> </div> <div class="row"> <div class="small-12 medium-3 columns"> <img class="imgDeco" src="http://placehold.it/450x350" alt=""> </div> <div class="small-12 medium-6 columns"> <p><?php echo $presContent['contenun°1']; ?></p> <?php endforeach; ?> </div> <div class="small-12 medium-3 columns"> <img class="imgDeco" src="http://placehold.it/450x350" alt=""> </div> </div> </section><!-- FIN PRESENTATION --> <hr/> <section class="presentation"> <div class="row"> <?php foreach($presentationContent as $presContent): ?> <h2 class="titre"><?php echo $presContent['titren°2']; ?></h1> <h3 class="soustitre"><?php echo $presContent['soustitre°2']; ?></h2> </div> <div class="row"> <div class="small-12 medium-4 columns hide-for-small-only"> <img class="imgDeco" src="http://placehold.it/450x350" alt=""> </div> <div class="small-12 medium-8 columns"> <p><?php echo $presContent['contenun°2']; ?><p> <?php endforeach; ?> </div> </div> </section><!-- FIN PRESENTATION -->

Mammouth du PHP | 688 Messages

27 mai 2016, 10:49

$tab = get_presentationContent();
$contenu1 = $tab[0];
$contenu2 = $tab[1];

Petit nouveau ! | 9 Messages

27 mai 2016, 11:02

Je dois donc changer ma fonction get_presentationContent() en incluant ces variables ?

Là elle fonctionne comme ça

Code : Tout sélectionner

// Traitement des données de présentation foreach($presentationContent as $cle => $presContent) { $presentationContent[$cle]['title'] = utf8_encode($presContent['title']); $presentationContent[$cle]['subtitle'] = utf8_encode($presContent['subtitle']); $presentationContent[$cle]['content'] = utf8_encode($presContent['content']); } $presentationContent = get_presentationContent(); // Afficher sur la page presentation.php include_once('vue/home/presentation.php');

Avatar du membre
Mammouth du PHP | 1609 Messages

27 mai 2016, 11:58

Bonjour toute la partie à répéter doit évidement être dans le foreach.
<?php foreach($presentationContent as $presContent): ?>
<section class="presentation">
   
  <div class="row">
    <h1 class="titre"><?php echo $presContent['titre']; ?></h1>
    <h2 class="soustitre"><?php echo $presContent['soustitre']; ?></h2>
  </div>

  <div class="row">
    <div class="small-12 medium-3 columns">
      <img class="imgDeco" src="http://placehold.it/450x350" alt="">
    </div>

    <div class="small-12 medium-6 columns">
      <p><?php echo $presContent['contenu']; ?></p>
    </div>

    <div class="small-12 medium-3 columns">
      <img class="imgDeco" src="http://placehold.it/450x350" alt="">
    </div>
  </div>

</section><!-- FIN PRESENTATION -->
<hr/>
<?php endforeach; ?>
Développeur web depuis + de 20 ans

Petit nouveau ! | 9 Messages

27 mai 2016, 12:32

Oui mais en fait j'ai du mal m'exprimer, je vais décrire un peu mieux :).

J'ai un base de données de ce type :

Table Posts
id-title-subtitle-created-type

Dans cette table Posts, j'ai en fait quasiment tout mon site, que je définis par un type.

J'ai par exemple type=page, type=atouts, type=presentation ...

Jusque ici j'essayais de rendre la page d'accueil dynamique, ce qui a plutôt bien marché. Sur l'accueil, j'affiche les données de la table Posts avec un type=peu importe, dans la même div.

Par exemple, type=atouts, tout est affiché dans une seule div donc ça va.

Là pour la page presentation.php, je souhaiterais récupérer les posts type=presentation, avec 1 donnée de ce type dans une div, et l'autre donnée dans une autre div.

Et c'est ça que je n'arrive pas à faire.

Avatar du membre
Mammouth du PHP | 1609 Messages

27 mai 2016, 12:56

Désolé Landers mais je ne comprends pas où est le problème. Tu parles de div mais y a pleins de div dans le code html et tu montres un code avec 2 sections l'une avec titre n°1 etc et l'autre avec titre n°2 etc. C'est exactement ce que fait le code que je t'ai mis. Il crée 2 sections présentation chacune contenant les informations d'une ligne...
Développeur web depuis + de 20 ans

Petit nouveau ! | 9 Messages

27 mai 2016, 13:03

Le truc c'est que j'ai une div avec 1 image et une autre avec 2 images, donc comment faire avec un foreach ?

Avatar du membre
Mammouth du PHP | 1609 Messages

27 mai 2016, 15:49

Euh la de ce que je vois les images pour le moment c'est juste du placeholder... le but c'est quoi ? de mettre 2 images sur le premier et une seule sur les suivants ? tu auras toujours uniquement 2 posts ? tu en auras peut être plus ? pourquoi 2 images sur le premier et 1 seule sur le deuxième ? d'où vont sortir les images ?
Sinon il suffit par exemple de mettre un i = 0 avant la boucle, de l'incrémenter dedans et d'afficher la deuxième image en fonction de la valeur de i ou d'un modulo de i dans le cas ou tu aurais plus de 2 posts et voudrais alterner entre 2 images et 1 image. Et puis arrêtes de parler de div à tout bout de champ ce n'est pas clair. ^^
Développeur web depuis + de 20 ans

Petit nouveau ! | 9 Messages

27 mai 2016, 15:58

Le but c'est de pouvoir administrer chaque section de ce site, comme un CMS, après pour les images c'est vrai que c'est pas forcément utile que y'en ai une d'un coté et 2 de l'autres.
Pour l'instant je suis uniquement sur la partie texte du site, je verrai pour les images plus tard. Désolé si je ne suis pas clair, mais j'ai la tête dans le guidon du coup j'ai pas beaucoup de recul par rapport à ce que je veux exprimer ^^.

Avatar du membre
Mammouth du PHP | 1609 Messages

27 mai 2016, 16:05

Je demandais le but par rapport aux images. ;)
Tu as bien vu la proposition de solution ? tu la comprends ?
Développeur web depuis + de 20 ans

Petit nouveau ! | 9 Messages

27 mai 2016, 16:16

Y'a pas vraiment de but pour les images, c'est histoire de générer du contenu illustré différemment. Oui oui la proposition de solution c'est que pour chaque données de type=presentation, on affiche cette section. C'est ce que j'avais fait, c'est par rapport aux images que j'ai bloqué.

Avatar du membre
Mammouth du PHP | 1609 Messages

27 mai 2016, 16:19

Ok donc je te remets la proposition de solution car je ne comprends pas bien si tu l'as vu ou pas.

Il suffit par exemple de mettre un i = 0 avant la boucle, de l'incrémenter dans la boucle et d'afficher la deuxième image en fonction de la valeur de i ou d'un modulo de i dans le cas ou tu aurais plus de 2 posts et voudrais alterner entre 2 images et 1 image.

Et voilà pour son illustration :
<?php $i = 0; foreach($presentationContent as $presContent): $i++; ?>
<section class="presentation">
   
  <div class="row">
    <h1 class="titre"><?php echo $presContent['titre']; ?></h1>
    <h2 class="soustitre"><?php echo $presContent['soustitre']; ?></h2>
  </div>

  <div class="row">
    <div class="small-12 medium-3 columns">
      <img class="imgDeco" src="http://placehold.it/450x350" alt="">
    </div>

    <div class="small-12 medium-6 columns">
      <p><?php echo $presContent['contenu']; ?></p>
    </div>

    <?php if($i % 2 !== 0): ?>
    <div class="small-12 medium-3 columns">
      <img class="imgDeco" src="http://placehold.it/450x350" alt="">
    </div>
    <?php endif; ?>
  </div>

</section><!-- FIN PRESENTATION -->
<hr/>
<?php endforeach; ?>
Modifié en dernier par Saian le 27 mai 2016, 16:24, modifié 1 fois.
Développeur web depuis + de 20 ans

Petit nouveau ! | 9 Messages

27 mai 2016, 16:24

Merci effectivement ça peut être une solution. Je vais m'en tenir au simple foreach pour l'instant, on verra pour une V2. Il y aura 2 images et basta ^^. De tout manière vu comme c'est parti, ça va pas être mon dernier poste sur ce forum ^^. J'ai voulu partir sur une base MVC, mais je crois que je suis entrain de me compliquer la vie car il y a également tout ce process à assimiler