Page 1 sur 1

Group date, l'afficher 1 seule fois par groupe msg

Posté : 31 août 2021, 13:01
par Sinistrus
Bonjour à tous,

Je patauge sur ce bout de code afin d'afficher la date ($msg) une seule fois par groupe de message de la même date dans une discussion.

Un peux comme affiche Whatsapp, la date du jour puis les échanges du même jour, puis la date du second jour et les échange de ce même second jour.

Pouvez-vous m'aider à corriger mon erreur svp ?
<?php
    try{$stat = $pdo->query("SELECT date, auteur, texte FROM tab_texte GROUP BY date, auteur, texte ORDER BY date"); while($d = $stat->fetch(PDO::FETCH_GROUP)){
        $date_e = strftime(DATE_SQL, strtotime($d["date"]));
         
        if($d["auteur"] == "John") {$float = "float-end"; $color = "background-color:#c6dfb2";} else {$float = "float-start"; $color = null;}
        if(strpos($d["texte"], "<Médias omis>") !== false){$texte = "<i class='fal fa-file-times fa-2x'></i> <Médias omis> ".$d["texte"];} else{$texte = nl2br($d["texte"]);}
 
        if($date_e == $date_e) {
            $msg = '<div class="alert-primary border pt-1 pb-1 ps-2 pe-2 mb-2 small mx-auto text-center" style="width:100px">'.strftime("%d/%m/%Y", strtotime($date_e)).'</div>';
        }
 
    //}}catch(PDOException $e){echo "<div class='alert alert-danger'>".$e->getMessage()."</div>";}
?>
 
<?php echo $msg; ?>
 
<?php
    //try{$stat = $pdo->query("SELECT date, auteur, texte FROM tab_texte GROUP BY date, auteur, texte ORDER BY date"); while($d = $stat->fetch(PDO::FETCH_GROUP)){       
?>
 
 
<div class="clearfix w-100 mb-3 small">
<div class="card <?php echo $float; ?>" style="<?php echo $color; ?>; max-width:70%; min-width:100px;">
<div class="card-body p-1">
<div class="pe-5"><?php echo $texte; ?></div>
<div class="small text-end text-muted"><?php echo strftime("%H:%M", strtotime($d["date"])); ?> <i class="fal fa-check-double"></i></div>
</div>
</div>
</div>
 
<?php }}catch(PDOException $e){echo "<div class='alert alert-danger'>".$e->getMessage()."</div>";} ?>
Voici ma table
CREATE TABLE `tab_texte`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `date` datetime NULL DEFAULT NULL,
  `auteur` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `texte` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = MyISAM AUTO_INCREMENT = 8 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
 
 
INSERT INTO `tab_texte` VALUES (1, '2020-11-30 14:03:00', 'Snow', 'Salut');
INSERT INTO `tab_texte` VALUES (2, '2020-11-30 14:19:00', 'John', 'Toute va bien ?');
INSERT INTO `tab_texte` VALUES (3, '2020-11-30 14:19:00', 'Snow', 'Oui merci et toi ?');
INSERT INTO `tab_texte` VALUES (4, '2020-12-01 09:03:00', 'John', 'Ca va, tout va bien merci !');
INSERT INTO `tab_texte` VALUES (5, '2020-12-01 09:05:00', 'Snow', 'Concernant le projet en cours, où tu en es ?');
INSERT INTO `tab_texte` VALUES (6, '2020-12-01 09:06:00', 'John', 'Il avance peux à peux...');
INSERT INTO `tab_texte` VALUES (7, '2020-12-01 09:07:00', 'Snow', 'Je reste en attente.');
Merci de votre aide

Re: Group date, l'afficher 1 seule fois par groupe msg

Posté : 31 août 2021, 20:48
par or 1
$datetemp = "";
while(...){
 $date = ...;
 if($datetemp == $date){
  $datetemp = $date;
  // faire quelque chose
 }

}

Re: Group date, l'afficher 1 seule fois par groupe msg

Posté : 31 août 2021, 23:42
par Sinistrus
Merci de ton aide, ça fonctionne avec le != au lieu de ==

Re: Group date, l'afficher 1 seule fois par groupe msg

Posté : 31 août 2021, 23:56
par or 1
if($datetemp != $date){
ça sera mieux ainsi.