Rafraichissement de div
Fermé
Sinistrus
Messages postés
1010
Date d'inscription
mercredi 12 décembre 2007
Statut
Membre
Dernière intervention
6 juin 2023
-
Modifié le 19 mai 2022 à 18:43
Sinistrus Messages postés 1010 Date d'inscription mercredi 12 décembre 2007 Statut Membre Dernière intervention 6 juin 2023 - 20 mai 2022 à 11:23
Sinistrus Messages postés 1010 Date d'inscription mercredi 12 décembre 2007 Statut Membre Dernière intervention 6 juin 2023 - 20 mai 2022 à 11:23
A voir également:
- Rafraichissement de div
- Div c++ - Télécharger - Langages
- Impossible de changer la fréquence de rafraîchissement - Forum Ecran
- Enlever #div/0 dans tableau croisé dynamique ✓ - Forum Excel
- Remplacer #div/0 par vide - Forum Excel
- #Div/0 excel moyenne - Guide
4 réponses
jordane45
Messages postés
38397
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
29 janvier 2025
4 732
19 mai 2022 à 19:07
19 mai 2022 à 19:07
Bonjour,
J'ai l'impression que ton code se trouve dans une boucle ... et ... ben.. faut pas !
Peux tu nous montrer le code complet de ta page ... ainsi que le code généré de celle-ci ?
J'ai l'impression que ton code se trouve dans une boucle ... et ... ben.. faut pas !
Peux tu nous montrer le code complet de ta page ... ainsi que le code généré de celle-ci ?
Sinistrus
Messages postés
1010
Date d'inscription
mercredi 12 décembre 2007
Statut
Membre
Dernière intervention
6 juin 2023
17
20 mai 2022 à 01:20
20 mai 2022 à 01:20
Bonjour Jordane,
Merci de l'intérêt que tu porte à mon poste.
index.php
_promo.php
Console sous firefox :
https://ibb.co/tCCsNGm
Merci de l'intérêt que tu porte à mon poste.
index.php
<?php $nbr_prod = null; $g_total = null; $g_livraison = null; try { $stat = $pdo->query( " SELECT S.id ,S.nic_handle ,S.reference ,S.quantite ,P.image_1 ,P.categorie ,P.souscategorie ,P.reference ,P.libelle ,P.description ,P.montant ,P.taux_reduction ,P.fin_promo ,P.montant_livraison ,P.statut ,P.short_link ,P.hits ,P.aime ,P.stock ,P.achete ,P.style ,P.plateau ,P.materiaux ,P.bordures ,P.type_pieds ,P.materiaux_pieds ,P.longueur ,P.largeur ,P.hauteur ,P.epaisseur ,P.poids ,P.nombre_places ,P.assemblage ,P.modele_unique ,P.eclairage ,P.cable ,P.prise ,P.fait_main ,P.couleurs FROM tab_shop_produits S LEFT JOIN tab_produits P ON P.reference = S.reference WHERE S.nic_handle = '".$_SESSION_HANDLE."' ORDER BY S.id"); $i = 0; while ($data = $stat->fetch( PDO::FETCH_ASSOC)) { $id = $data["id"]; $reference = $data["reference"]; $libelle = $data["libelle"]; $stock = $data["stock"]; $poids = $data["poids"]; $quantite = $data["quantite"]; $short_link = $data["short_link"]; if($data["eclairage"] == 0) {$eclairage = "Non";} else {$eclairage = $data["eclairage"]." Watt";} ?> <div class="card mb-2"> <div class="card-header p-2"> <div class="row"> <div class="col-md-2"> <img class="img-fluid mb-2" src="/ew-content/images/produits/<?php echo $reference; ?>/<?php echo $reference; ?>-1.png"> <div class="text-center"><a class="btn btn-sm text-danger" href="#"><i class="fal fa-trash"></i></a></div> </div> <div class="col-md-10"> <div class="mb-2"> <a class="text-dark text-decoration-none" href="/<?php echo $short_link; ?>" target="_blank"><?php echo $libelle; ?></a> </div> <?php include("_descriptions.php"); ?> <?php $nbr_prod = $pdo->query("SELECT COUNT(reference) FROM tab_shop_produits WHERE nic_handle = '".$_SESSION_HANDLE."' ")->fetchColumn(); $montant = $data["montant"]; $taux = $data["taux_reduction"]; $reduction = $montant * (1 - $taux / 100); $livraison = $data["montant_livraison"]; $total = $montant + $livraison; $g_total += $montant; $g_livraison += $livraison; $stock = $data["stock"]; $economi = $montant - $reduction; if($livraison == 0) {$livraison = "<span class='text-success mb-2'>GRATUIT</span>";} else {$livraison = number_format($livraison,0,',',' ')." FCFA";} if($g_livraison == 0) {$n_livraison = "<span class='text-success mb-2'>GRATUIT</span>";} else {$n_livraison = number_format($g_livraison,0,',',' ')." FCFA";} ?> <div id="promo_<?php echo $i; ?>"></div> <input type="hidden-" id="txt_reference_<?php echo $i; ?>" value="<?php echo $reference; ?>"> <div class="clearfix"> </div> <div class="fw-bold mb-0 text-end small"><?php echo number_format($montant,0,',',' '); ?> FCFA</div> <div class="mb-0 text-end small"><?php echo $livraison; ?></div> <div class="mb-0 text-end small"><?php echo number_format($total,0,',',' '); ?> FCFA</div> </div> </div> </div> </div> <script> function loadLog(i) { var reference = document.getElementById("txt_reference_" + i).value; $.ajax({ type: "POST", url: "_promo.php", cache: false, data: {reference: reference}, error: function (e) {console.log('Ajax Error', e);alert('Erreur Ajax');}, success: function(html){ $("#promo_" + i).html(html); setTimeout(loadLog(parseInt($("#promo_" + i).html(html))+1), 1000); } }); } setTimeout(loadLog('<?php echo $i; ?>'), 1000); </script> <?php $i++;}} catch(PDOException $e){echo "<div class='alert alert-danger'>".$e->getMessage()."</div>";} ?>
_promo.php
<?php require_once($_SERVER['DOCUMENT_ROOT']."/includes/config.php"); if(isset($_POST["reference"])) { $stat = $pdo->query( "SELECT fin_promo FROM tab_produits WHERE reference = '".$_POST["reference"]."' "); while ($pro = $stat->fetch( PDO::FETCH_ASSOC)) { $fin_promo = $pro["fin_promo"]; if(!empty($fin_promo) AND $fin_promo > date("Y-m-d H:i:s")){ $date1 = strtotime("now"); $date2 = strtotime($fin_promo); $diff = abs($date2 - $date1); $years = floor($diff / (365*60*60*24)); $months = floor(($diff - $years * 365*60*60*24) / (30*60*60*24)); $days = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24)/ (60*60*24)); $hours = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24 - $days*60*60*24) / (60*60)); $minutes = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24 - $days*60*60*24 - $hours*60*60)/ 60); $seconds = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24 - $days*60*60*24 - $hours*60*60 - $minutes*60)); if($months == 0) {$mois = null;} if($months >= 1) {$mois = $mois." mois, ";} if($days == 0) {$jour = null;} if($days == 1) {$jour = $days." jour, ";} if($days >= 2) {$jour = $days." jours, ";} if($hours == 0) {$heure = null;} if($hours == 1) {$heure = $hours." heure, ";} if($hours >= 2) {$heure = $hours." heures, ";} if($minutes == 0) {$minute = null;} if($minutes == 1) {$minute = $minutes." minute";} if($minutes >= 2) {$minute = $minutes." minutes";} if($seconds == 0) {$seconde = null;} if($seconds == 1) {$seconde = " et ".$seconds." seconde";} if($seconds >= 2) {$seconde = " et ".$seconds." secondes";} $promo = "<div id='promo' class='mb-2 text-end small text-success blink_'>La promo se termine dans ".$mois.$jour.$heure.$minute.$seconde."</div>"; } else { $promo = null; } } echo $promo; }
Console sous firefox :
https://ibb.co/tCCsNGm
jordane45
Messages postés
38397
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
29 janvier 2025
4 732
20 mai 2022 à 10:20
20 mai 2022 à 10:20
...
Le principe d'une fonction .. c'est qu'on a besoin de l'écrire qu'une seule fois... et ensuite on peut y faire appel lorsqu'on en a besoin..
Là... comme je le craignais ... tu as mis autant de fois ta fonction qu'il y a de produits ... puisque tu l'as mis dans la boucle.
De plus.. ton code gagnerait grandement en lisibilité si tu le découpais un peu plus en "fonctions" ( y compris dans le php..)
Par exemple,
Ton code pourrait ressembler à un truc du genre
Dans ton fichier de connexion à ta bdd ( je suppose, config.php )
Tu pourrais ajouter ces fonctions
Et ensuite, dans ton fichier index :
NB: Par contre, je ne sais pas d'où tu sors ta variable $_SESSION_HANDLE ... à toi de remettre le début de ton script que tu ne nous a pas montré.
NB² : Les fonctions php, getProducts, getNbProducts .. sont à mettre AVANT le HTML de préférence .... pas en plein milieu du code.
Le principe d'une fonction .. c'est qu'on a besoin de l'écrire qu'une seule fois... et ensuite on peut y faire appel lorsqu'on en a besoin..
Là... comme je le craignais ... tu as mis autant de fois ta fonction qu'il y a de produits ... puisque tu l'as mis dans la boucle.
De plus.. ton code gagnerait grandement en lisibilité si tu le découpais un peu plus en "fonctions" ( y compris dans le php..)
Par exemple,
Ton code pourrait ressembler à un truc du genre
Dans ton fichier de connexion à ta bdd ( je suppose, config.php )
Tu pourrais ajouter ces fonctions
/* * ---------------------------------------------------------- * FONCTIONS UTILES POUR MANIPULER LA BDD * ----------------------------------------------------------- */ //Fonction permettant d'exécuter des requêtes préparées function dbQuery($sql, $datas) { global $pdo; try { $prep = $pdo->prepare($sql); return $prep->execute($datas); } catch (PDOException $e) { echo "Erreur : " . $e->getMessage(); } } //permet de faire une requête SELECT et de retourner le premier jeu de résultat function db_One($sql, $datas = NULL) { $res = dbQuery($sql, $datas); return $res->fetch(); } //permet de faire une requête SELECT et de retourner tous les résultats function db_All($sql, $datas = NULL) { $res = dbQuery($sql, $datas); return $res->fetchAll(); } //Permet de faire une requête INSERT et de retourner l'id créé (si il est en auto-incrément bien entendu..) function db_Insert($sql, $datas = NULL) { global $pdo; $res = dbQuery($sql, $datas); return $pdo->lastInsertId(); //https://www.php.net/manual/fr/pdo.lastinsertid.php }
Et ensuite, dans ton fichier index :
<?php //affichage des erreurs PHP dans la page pour être sûr de ne rien laisser trainer... error_reporting(E_ALL); ini_set('display_errors', true); ini_set('display_startup_errors', true); //connexion à la BDD require_once($_SERVER['DOCUMENT_ROOT']."/includes/config.php"); $nbr_prod = null; $g_total = null; $g_livraison = null; function getProducts($_SESSION_HANDLE) { $sql = "SELECT S.id ,S.nic_handle ,S.reference ,S.quantite ,P.image_1 ,P.categorie ,P.souscategorie ,P.reference ,P.libelle ,P.description ,P.montant ,P.taux_reduction ,P.fin_promo ,P.montant_livraison ,P.statut ,P.short_link ,P.hits ,P.aime ,P.stock ,P.achete ,P.style ,P.plateau ,P.materiaux ,P.bordures ,P.type_pieds ,P.materiaux_pieds ,P.longueur ,P.largeur ,P.hauteur ,P.epaisseur ,P.poids ,P.nombre_places ,P.assemblage ,P.modele_unique ,P.eclairage ,P.cable ,P.prise ,P.fait_main ,P.couleurs FROM tab_shop_produits S LEFT JOIN tab_produits P ON P.reference = S.reference WHERE S.nic_handle = :nic_handle ORDER BY S.id "; $datas = [':nic_handle'=>$_SESSION_HANDLE]; return db_All($sql, $datas); //retourne le resultat sous la forme d'un array } /** * Retourne le nombre de produits */ function getNbProducts($_SESSION_HANDLE){ $sql = "SELECT COUNT(reference) AS NB FROM tab_shop_produits WHERE nic_handle = :nic_handle "; $datas = [':nic_handle'=>$_SESSION_HANDLE]; $res = db_One($sql, $datas); //retourne le resultat sous la forme d'un array return !empty($re['NB']) ? $re['NB'] : 0; } $stat = getProducts($_SESSION_HANDLE); $nbr_prod = getNbProducts($_SESSION_HANDLE); foreach($stat as $data) { $id = $data["id"]; $reference = $data["reference"]; $libelle = $data["libelle"]; $stock = $data["stock"]; $poids = $data["poids"]; $quantite = $data["quantite"]; $short_link = $data["short_link"]; $eclairage =$data["eclairage"] == 0 ? "Non" : $data["eclairage"] . " Watt"; ?> <div class="card mb-2"> <div class="card-header p-2"> <div class="row"> <div class="col-md-2"> <img class="img-fluid mb-2" src="/ew-content/images/produits/<?php echo $reference; ?>/<?php echo $reference; ?>-1.png"> <div class="text-center"><a class="btn btn-sm text-danger" href="#"><i class="fal fa-trash"></i></a></div> </div> <div class="col-md-10"> <div class="mb-2"> <a class="text-dark text-decoration-none" href="/<?php echo $short_link; ?>" target="_blank"><?php echo $libelle; ?></a> </div> <?php include("_descriptions.php"); ?> <?php $montant = $data["montant"]; $taux = $data["taux_reduction"]; $reduction = $montant * (1 - $taux / 100); $livraison = $data["montant_livraison"]; $total = $montant + $livraison; $g_total += $montant; $g_livraison += $livraison; $stock = $data["stock"]; $economi = $montant - $reduction; if ($livraison == 0) { $livraison = "<span class='text-success mb-2'>GRATUIT</span>"; } else { $livraison = number_format($livraison, 0, ',', ' ') . " FCFA"; } if ($g_livraison == 0) { $n_livraison = "<span class='text-success mb-2'>GRATUIT</span>"; } else { $n_livraison = number_format($g_livraison, 0, ',', ' ') . " FCFA"; } ?> <div id="promo_<?php echo $id; ?>" class="js-promos" data-id="<?php echo $id ;?>" ></div> <input type="hidden" id="txt_reference_<?php echo $id; ?>" value="<?php echo $reference; ?>"> <div class="clearfix"> </div> <div class="fw-bold mb-0 text-end small"><?php echo number_format($montant, 0, ',', ' '); ?> FCFA</div> <div class="mb-0 text-end small"><?php echo $livraison; ?></div> <div class="mb-0 text-end small"><?php echo number_format($total, 0, ',', ' '); ?> FCFA</div> </div> </div> </div> </div> <?php } // fin du foreach ?> <!-- SCRIPT EN DEHORS DE LA BOUCLE !! --> <script> function loadLog(id) { var reference = document.getElementById("txt_reference_" + id).value; $.ajax({ type: "POST", url: "_promo.php", cache: false, data: {reference: reference}, error: function (e) { console.log('Ajax Error', e); alert('Erreur Ajax'); }, success: function (html) { $("#promo_" + i).html(html); setTimeout(loadLog(parseInt($("#promo_" + id).html(html)) + 1), 1000); } }); } //on déclenche pour chaque élément ayant la class js-promos $(".js-promos").each(function(i,el){ let id = $(this).data('id'); setTimeout(loadLog(id), 1000); }); </script>
NB: Par contre, je ne sais pas d'où tu sors ta variable $_SESSION_HANDLE ... à toi de remettre le début de ton script que tu ne nous a pas montré.
NB² : Les fonctions php, getProducts, getNbProducts .. sont à mettre AVANT le HTML de préférence .... pas en plein milieu du code.
Sinistrus
Messages postés
1010
Date d'inscription
mercredi 12 décembre 2007
Statut
Membre
Dernière intervention
6 juin 2023
17
20 mai 2022 à 11:23
20 mai 2022 à 11:23
$_SESSION_HANDLE est l'identifiant de l'utilisateur "connecté" : JA90710 par exemple.
Cette valeur est sauvegardé aussi dans la session pour permettre à mes requête
Je met en place ton code et je te reviens.
Ce bout de code existe déjà dans mon fichier config.php (après la connexion à la DB)
Je n'ai jamais utilisé les fonctions que tu m'as donné. C'est une première, je vais étudier ça.
Je te reviens sous peux
Cette valeur est sauvegardé aussi dans la session pour permettre à mes requête
WHERE nic_handle = '".$_SESSION_HANDLE.'"de dire
WHERE utilisateur = '".$mon_pseudo.'".
Je met en place ton code et je te reviens.
Ce bout de code existe déjà dans mon fichier config.php (après la connexion à la DB)
try { $pdo= new PDO('mysql:host='.MYSQL_HOST.';port='.MYSQL_PORT.';dbname='.MYSQL_BASE, MYSQL_USER, MYSQL_PASS); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $pdo->exec("SET CHARACTER SET utf8"); } catch(PDOException $e){echo "<div class='alert alert-warning'>".$e->getMessage()."</div>"; die();} error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE);
Je n'ai jamais utilisé les fonctions que tu m'as donné. C'est une première, je vais étudier ça.
Je te reviens sous peux
19 mai 2022 à 19:07