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 :

Vérifier si une valeur apparaît deux fois dans un tableau PHP


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2019
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2019
    Messages : 138
    Par défaut Vérifier si une valeur apparaît deux fois dans un tableau PHP
    Bonjour,

    J'ai un tableau d'agents pour laquelle je dois les insérer dans une table Mysql pour une valeur mission_id donnée.
    La table mission_agenst a comme clé primaire mission_id et agent_id.Du coup si le tableau contient deux agents similaires donc de même agent_id,
    L'insertion génère une exception mais des valeurs ont été déjà insérées.
    Maintenant Je veux vérifier le tableau si une même valeur est présente plus d'une fois, je puisse le savoir et afficher un message d'erreur.
    voilà le tableau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    foreach($tab_prenom as $element)
    				   {
       $req_mission_agent = $bdd_mission_msas->prepare('INSERT INTO  mission_agents(agent_id,mission_id)VALUES(:agent_id,:mission_id)');
     $req_mission_agent->execute(array(
     'agent_id' => $element,
    'mission_id' => $mission_max
    ));
     }// Fin boucle foreach
    Quelle est la solution ?

  2. #2
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Ne pas t'en préoccuper en PHP et faire une transaction SQL. Si une des requêtes d'insertion échoue , tu reviens à l'état initial d'avant la transaction.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2019
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2019
    Messages : 138
    Par défaut
    Bonjour,

    Je comprends bien ta réponse mais comment implémenter ça ?
    Pour rappel, je fais une insertion dans une première table, récupère la clé insérée et fais une deuxième insertion dans une seconde table avec une liste d'agents.
    Je veux que si ça échoue une seule fois, que toutes les lignes déjà insérées dans les deux tables soient enlevées dans la base de données.
    je suis pas trop expert en Mysql.
    Merci d'avance

  4. #4
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Voir la documentation pour des exemples de transaction : https://www.php.net/manual/fr/pdo.transactions.php

    • Dans un try/catch tu fais un beginTransaction()
    • Tu executes X requêtes
    • si tout est ok tu commit()
    • si exception tu rollback()
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2019
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2019
    Messages : 138
    Par défaut
    Bonjour

    Comme indiqué, j'ai fait exactement comme dit, mais mon problème se trouve sur la deuxième insertion.
    En fait, si on choisit le même agent deux fois, ce qui est censé lever une exception, ça annule seulement la transaction sur la première table mère, dans la table fils les lignes insérées avant l’exception ne sont pas annulées.
    Voilé mon soucis,
    Dans la table mission_agents, on doit pas avoir pour mémé numéro de mission,l’associer au même agent deux fois.
    Alors quand l'exception est levée, seul un agent est inséré alors que je veux dans ce cas aucun agent ne soit pas inséré
    Voici le code
    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
     
    try
     {
     $bdd_mission_msas->beginTransaction(); 
     $req_mission = $bdd_mission_msas->prepare('INSERT INTO missions(motif,depart_mission,arrivee_mission,moyen_transport,objet,observations,lieu,service_id) VALUES(:motif,:depart_mission,:arrivee_mission,:moyen_transport,:objet,:observations,:lieu,:service_id)');
        $req_mission->execute(array(
       'motif' => $motif,
    'depart_mission' => $date_dept_mission,
    'arrivee_mission' => $date_arriv_mission,
    'moyen_transport' => $moyen_transport,
    'objet' => $objet,
    'observations' => $observations,
    'lieu' => $lieu,
    'service_id' => $direction_origine
    ));
     
    $reponse_last_idmission = $bdd_mission_msas->query('SELECT * FROM missions WHERE mission_id = ( SELECT MAX( mission_id ) AS idMax FROM missions )');
    while ($donnees_missmax = $reponse_last_idmission->fetch())
          {
    	                   $mission_max=$donnees_missmax ['mission_id'];
            }
     
      foreach($tab_prenom as $element)
    				   {
    				   $req_mission_agent = $bdd_mission_msas->prepare('INSERT INTO  mission_agents(agent_id,mission_id)VALUES(:agent_id,:mission_id)');
                   $req_mission_agent->execute(array(
    	        'agent_id' => $element,
    			'mission_id' => $mission_max
    						));
     
     
    				   }// Fin boucle foreach
     
     
    		 $bdd_mission_msas->commit();
    		 echo "Enregistrement reussi"; 
    		 }
    		  catch (PDOException $e) 
    		{
    			//echo "Échec : " . $e->getMessage(); 
    			$bdd_mission_msas->rollBack();
     
    			echo "Échec enregistrement"; 
    			exit;
    		}

  6. #6
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Si la transaction ne correspond pas à ton besoin , il faut alors faire manuellement analyser tes données :

    Tu parcours tes tableaux avant insertion et si tu y détecte quelque chose d'anormal (un doublon) tu refuse toute insertion.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 24/05/2014, 12h38
  2. [MySQL] Sélectionnez une valeur présente X fois dans une table
    Par fkoncept dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 18/01/2013, 12h03
  3. [XL-2003] Tester si une valeur réapparait plusieurs fois dans une cellule
    Par apnw7931 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/04/2011, 15h10
  4. Vérifier si une valeur se trouve déjà dans une list box
    Par beegees dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 22/01/2009, 15h03
  5. Réponses: 1
    Dernier message: 18/06/2007, 09h08

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