Aide html.twig [Résolu]

Messages postés
38
Date d'inscription
mercredi 24 juillet 2019
Statut
Membre
Dernière intervention
21 août 2019
-
Bonjour,
Je cherche à supprimer des comptes en cliquant sur un bouton qui est lié au compte en question.
Hors, lorsque je clique sur un compte cela concerne toujours le 1er compte de la liste et j'ai beau cherché d'où peut venir le problème je ne trouve pas car il n'y a que pour la colonne "supprimer" qui a ce problème.
En effet, je récupère les données du tableau avec une boucle for en TWIG.
Le reste marche très bien mis à part la fonctionnalité supprimer mais ce n'est pas un problème lié à du HTML (je crois).
Voilà le code :
<table id="customers" style="margin-top:40px;width:95% !important;margin-left:auto;margin-right:auto;">

  <!-- 1ere ligne du tableau -->
  <tr>
   <th>Nom</th>
   <th>Prenom</th>
   <th>Adresse email</th>
   <th>Statut</th>
   <th>Identification</th>
   <th>Modifier</th>
   <th>Supprimer</th>
  </tr>
  {% for t_authentification in pagination %}
  <tr>
   <td>{{ t_authentification.nom }}</td>
   <td>{{ t_authentification.prenom }}</td>
   <td>{{ t_authentification.email }}</td>
   <td>{{ t_authentification.statut }}</td>        
   <td>Cerbère</td>
   <td><a href="{{ path('compte_nb', {'id' : t_authentification.id}) }}"><img src="{{ asset('img/edit.png') }}" title="Modifier"></a></td>
   <td><a class="btn btn-danger" href="#confirm/id={{t_authentification.id}}" onclick="DeleteAccount();"><img src="{{ asset('img/del.png') }}" title="Supprimer"></a>
    <div id="confirm" hidden style="margin-left:7px;margin-top:5px">
            <h6 style="margin-left:15px;margin-bottom:15px">Voulez-vous supprimer {{ (t_authentification.nom) }} {{ (t_authentification.prenom) }} ?</h6>
            <div class="row"> 
                {{ form_start(formSupp) }}    
              <button type="submit" class="btn btn-secondary" style="margin-left:15px;margin-bottom:15px"><i class="fas fa-check-circle"></i>Supprimer</button>
                {{ form_end(formSupp) }}
             <button class="btn btn-secondary" onclick="AbortDelete();" style="margin-left:15px;margin-bottom:15px"><i class="fas fa-times-circle"></i> Annuler</button>
         </div>
    </div>
  </tr>
  {% endfor %}
</table><


EDIT : Correction des balises de code pour y ajouter la coloration syntaxique.
Explications disponibles ici : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code


Sauriez-vous m'aider ? svp
Afficher la suite 

9 réponses

Messages postés
26548
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
20 octobre 2019
1838
0
Merci
Bonjour,

La suppression.. visiblement... se gère dans la fonction javascript
onclick="DeleteAccount();">

Donc.. sans voir le code concerné... impossible de te répondre.

NB: Pour poster ton code, merci de le faire en utilisant les BALISES DE CODE ... ET en indiquant le langage afin d'avoir la coloration syntaxique.

NB² : Merci de ne pas ouvrir 50 fois la même discussion en doublon sur le forum.

Commenter la réponse de jordane45
Messages postés
38
Date d'inscription
mercredi 24 juillet 2019
Statut
Membre
Dernière intervention
21 août 2019
0
Merci
Bonjour,
Merci de votre réponse.
Désolé c'est la première que j'utilise ce forum donc c'est pour ca que j'ai poste plusieurs fois le même problème.
Mais en fait, la suppression n'est pas le souci le + important c'est surtout que pour chaque compte il y a une colonne où il y a une icône donc lorsque je clique sur cette icône pour un compte c'est sensé exécuter la division "confirm" pour le compte où j'ai cliqué. Hors, lorsque lorsque je clique sur l'icône de n'importe quelle compte, cela exécute la division "confirm" que pour le 1er compte.
Et la fonction DeleteAccount, c'est :
DeleteAccount () {
Document.getElementById('confirm').hidden=false
}
jordane45
Messages postés
26548
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
20 octobre 2019
1838 -
<block>
cela exécute la division "confirm"
</>
Ca n'execute rien... ça affiche
Pas une division...mais une div

Ensuite... un ID doit être UNIQUE (id = identifiant...)
Donc là...ton code prend le premier élément de la page ayant l'id "confirm" ...
Commenter la réponse de dev_82
Messages postés
38
Date d'inscription
mercredi 24 juillet 2019
Statut
Membre
Dernière intervention
21 août 2019
0
Merci
D'accord mais pourquoi le "id = {{t_authentification.id}} me renvoie à chaque fois le bon id du compte choisi et comment cela se fait qu'il me renvoie le 1er élément de la page ayant l'id confirm puisque je l'ai mis dans une boucle for en twig qui marche pour les autres colonnes ?
Merci
jordane45
Messages postés
26548
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
20 octobre 2019
1838 -
Par ce tu dois mettre un identifiant unique à ta div de confirmation ou sinon...envoyer l'id à traiter en paramètre de ta fonction js...
dev_82
Messages postés
38
Date d'inscription
mercredi 24 juillet 2019
Statut
Membre
Dernière intervention
21 août 2019
-
C'est déjà fait :
<script>
function DeleteAccount()
{
document.getElementById('confirm').hidden = false;
}
function AbortDelete()
{
document.getElementById('confirm').hidden = true;
}
</script>
Commenter la réponse de dev_82
Messages postés
26548
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
20 octobre 2019
1838
0
Merci
{% for t_authentification in pagination %}
  <tr>
   <td>{{ t_authentification.nom }}</td>
   <td>{{ t_authentification.prenom }}</td>
   <td>{{ t_authentification.email }}</td>
   <td>{{ t_authentification.statut }}</td>        
   <td>Cerbère</td>
   <td><a href="{{ path('compte_nb', {'id' : t_authentification.id}) }}"><img src="{{ asset('img/edit.png') }}" title="Modifier"></a></td>
   <td>
      <a class="btn btn-danger" href="#confirm/id={{t_authentification.id}}" onclick="DeleteAccount('{{t_authentification.id}}');">
      <img src="{{ asset('img/del.png') }}" title="Supprimer"></a>
      <div id="confirm_{{t_authentification.id}}" hidden style="margin-left:7px;margin-top:5px">
              <h6 style="margin-left:15px;margin-bottom:15px">Voulez-vous supprimer {{ (t_authentification.nom) }} {{ (t_authentification.prenom) }} ?</h6>
              <div class="row"> 
                {{ form_start(formSupp) }}    
                <button type="submit" class="btn btn-secondary" style="margin-left:15px;margin-bottom:15px">
                  <i class="fas fa-check-circle"></i>
                  Supprimer
                </button>
                  {{ form_end(formSupp) }}
               <button class="btn btn-secondary" onclick="AbortDelete('{{t_authentification.id}}');" style="margin-left:15px;margin-bottom:15px">
                 <i class="fas fa-times-circle"></i> 
                 Annuler
               </button>
           </div>
      </div>
    </td>
  </tr>
  {% endfor %}
  
  


et côté JS
  <script> 
    function DeleteAccount(id) 
    { 
    document.getElementById('confirm_'+id).hidden = false; 
    } 
    function AbortDelete(id) 
    { 
    document.getElementById('confirm_'+id).hidden = true; 
    } 
    </script>
  
  


Cordialement,
Jordane
Commenter la réponse de jordane45
Messages postés
38
Date d'inscription
mercredi 24 juillet 2019
Statut
Membre
Dernière intervention
21 août 2019
0
Merci
Bonjour,
Merci beaucoup pour votre réponse car je viens d'essayer et ça marche !!!
Dernière question : lorsque j'appuie sur "supprimer" cela veut pas supprimer.
Hors du côté PHP, j'ai fais le nécessaire donc je me demande d'où vient le problème.
Merci de votre réponse encore une fois.
jordane45
Messages postés
26548
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
20 octobre 2019
1838 -
Tu as oublié de mettre des <form..>
Donc ton submit be sert à rien pour l'instant
dev_82
Messages postés
38
Date d'inscription
mercredi 24 juillet 2019
Statut
Membre
Dernière intervention
21 août 2019
> jordane45
Messages postés
26548
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
20 octobre 2019
-
Le TWIG sert à cela ici non ?
<div class="row"> 
                {{ form_start(formSupp) }}    
              <button type="submit" class="btn btn-secondary" style="margin-left:15px;margin-bottom:15px"><i class="fas fa-check-circle"></i>Supprimer</button>
                {{ form_end(formSupp) }}
             <button class="btn btn-secondary" onclick="AbortDelete('{{t_authentification.id}}');" style="margin-left:15px;margin-bottom:15px"><i class="fas fa-times-circle"></i> Annuler</button>
         </div>
jordane45
Messages postés
26548
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
20 octobre 2019
1838 > dev_82
Messages postés
38
Date d'inscription
mercredi 24 juillet 2019
Statut
Membre
Dernière intervention
21 août 2019
-
Je n'avais pas fait gaffe à cette ligne
{{ form_start(formSupp) }}

Donc oui.. ça semble correct.
Par contre... tu ne transmets aucune variable lors de ton submit.
Tu pourrais ajouter un input hidden contenant l' ID à supprimer...
De plus, nous ne savons rien de ton code PHP.. nous ne pouvons donc pas savoir si il est bon ou non.
Commenter la réponse de dev_82
Messages postés
38
Date d'inscription
mercredi 24 juillet 2019
Statut
Membre
Dernière intervention
21 août 2019
0
Merci
Mais après je sais pas si ce que j'ai fait en php est suffisant parce que je sais que ça supprime mais peut-être que j'ai oublié quelque chose
 $formSupp = $this->createFormBuilder()
        ->getForm();
        $formSupp->handleRequest($request);

        if($formSupp->isSubmitted())
        {
            $em->remove($t_authentification);
            $em->flush();
            return $this->redirectToRoute('compte');   
        }

Merci de vos réponses.
dev_82
Messages postés
38
Date d'inscription
mercredi 24 juillet 2019
Statut
Membre
Dernière intervention
21 août 2019
-
Je pense que le problème vient du code php donc je considère cette conversation clause et je remercie ceux qui m'ont aidé.
jordane45
Messages postés
26548
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
20 octobre 2019
1838 > dev_82
Messages postés
38
Date d'inscription
mercredi 24 juillet 2019
Statut
Membre
Dernière intervention
21 août 2019
-
As tu regardé ce que contient ta variable $t_authentification ???
Je suppose... rien.... vu que ton formulaire ne semble pas contenir cette variable !
dev_82
Messages postés
38
Date d'inscription
mercredi 24 juillet 2019
Statut
Membre
Dernière intervention
21 août 2019
-
class CompteController extends AbstractController
{
    private $session;
    public function __construct(SessionInterface $session)
    {
        $this->session = $session;
    }
    /**
     * @Route("/compte/{id}", name="compte_nb")
     * @Route("/compte", name="compte")
     */
    public function index($id = null, Request $request, EntityManagerInterface $em, t_authentificationRepository $tRep, PaginatorInterface $paginator)
    {
        $q = $request->query->get('q');
        $pagination = null;
    	if($id == null)
        {
            $t_authentification = new t_authentification;
        }else
        {
            $t_authentification = $tRep->findOneBy(['id' => $id]);
        }

        $form=$this->createForm(AuthentificationRechercheType::class);               //Création d'un formulaire depuis le fichier ExploitantsRechercheType.php     
        $form->handleRequest($request);                                         //Recuperer les requête du formulaire (au moment ou on appuie sur le bouton valider ou la touche entrée).
        if($form->isSubmitted() && $form->isValid()) {                          //Si le form est est valide et les champs sont remplis          
            if($form->getData()["nom"])                                         //si c'est le champs nom on fait une recherche par nom grace au t_exploiantRepository $er
            {
                $this->session->set('type', 'nom');
                $this->session->set('value', $form->getData()['nom']);
            }
            elseif($form->getData()["prenom"])
            {
                $this->session->set('type', 'prenom');
                $this->session->set('value', $form->getData()['prenom']);
            }
            else
            {
                $this->session->set('type', 'all');
            }  
            return $this->redirectToRoute('compte');
        }
        $type = $this->session->get('type');
        $value = $this->session->get('value');    
        if($type == 'all')
        {
            $queryBuilder = $tRep->Order($q);
        }else
        {
            $queryBuilder = $tRep->getAllByTerm($q, $type, $value);
        } 

        /*$t_authentification = new t_authentification();*/
        $formNewUser = $this->createForm(NouveauProfilType::class, $t_authentification);
        $formNewUser->handleRequest($request);

        if($formNewUser->isSubmitted())
        {
           /* dd($t_authentification);*/
           $em->persist($t_authentification);
           $em->flush();
        }

        $formSupp = $this->createFormBuilder()
        ->getForm();
        $formSupp->handleRequest($request);

        if($formSupp->isSubmitted())
        {
            $em->remove($t_authentification);
            $em->flush();
            return $this->redirectToRoute('compte');   
        }

        $pagination = $paginator->paginate ($queryBuilder, $request->query->getInt('page', 1), 20);

        return $this->render('compte/index.html.twig', [
            'form' => $form->createView(),
            'formNewUser' => $formNewUser->createView(),
            'pagination' => $pagination,
            'id' => $id,
            'formSupp' => $formSupp->createView(),
        ]);
    }
}
Commenter la réponse de dev_82
Messages postés
38
Date d'inscription
mercredi 24 juillet 2019
Statut
Membre
Dernière intervention
21 août 2019
0
Merci
Et voilà le formulaire que je récupère :
class NouveauProfilType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('nom', TextType::class)
            ->add('prenom', TextType::class)
            ->add('email', EmailType::class)
            ->add('statut',ChoiceType::class,[
                'choices' => ['utilisateur' => 'utilisateur',
                              'gestionnaire' => 'gestionnaire',
                              'consultant' => 'consultant'
                        ]
            ])
        ;
    }
Commenter la réponse de dev_82
Messages postés
38
Date d'inscription
mercredi 24 juillet 2019
Statut
Membre
Dernière intervention
21 août 2019
0
Merci
Faut-il que je renvoie le problème sur la plateforme php ?
jordane45
Messages postés
26548
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
20 octobre 2019
1838 -
Non.
Tu es DEJA dans le PHP.
J'y avais déplacé ta question....
dev_82
Messages postés
38
Date d'inscription
mercredi 24 juillet 2019
Statut
Membre
Dernière intervention
21 août 2019
-
Ah super.
Merci beaucoup mais du coup, tu ne vois d'où peut venir le problème ?
Commenter la réponse de dev_82
Messages postés
38
Date d'inscription
mercredi 24 juillet 2019
Statut
Membre
Dernière intervention
21 août 2019
0
Merci
Pourriez-vous me sire pourquoi la variable "formSupp" ne remplit pas sa fonction, c'est à dire, supprimer un compte.
Voici, le code php :
$formSupp = $this->createFormBuilder()
        ->getForm();
        $formSupp->handleRequest($request);

        if($formSupp->isSubmitted())
        {
            $em->remove($t_authentification);
            $em->flush();
            return $this->redirectToRoute('compte');   
        }


et voici le code html :
<div class="row">
                {{ form_start(formSupp) }}    
              <button type="submit" class="btn btn-secondary" style="margin-left:80px;margin-bottom:15px"><i class="fas fa-check-circle"></i>OUI</button>
                {{ form_end(formSupp) }}
             <button class="btn btn-secondary" onclick="AbortDelete('{{t_authentification.id}}');" style="margin-left:10px;margin-bottom:15px"><i class="fas fa-times-circle"></i>NON</button>
         </div>
Commenter la réponse de dev_82