Problème d'insertion dans un while
Résolu/Fermé
arion320
Messages postés
233
Date d'inscription
lundi 20 décembre 2010
Statut
Membre
Dernière intervention
4 février 2022
-
29 mars 2018 à 02:47
arion320 Messages postés 233 Date d'inscription lundi 20 décembre 2010 Statut Membre Dernière intervention 4 février 2022 - 2 avril 2018 à 00:19
arion320 Messages postés 233 Date d'inscription lundi 20 décembre 2010 Statut Membre Dernière intervention 4 février 2022 - 2 avril 2018 à 00:19
A voir également:
- Problème d'insertion dans un while
- Insertion liste déroulante excel - Guide
- Insertion signature word - Guide
- Insertion sommaire word - Guide
- Insertion filigrane word - Guide
- Touche insertion clavier - Guide
2 réponses
Reivax962
Messages postés
3672
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
29 mars 2018 à 13:28
29 mars 2018 à 13:28
Bonjour,
Je n'ai pas tout compris à tes explications et ce que tu veux faire, ça manque de contexte.
Ceci dit, tu fais un INSERT au sein d'une boucle, donc forcément tu vas avoir autant de ligne que d'itérations de ta boucle.
Comme tu ne nous montres pas la boucle en question (mais pourquoi l'avoir masquée ??) il nous manque des infos...
L'idéal serait soit :
- de n'exécuter l'INSERT que dans la bonne occurrence de ta boucle, en vérifiant par exemple le $a['id']
- de sortir l'exécution du INSERT de ta boucle
Xavier
Je n'ai pas tout compris à tes explications et ce que tu veux faire, ça manque de contexte.
Ceci dit, tu fais un INSERT au sein d'une boucle, donc forcément tu vas avoir autant de ligne que d'itérations de ta boucle.
Comme tu ne nous montres pas la boucle en question (mais pourquoi l'avoir masquée ??) il nous manque des infos...
L'idéal serait soit :
- de n'exécuter l'INSERT que dans la bonne occurrence de ta boucle, en vérifiant par exemple le $a['id']
- de sortir l'exécution du INSERT de ta boucle
Xavier
arion320
Messages postés
233
Date d'inscription
lundi 20 décembre 2010
Statut
Membre
Dernière intervention
4 février 2022
22
29 mars 2018 à 14:14
29 mars 2018 à 14:14
Bonjour Xavier et merci pour ta réponse,
En fait, je suis obliger de mettre l'Input Text dans un While, et donc, l'INSERT.
J'ai masquer le While car il y a énormément de code, la plupart qui n'a rien à voir avec mon problème, mais si ça peut t'aider, voici :
• Sur mon post_pulication.php j'ai ceci :
Voici ce que me donne mon WHILE :
Ensuite j'ai fait un seconde While qui fonctionne parfaitement, pour afficher mes commentaires. Un While dans un While Showcomment.php, donc qui ne pose aucun problème. Cependant, le textbox est obligatoire dans un while, sinon, il ne s'afficherait pas pour toutes les publications.
Si je sort l'insert, il ne sera pas pris en compte si par exemple je le met au dessus du premier While (Dans post_publication.php)
Merci d'avance
En fait, je suis obliger de mettre l'Input Text dans un While, et donc, l'INSERT.
J'ai masquer le While car il y a énormément de code, la plupart qui n'a rien à voir avec mon problème, mais si ça peut t'aider, voici :
• Sur mon post_pulication.php j'ai ceci :
<!-- Début du while --> <?php $post = $bdd->prepare('SELECT * FROM post WHERE id_mur = :idmur ORDER BY date_post DESC'); $post->execute(array( 'idmur' => $getid, )); while ($a = $post->fetch()) { $infouser = $bdd->query('SELECT * FROM membres WHERE id = ' . $a['id_posteur']); $uinfo = $infouser->fetch(); ?> <script type="text/javascript"> $('ul.nav li.dropdown').hover(function() { $(this).find('.dropdown-menu').stop(true, true).delay(200).fadeIn(500); }, function() { $(this).find('.dropdown-menu').stop(true, true).delay(200).fadeOut(500); }); myscroll = $('#sectionposts'); myscroll.scrollTop(myscroll.get(0).scrollHeight); </script> <?php $DateToday = new DateTime(); /* Date du jour */ $DatePublished = new DateTime($a['date_post']); /* Date de la publication */ $DateSeconde = $DateToday->diff($DatePublished)->format('%s'); /* Secondes de la publication */ $DateMinute = $DateToday->diff($DatePublished)->format('%i'); /* Minutes de la publication */ $DateHour = $DateToday->diff($DatePublished)->format('%H'); /* Heure de la publication */ $DateDay = $DateToday->diff($DatePublished)->format('%d'); /* Jour de la publication */ $DateMouth = $DateToday->diff($DatePublished)->format('%n'); /* Mois de la publication */ $DateYear = $DateToday->diff($DatePublished)->format('%o'); /* Année de la publication */ if ($DateYear > 0) { /* Si l'année est supérieur à 0 */ if ($DateYear == 1) { $DateResult = 'Il y a ' . $DateYear . ' an'; /* On affiche le nombre d'anné (Au singulier) */ } elseif ($DateYear > 1) { $DateYear = 'Il y a ' . $DateYear . ' ans'; /* On affiche le nombre d'années (Au pluriel) */ } } else { /* Si l'année n'est pas supérieur à 0 */ if ($DateMouth > 0) { /* Si le mois est supérieur à 0 */ $DateResult = 'Il y a ' . $DateMouth . ' mois'; /* On affiche le nombre de mois */ } else { /* Si le mois n'est pas supérieur à 0 */ if ($DateDay > 0) { /* Si le jour est supérieur à 0*/ if ($DateDay == 1) { $DateResult = 'Il y a ' . $DateDay . ' jour'; /* On affiche le nombre de jour (Au singulier) */ }else{ $DateResult = 'Il y a ' . $DateDay . ' jours'; /* On affiche le nombre de jours (Au pluriel) */ } } else /* Si le jour n'est pas supérieur à 0 */ { if ($DateHour > 0) { /* Si l'heure est supérieur à 0 */ $DateResult = 'Il y a ' . $DateHour . ' h'; } else { /* Si l'heure n'est pas supérieur à 0 */ if ($DateMinute > 0) { if ($DateMinute == 1) { $DateResult = 'Il y a 1 minute'; } else { $DateResult = 'Il y a ' . $DateMinute . ' minute'; } }else{ if ($DateSeconde == 0) { $DateResult = 'À l\'instant'; /* On affiche "À l'instant" */ }elseif ($DateSeconde == 1) { $DateResult = 'Il y a 1 seconde'; /* On affiche le nombre de seconde (Au singulier) */ }else{ $DateResult = 'Il y a ' . $DateSeconde . ' secondes'; /* On affiche le nombre de secondes (Au pluriel) */ } } } } } } ?> <div class="formpost" style="line-height: 25px;"> <div id="post_text"> <div class="headpost"> <a href="../profile.php?id=<?php echo htmlspecialchars($a['id_posteur']); ?>"><img src="membres/avatars/<?php echo $uinfo['avatar']; ?>" class="imgpost" style="border-radius: 100%;"></a> <div> <p><a href="../profile.php?id=<?php echo $a['id_posteur']; ?>"><?php echo $uinfo['pseudo']; ?></a></p> <p class="timepost"><?php echo $DateResult ?></p> <?php if ($a['id_posteur'] == $_SESSION['id'] OR $a['id_mur'] == $_SESSION['id']) { ?> <ul class="nav navbar-nav navbar-right"> <li class="dropdown"> <a class="dropdown-toggle" data-toggle="dropdown"><b class="caret"></b></a> <ul class="dropdown-menu"> <?php if ($a['id_posteur'] == $_SESSION['id']) { ?> <li><a href="#">Modifier</a></li> <?php } ?> <?php if ($_SESSION['id'] == $a['id_posteur']) { ?> <li class="divider"></li> <?php } ?> <?php if ($_SESSION['id'] == $a['id_posteur'] OR $a['id_mur'] == $_SESSION['id']) { ?> <li><a href="elements/gest_post.php?delpostid=<?php echo $a['id']; ?>">Supprimer la publication</a></li> <?php } ?> </ul> </li> </ul> <?php } ?> </div> </div> <p class="hightcom"><?php echo $a['contenu']; ?></p> <?php if (!empty($a['picturecontent'])) { ?> <a><img src="../membres/avatars/<?php echo $a['picturecontent']; ?>" class="piccontent"></a> <?php } ?> <div class="actionpost"> <p class="action-button">J'aime</p> <p class="action-button">Répondre</p> <p class="action-button">Partager</p> </div> <div class="footpost"> <div class="commentpost" id="sectionposts"> <?php require('showcomments.php'); ?> </div> <form method="post"> <?php require('post_comment.php'); ?> </form> <iframe name="framet" style="display: none;"></iframe> </div> </div> </div> <?php }/* <- Fin du while */
Voici ce que me donne mon WHILE :
Ensuite j'ai fait un seconde While qui fonctionne parfaitement, pour afficher mes commentaires. Un While dans un While Showcomment.php, donc qui ne pose aucun problème. Cependant, le textbox est obligatoire dans un while, sinon, il ne s'afficherait pas pour toutes les publications.
Si je sort l'insert, il ne sera pas pris en compte si par exemple je le met au dessus du premier While (Dans post_publication.php)
<?php session_start(); $comment = htmlspecialchars($_POST['commentpost']); if (isset($_POST['sendmessage'])) { $insertmsg = $bdd->prepare('INSERT INTO comments (id_post, date_comment, contenu, id_posteur) VALUES (:idpost, NOW(), :contenu, :idposteur)'); $insertmsg->bindParam('idpost', $a['id']); $insertmsg->bindParam('contenu', $comment); $insertmsg->bindParam('idposteur', $_SESSION['id']); $insertmsg->execute(); } ?> <form method="post"> <div class="inputpost"> <img <?php echo 'src="membres/avatars/' . $userinfo['avatar'] . '"'?> class="imgpost" style="border-radius: 100%;"> <input type="text" name="commentpost" class="inputpost" placeholder="Écrire un commentaire..."> <input type="submit" name="sendmessage" class="sendchatsubmit" value="Envoyer<?php echo $a['id']; ?>" style="display: none;"> </form> </div>
Merci d'avance
Reivax962
Messages postés
3672
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
Modifié le 30 mars 2018 à 10:29
Modifié le 30 mars 2018 à 10:29
Bonjour,
Ce n'est pas pris en compte parce que $a['id'] n'existe pas encore.
Le mieux je pense est de rajouter un champ hidden aux formulaires, et le reprendre dans l'insertion.
Puis dans ton bloc d'insertion, que tu peux, du coup, sortir de la boucle :
Xavier
Ce n'est pas pris en compte parce que $a['id'] n'existe pas encore.
Le mieux je pense est de rajouter un champ hidden aux formulaires, et le reprendre dans l'insertion.
<input type="hidden" name="idpost" value="<?php echo $a['id']; ?>" /> <input type="text" name="commentpost" class="inputpost" placeholder="Écrire un commentaire..."> <input type="submit" name="sendmessage" class="sendchatsubmit" value="Envoyer<?php echo $a['id']; ?>" style="display: none;">
Puis dans ton bloc d'insertion, que tu peux, du coup, sortir de la boucle :
<?php session_start(); if (isset($_POST['sendmessage'])) { $comment = htmlspecialchars($_POST['commentpost']); $idpost = $_POST['idpost']; $insertmsg = $bdd->prepare('INSERT INTO comments (id_post, date_comment, contenu, id_posteur) VALUES (:idpost, NOW(), :contenu, :idposteur)'); $insertmsg->bindParam('idpost', $idpost); $insertmsg->bindParam('contenu', $comment); $insertmsg->bindParam('idposteur', $_SESSION['id']); $insertmsg->execute(); } ?>
Xavier
arion320
Messages postés
233
Date d'inscription
lundi 20 décembre 2010
Statut
Membre
Dernière intervention
4 février 2022
22
30 mars 2018 à 13:07
30 mars 2018 à 13:07
Bonjour Xavier, c'est incroyable ça fonctionne parfaitement !
Merci beaucoup de m'avoir aider, ce n'était vraiment pas évidant, la prochaine fois j'aurais la technique.
Résolu !
Merci encore :)
Merci beaucoup de m'avoir aider, ce n'était vraiment pas évidant, la prochaine fois j'aurais la technique.
Résolu !
Merci encore :)
Reivax962
Messages postés
3672
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
30 mars 2018 à 13:48
30 mars 2018 à 13:48
Note également que, si tu veux vraiment laisser ce code dans ta boucle (ce qui pourrait se comprendre dans une optique de « ranger » le code, mettre ensemble le formulaire et son traitement), tu peux le faire en rajoutant le test
C'est moins optimal car le test sera refait à chaque itération de la boucle, mais ça facilite la maintenance en gardant ensemble les éléments qui vont ensemble.
&& $_POST['idpost'] == $a['id']dans ton if().
C'est moins optimal car le test sera refait à chaque itération de la boucle, mais ça facilite la maintenance en gardant ensemble les éléments qui vont ensemble.
arion320
Messages postés
233
Date d'inscription
lundi 20 décembre 2010
Statut
Membre
Dernière intervention
4 février 2022
22
2 avril 2018 à 00:19
2 avril 2018 à 00:19
Merci pour ton conseil Xavier, j'ai utiliser la méthode la plus simple, pour ce qui est du rangement je penses que c'est déjà trop tard. haha
Maintenant il me reste plus qu'à envoyer les formulaires sans rafraîchissement complet de la page, ce qui va être, je penses, bien galère car c'est du Jquery.
Merci encore pour tes réponses et tes explications. Bon courage pour la suite. :)
Maintenant il me reste plus qu'à envoyer les formulaires sans rafraîchissement complet de la page, ce qui va être, je penses, bien galère car c'est du Jquery.
Merci encore pour tes réponses et tes explications. Bon courage pour la suite. :)