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

  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

  7. #7
    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 crois que c'est la meilleure solution. Mais comment détecter un doublon dans un tableau PHP ?

  8. #8
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    array_​count_​values ? Enfin, ça dépend de la structure de ton tableau.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  9. #9
    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,

    En fait la structure de mon tableau est un array avec comme clés des valeurs commençant de 0, 1 etc...
    Exemple

    Array
    (
    [0]=> 18
    [1]=> 15
    )

    voilà je ne voit pas trop comment détecter qu'il y a doublons ?

    Merci d'avance

  10. #10
    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
    Il suffit d'utiliser array_unique() qui dédoublonne le tableau et de compter le nombre d'élément et de le comparer au nombre d'élément du tableau original.
    Si il sont équivalent pas de doublon , sinon il y'a des doublons
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if(count(array_unique($array)) != count($array)) {
    	// doublon
    } else {
           // Pas de doublon
    }
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  11. #11
    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,

    Merci à vous tous

    je crois que ça marche et ça corresponds à mes besoins.

+ 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