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 :

Problème d'update multiple


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Février 2009
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 27
    Par défaut Problème d'update multiple
    Bonjour,

    Dans le cadre de la rénovation du site internet de mon club sportif, je dois réaliser une interface d'administration pour les équipes en Interclubs.

    Pour cela, j'ai créé trois tables (simplifiées pour le problème)

    - une table "joueurs" contenant les champs "licence" (id), "nom", "prenom"
    - une table "equipes" contenant les champs "idE" (id), "annee", "capitaine"
    - une table "equipes_joueurs" contenant les champs "idE" et "licence" afin de faire le lien entre les deux tables.

    Sachant que qu'un joueur peut appartenir à 1 ou plusieurs équipes en même temps.

    Avec ceci, je dois créer deux pages: une page "ajouter.php" afin d'ajouter une équipe ainsi que les joueurs qui la composent.

    Et une page "modifier.php" afin de modifier plus tard les données concernant l'équipe (infos de l'équipe + membres de l'équipe).

    Pour la page "ajouter.php", pas de soucis, la création d'un nouvel enregistrement se fait dans la table equipes. On choisit les joueurs grâce à 14 listes déroulantes (7 pour les hommes, 7 pour les femmes) et dans la table equipes_joueurs s'ajoutent alors 14 enregistrements (contenant pour chacun "l'idE" de l'équipe ainsi que la "licence" du joueur). Si jamais on ne remplit pas toutes les listes, on obtient la valeur 0 dans le champ "licence".

    Maintenant ce que j'aimerais, c'est pouvoir modifier les compositions des équipes dans la page "modifier.php".

    Voici mon code pour "updater" la table equipes (au départ c'est le code de dreamweaver, d'où les GetSQLValueString et %s). Mais cela fonctionne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    if ((isset($_POST["MM_update"])) && ($_POST["MM_update"] == "form1")) {
      $updateSQL = sprintf("UPDATE equipes SET annee=%s, capitaine=%s WHERE idE=%s",
                           GetSQLValueString($_POST['annee'], "text"),
                           GetSQLValueString($_POST['capitaine'], "text"),
                           GetSQLValueString($_POST['idE'], "int")); 
      mysql_select_db($database_localhost, $localhost);
      $Result = mysql_query($updateSQL, $localhost) or die(mysql_error());
    Là où cela pose problème, c'est lorsque je veux mettre à jour les listes déroulantes des joueurs de l'équipe.

    Au départ, j'avais l'idée suivante:
    - récupérer les valeurs des différentes listes dans un tableau numéroté.
    - updater chaque enregistrement de la table avec une boucle FOR.



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
      $tab_joueurs = array ($_POST['joueur1'], $_POST['joueur2'], $_POST['joueur3'], $_POST['joueur4'], $_POST['joueur5'],
      $_POST['joueur6'], $_POST['joueur7']);
     
      for ($i = 0; $i < 7; $i++)
    {
    mysql_query("UPDATE equipes_joueurs SET idE=".$_POST['idE'].", 
    licence='$tab_joueurs[$i]' 
    WHERE idE=".$_POST['idE']."
    ", $localhost) or die(mysql_error());
    }
    Mais le problème, c'est qu'avec cette requête, l'update prend la valeur de la dernière liste déroulante ($tab_joueurs[6]) et la copie dans toutes les autres listes déroulantes.

    Il manque à mon avis une condition, mais laquelle ? La requête UPDATE n'a pas l'air d'offrir beaucoup de souplesse.

    Merci pour vos réponses.

  2. #2
    Membre confirmé
    Inscrit en
    Juillet 2009
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 33
    Par défaut
    Salut,

    Je ne suis pas bien sur d’avoir saisi le problème.
    Si je suis à côté de la plaque réexplique-moi le problème stp.

    Je crois que sais ton résonnement qui ne fonctionne pas

    Si tu veux modifier le numéro d’une l’équipe (avoir le nouveau idE et l’ancien)
    Il faut donc faire deux update ou un en cascade.

    ATTENTION Aux contraintes de clefs étrangère.

    - il faut modifier la table équipes

    - il faut modifier la table équipes_joueurs
    - à l’aide d’une boucle while trouver toutes les relations concernant l’ancien idE
    - et dans la boucle faire l’update

  3. #3
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2004
    Messages
    304
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 304
    Par défaut
    Personnellement je ferai autrement.
    Au niveau de l'insertion, Je n'ajouterai que les joueurs sélectionnés.
    Si par exemple, je ne sélectionne que 4 joueurs pour l'équipe, je n'insérerai que les 4 joueurs et non pas 7 joueurs (4 avec leurs licence, et 3 "0").

    Pour la modification c'est une autre paire de manche, ça dépend de ton cahier des charges.
    => Si un Joueur ne peut pas quitter une équipe

    Un joueur ne peut jamais quitter une équipe :
    ==> Il n'y aura pas besoin de requêtes UPDATE, simplement de Requêtes INSERT, à chaque fois que tu ajoute un joueur à l'équipe, ça sera une requête INSERT dans ta table equipes_joueurs.

    => Si un Joueur peut quitter une équipe et être remplacer par un autre joueur.

    Un joueur quitte une équipe :
    ==> requête DELETE de ta table equipes_joueurs

    Un joueur rejoint une équipe :
    ==> requête INSERT dans ta table equipes_joueurs

    Un joueur quitte une équipe et est remplacé par un autre joueur:
    ==> requête DELETE suivi d'une requête INSERT dans la table equipes_joueurs (ou une requête UPDATE)

    Moi, j'aurais fait comme ceci, si tu bloque quelques part, nous somme là

Discussions similaires

  1. Problème requete update
    Par krfa1 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 29/03/2005, 08h47
  2. problème pour updater une BD
    Par yoda_style dans le forum ASP
    Réponses: 6
    Dernier message: 17/03/2005, 10h56
  3. Réponses: 3
    Dernier message: 25/01/2005, 12h31
  4. Problème d'ajout multiples dans un BDD Access
    Par arnaud_verlaine dans le forum Langage SQL
    Réponses: 3
    Dernier message: 31/05/2004, 13h34
  5. Réponses: 6
    Dernier message: 25/03/2002, 21h11

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