[RESOLU] Boucle for

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Boucle for

Re: [RESOLU] Boucle for

par dooki » 28 févr. 2020, 16:15

Et je viens de trouver pourquoi il afficher la liste des medecins quand même !!

Code : Tout sélectionner

{% for medecin in medecins %} <table> <tr> {% if medecin.departement.num == departement %} {% else %} <td> {{ medecin.nom }} -- {{ medecin.prenom }} -- {{ medecin.adresse }} [ {{ medecin.departement.num }} ] </td> {% endif %} </tr> </table> {% endfor %} {% for med in medSearch %} <table> {{ med.nom }} {{ med.prenom }} -- {{ med.adresse }} </table> {% endfor %}
(dsl pour le code pas trés bien indenté )


Enfaite comme il y a deux boucles for, quand il voit que aucun medecin ne correspond au département, il lance l'autre boucle ce qui affiche des medecins quand meme !!

Re: [RESOLU] Boucle for

par dooki » 28 févr. 2020, 16:13

tu parles d'ici ?

Code : Tout sélectionner

if (!isset($medecins) ) $medecins = $this->getDoctrine()->getRepository(Medecin::class) ->findBy([ 'departement' => $numero ]);
Comment faire pour le passer en paramètre ?

Et d'ailleurs je me suis trompé, j'ai effectué le where sur la fonction recherche .. qui n'a rien à voir avec l'affichage des medecins par départements ^^

Re: [RESOLU] Boucle for

par Saian » 28 févr. 2020, 16:04

Au fait car je me souviens qu'on en a discuté il y a quelques jours. Je n'étais pas sûr à ce moment la mais j'ai vérifié depuis. Pour tes requêtes avec doctrine, même si la colonne département est en many to one, tu peux tout de même passer l'id du département en paramètre quand tu fais un findBy. Tu n'es pas obligé de sélectionner d'abord le département ou d'utiliser createQueryBuilder du moment que tu connais l'id.

Et il ne faut pas confondre id du département avec le numéro du département. L'id peut être différente du numéro. Alors après la manière dont tu écris la requête dépend de la manière dont tu as construit ta base de données.

Re: Boucle for

par dooki » 28 févr. 2020, 15:56

D'acc, merci encore je vais la retravailler !

Bonne journée à toi, et merci des conseils (ainsi qu'aux autres débutants en PHP sur les autres posts :) )

Re: Boucle for

par Saian » 28 févr. 2020, 15:54

Y a un problème avec ta requête. Si tu fais un WHERE departement = 7 et qu'aucune ligne n'a de département = 7 alors ça ne doit retourner aucune ligne.

Re: Boucle for

par dooki » 28 févr. 2020, 15:53

C'est ce que j'ai fait justement !!
La liste me renvoie bien les medecins ou departement = 4 mais
lorsque le departement = 7 il me renvoie la totalité des médecins au lieu de rien me renvoyer
car aucun medecin n'a comme departement 7

Re: Boucle for

par Saian » 28 févr. 2020, 15:50

Ce qu'il faut faire c'est filtrer la liste en amont, faire une requête WHERE departement = '4'.

Ainsi tu fais la boucle sans if puisque tu n'as que les médecins qui correspondent. Si le tableau est vide ça passe directement dessous ou tu peux simplement tester la longueur du tableau pour savoir si tu affiches un message ou pas. Il me semble même que twig permet de faire un else.
https://twig.symfony.com/doc/2.x/tags/f ... lse-clause

Re: Boucle for

par dooki » 28 févr. 2020, 15:41

Et bien en fait les médecins sont affichés en fonction de leur départements, c'est à dire lorsque le département sélectionné est 4 , seul les médecins du dep 4 sont affiché grace à un select where.
Malheuresement lorsque aucun médecin ne correspond au département la liste est quand même affiché ( tout les medecins )
d'ou ma tentative avec le {% if med.departement.num == departement %}

Je voulais mettre que si le num du medecin = num du departement alors afficher le Message ='Aucun resultat pour ce departement' Une seule fois !

Mais aprés réflexion, il est peut etre mieux de faire cette vérification , non pas dans la vue mais plus dans le controleur ?

ps : Merci encore pour ta réponse détaillée

Re: Boucle for

par Saian » 27 févr. 2020, 13:14

Salut, c'est quoi ce message, il dit quoi ? est-il vraiment indispensable ?

EDIT je demande parce que le message me semble assez déterminant pour savoir comment faire.

A priori si je voulais une liste de médecins filtrés par département bah je ferais en sorte que medSearch ne contienne que les médecins du département (un select avec un where et du coup pas de if dans le for).
Et si je voulais faire une alerte unique pour dire que certains médecins ne font pas parti de ce département, ben je ferais une autre requête pour compter ces médecins et si le compte est supérieur à 0 j'afficherais le message.

Après pour répondre à la question basiquement sans réfléchir au pourquoi, c'est pas très compliqué. Tu crées une variable showMessage à false avant la boucle, dans la boucle si ça passe dans le else tu passes showMessage à true et après la boucle si showMessage est true tu affiches le message.

Code : Tout sélectionner

{% set showMessage = false %} {% for med in medSearch %} {% if med.departement.num == departement %} {{ med.nom }} {{ med.prenom }} -- {{ med.adresse }} {% else %} {% set showMessage = true %} {% endif %} {% endfor %} {{ showMessage ? message }}

Après je trouve pas ça très joli, si y a 50 médecins dans la liste qui ne sont pas du département, tu mets 50 fois showMessage à true... et du coup ça me fait penser à ça, un elseif au lieu d'un else :

Code : Tout sélectionner

{% set showMessage = false %} {% for med in medSearch %} {% if med.departement.num == departement %} {{ med.nom }} {{ med.prenom }} -- {{ med.adresse }} {% elseif not showMessage %} {% set showMessage = true %} {% endif %} {% endfor %} {{ showMessage ? message }}
Ça change pas grand chose mais au moins ça ne re-set pas la variable à true 50 fois (mais ça teste sa valeur 50 fois ^^).

PS : et par pitié essayez de bien indenter votre code ^^ c'est pas pour faire jolie qu'on indente, c'est pour que le code soit lisible. Y a même des langages genre python ou si t'indentes pas bien ça compile pas ou si ça compile par miracle ça fait pas du tout ce que tu voulais.

Boucle for

par dooki » 27 févr. 2020, 12:21

bonjour, j'utilise une boucle for dans mon fichier twig
elle me permet d'afficher une liste de nom prenom et adresse de med avec un if dedans
le if permet de vérifier si le num du med = departement alors afficher boucle for
Ensuite le else qui contient le message

Malheuresement mon message s'affiche pleins de fois car il est dans la boucle for, comment faire pour n'afficher le message qu'une fois ???

Code : Tout sélectionner

{% for med in medSearch %} {% if med.departement.num == departement %} {{ med.nom }} {{ med.prenom }} -- {{ med.adresse }} {% else %} {{message}} {% endif %} {% endfor %}