IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

sauvegarder dans BDD chaque fois que passage dans boucle for


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2019
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2019
    Messages : 61
    Par défaut sauvegarder dans BDD chaque fois que passage dans boucle for
    Bonjour,

    Voila je rencontre un petit problème avec mon code. Je travaille avec Symfony et fais mes enregistrements avec Doctrine.
    Dans mon programme, je propose à un utilisateur de remplire une fiche. Cette fiche s'enregistrera dans la table prévue à cet effet. La table de la fiche et la table de l'utilisateur sont liées grâce à une clef étrangère (user_id) présente dans la table de la fiche. Cependant, j'aimerai aussi que l'uilisateur qui crée la fiche puisse renseigner d'autres utilisateurs sur la fiche et que ceux-ci soient également "reliés" à la fiche. Pour cela j'ai fait une nouvelle base (identifiant) avec deux clefs étragère: fiche_id et user_id. L'utilisateur a la possibilité de cocher plusieurs utilisateurs à renseigner. Pour cela j'ai fais la boucle foreach qui récupère toutes les valeurs de mes checkBox

    Voici la fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
     public function creationFicheNC (Request $request, ObjectManager $manager){
     
            $ficheNC= new FicheNC();
            $utilisateur=$this->getUser();
           // $form=$this->get('form.factory')->create(ficheNCType::class, $ficheNC);
     
            $listeUsers = $this
                ->getDoctrine()
                ->getRepository(User::class)
                ->findBy([ 'rolesString'=>['User2','Admin']]);
     
     
            if ($request->isMethod('POST')) {
     
     
                $titre=$request->request->get('titre');
                $categorie=$request->request->get('categorie');
                $ficheNC->setTitre($titre);
                if($categorie=='PourInfo'){
                    $ficheNC->setCategorie('Pour Information');
                }elseif ($categorie=='Mineure'){
                    $ficheNC->setCategorie('Mineure');
                }elseif ($categorie=='Majeure'){
                    $ficheNC->setCategorie('Majeure');
                }
     
               $ficheNC->setUser($utilisateur);
               // $form->handleRequest($request);
               $manager = $this->getDoctrine()->getManager();
                $ficheNC->setDate(date('d-m-Y'));
                //if($form->isSubmitted() && $form->isValid()){
     
                $manager->persist($ficheNC);
     
                foreach( $request->request->get('listUser') as $chkbx){
     
                    $identifiant=new Identifiants();
                    $utilisateur=$this->getDoctrine()->getRepository(User::class)->find($chkbx);
     
                    $identifiant->setUserFiche($utilisateur);
                    $identifiant->setFicheNCUser($ficheNC);
     
                    $manager->persist($identifiant);
                    $manager->flush();
     
                }
     
                $manager->flush();
                    return new Response('Saved new ficheNC with id '.$ficheNC->getId());
              // }
                //return new Response('le titre est: '.$ficheNC->getTitre().'    la categorie est:'.$ficheNC->getCategorie());
            }
     
            return $this->render('listUser2FicheNC.html.twig', array(
                'currentController' => 'User',
                'currentPage' => 'account',
                'listeUsers' => $listeUsers,
                //'form' => $form->createView(),
            ));
     
        }

    Pout chaque utilisateurs qui ont été séléctionnés, la fiche qui est crée et l'utilisateur selectionné sont attribué à la base identifiant.

    J'aimerai qu'à chaque utilisateur cochés une nouvelle ligne (un nouvel "identifiant" dans la bas identifiant) soit crée.

    Je reçois l'erreur suivante:

    An exception occurred while executing 'INSERT INTO identifiants (user_id, fiche_nc_id) VALUES (?, ?)' with params [5, 10]:
    SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '5' for key 'UNIQ_B27B6551A76ED395'
    Ici l'identifiant de ma fiche est 10 et les identifiants de mes utilisateurs sont 5 et 1
    Lorsque je veux ajouter les identifants 1 et 2 cela ne prend en compte que l'identifiant 2.

    Il remarque qu'il y a une "Duplicate entry", comment faire pour qu'il ne me mette pas d'erreur et qu'il enregistre le nouvel "identifiant" de la base à chaque tour du for ?

    Merci pour vos réponses !

  2. #2
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2019
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2019
    Messages : 61
    Par défaut RESOLUUUUUUU
    Finalement c'est bon !! j'avais juste pas mis la bonne relation pour la base de données, j'avais mis OneToOne alors qu'il fallait mettre ManyToOne

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 22/07/2015, 13h43
  2. Sauvegarde dans boucle for
    Par Matlabfordummies dans le forum MATLAB
    Réponses: 2
    Dernier message: 21/05/2012, 15h10
  3. Réponses: 5
    Dernier message: 14/11/2007, 08h03
  4. Réponses: 10
    Dernier message: 02/10/2006, 13h36
  5. Réponses: 10
    Dernier message: 17/05/2006, 19h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo