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 :

Conflit dans base de données [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Novembre 2014
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2014
    Messages : 123
    Par défaut Conflit dans base de données
    Bonjour à tous,

    Je vous écris puisque j'ai un soucis avec lequel je me bat depuis maintenant 2 jours, je ne m'en sort pas...

    Je souhaite insérer dans ma base un événement suite à la saisie d'informations dans un formulaire. Cet événement sera inséré dans la table "evenement".

    Voici le formulaire :

    Nom : Sans titre3.png
Affichages : 441
Taille : 9,8 Ko

    Dans un premier temps, il faut renseigner le nom d'une tournée. Ces noms sont présents dans la table "tournee". Au lieu de récupérer le nom de cette tournée (ce qui est affiché), je récupère l'id de celle-ci.
    il faut ensuite renseigner la ville, l'adresse, le lien, et la description.

    Lors de la création de ma base de données, j'ai décidé de créer plusieurs tables avec des relations. Par exemple, la clé primaire de la table "tournee" est "id_tournee". Cet "id_tournee" est aussi présent dans la table "evenement" afin de définir automatiquement la tournée à laquelle appartient tel ou tel événement.

    Mon code ne fonctionnant pas, j'ai alors décidé de tester ma requête directement dans phpmyadmin et voici le résultat :

    Nom : Sans titre.png
Affichages : 494
Taille : 66,8 Ko

    Le soucis est donc celui de cette erreur car je pense que mon code est correct :

    Code php : 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
    62
    63
    64
     
    <form  class="formajoutevent" action="" method="post" enctype="multipart/form-data">
                <select name="tournee" required>
                    <?php
                        try
                        {
                            $bdd = new PDO('mysql:host=localhost;dbname=medrano2017;charset=utf8', 'root', '');
                        }
                        catch(Exception $e)
                        {
                            die('Erreur : '.$e->getMessage());
                        }
                        $reponse = $bdd->query('SELECT * FROM tournee');
     
                        while ($donnees = $reponse->fetch())
                        {
                        ?>
                        <option value="<?php echo $donnees['id_tournee'];?>"><?php echo $donnees['nom_tournee'];?></option>
                        <?php
                        }
                        $reponse->closeCursor();
                    ?>
                </select>
     
                <!--<input type="file" name="affiche" />-->
     
                <input type="text" name="ville" placeholder="Ville de l'événement" required>
     
                <input type="text" name="adresse" placeholder="Adresse de l'événement" required>
     
                <input type="text" name="lienresa" placeholder="Lien de réservation" required>
     
                <textarea type="text" name="description" placeholder="Plus d'informations..."  required></textarea>
     
                <input class="ajoutertournee" type="submit" value="Ajouter">
            </form>
     
            <?php
     
            //var_dump( $_POST['tournee'] );
            //var_dump( $_POST['adresse'] );
            //var_dump( $_POST['adresse'] );
            //var_dump( $_POST['lienresa'] );
            //var_dump( $_POST['description'] );
     
                if(isset($_POST['ville']) && isset($_POST['adresse']) && isset($_POST['lienresa']) && isset($_POST['description']))
                {
                    try
                    {
                        $bdd = new PDO('mysql:host=localhost;dbname=medrano2017;charset=utf8', 'root', '');
                    }
                    catch(Exception $e)
                    {
                       die('Erreur : '.$e->getMessage());
                    }
                    $reponse = $bdd->query('INSERT INTO evenement (id_tournee, ville_event, adresse_event, lien_resa_event, description_event) VALUES ("'.$_POST['tournee'].'","'.$_POST['ville'].'","'.$_POST['adresse'].'","'.$_POST['lienresa'].'","'.$_POST['description'].'")');
     
                    //header('Location: ../index.php');
                }
                else
                {
                    echo 'erreur';
                }
            ?>

    Voici les structures de mes tables, ainsi que le schéma relationnel :
    Table "evenement" :
    Nom : Sans titre2.png
Affichages : 454
Taille : 87,5 Ko

    Table "tournee" :
    Nom : tournee.png
Affichages : 463
Taille : 57,9 Ko

    Schéma relationnel :
    Nom : Sans titre.png
Affichages : 460
Taille : 23,3 Ko

    Merci d'avance à tout le monde !

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 953
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 953
    Par défaut
    Je pense que vous vous êtes trompé dans la relation entre evenement et seance.
    Comme le montre votre message d'erreur de façon très explicite, vous avez créé une clé étrangère qui dit que l'id_event de evenement doit être présent dans seance(id_event).

    J'imagine que c'était l'inverse que vous souhaitiez implémenter.
    => Modifiez votre clé étrangère au niveau de l'id_event

  3. #3
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Novembre 2014
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2014
    Messages : 123
    Par défaut
    Hum, en effet j'ai modifié le sens de cette relation et maintenant je peux en ajouter !
    Merci !

    Cependant, je croyais mon code bon, et il ne l'est pas, mon événement ne s'ajoute toujours pas dans la base....

  4. #4
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 953
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 953
    Par défaut
    Vous n'êtes pas vraiment dans le bon forum, et encore moins pour des questions de code PHP, mais avez-vous commit ? (je ne vois pas de validation dans votre code)

  5. #5
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Novembre 2014
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2014
    Messages : 123
    Par défaut
    Bonjour,

    Je ne fait jamais de commit(), sur les autres pages l'ajout à la base se passe correctement c'est pourquoi ici je ne comprends pas...

  6. #6
    Membre émérite Avatar de Willy_k
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    541
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 541
    Par défaut
    Salut, un seul appel à ta base de données suffit (tu peux le mettre en dehors de ton form) pas besoin de créer autant qu'il y a de requête...
    Juste en bas de ta connexion à la BDD, ajoute
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    Pour les éventuelles erreurs telles que retournées dans PHPMYADMIN
    PS: Essaie d'utiliser autant que possibles les requêtes préparées pour tes requêtes avec passage de variable et évites de les concaténer directement dans ta requête

  7. #7
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Novembre 2014
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2014
    Messages : 123
    Par défaut
    Citation Envoyé par Willy_k Voir le message
    Salut, un seul appel à ta base de données suffit (tu peux le mettre en dehors de ton form) pas besoin de créer autant qu'il y a de requête...
    Juste en bas de ta connexion à la BDD, ajoute
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    Pour les éventuelles erreurs telles que retournées dans PHPMYADMIN
    PS: Essaie d'utiliser autant que possibles les requêtes préparées pour tes requêtes avec passage de variable et évites de les concaténer directement dans ta requête
    Alors en effet, j'ai rajouté cette ligne dont j'ignorait l’existence, et il m'affiche une erreur ligne 96 :

    Code php : 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
     
    <?php
                try
                {
                    $bdd = new PDO('mysql:host=localhost;dbname=medrano2017;charset=utf8', 'root', '');
                    $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
                }
                catch(Exception $e)
                {
                    die('Erreur : '.$e->getMessage());
                }
            ?>
     
            <form  class="formajoutevent" action="" method="post" enctype="multipart/form-data">
                <select name="tournee" required>
                    <?php
                        $reponse = $bdd->query('SELECT * FROM tournee');
     
                        while ($donnees = $reponse->fetch())
                        {
                        ?>
                        <option value="<?php echo $donnees['id_tournee'];?>"><?php echo $donnees['nom_tournee'];?></option>
                        <?php
                        }
                        $reponse->closeCursor();
                    ?>
                </select>
     
                <!--<input type="file" name="affiche" />-->
     
                <input type="text" name="ville" placeholder="Ville de l'événement" required>
     
                <input type="text" name="adresse" placeholder="Adresse de l'événement" required>
     
                <input type="text" name="lienresa" placeholder="Lien de réservation" required>
     
                <textarea type="text" name="description" placeholder="Plus d'informations..."  required></textarea>
     
                <input class="ajoutertournee" type="submit" value="Ajouter">
            </form>
     
            <?php
     
                if(isset($_POST['ville']) && isset($_POST['adresse']) && isset($_POST['lienresa']) && isset($_POST['description']))
                {
                    $reponse = $bdd->query('INSERT INTO evenement (id_tournee, ville_event, adresse_event, lien_resa_event, description_event) VALUES ("'.$_POST['tournee'].'","'.$_POST['ville'].'","'.$_POST['adresse'].'","'.$_POST['lienresa'].'","'.$_POST['description'].'")');
                }
                else
                {
                    //echo 'erreur';
                }
            ?>

    Ce qui correspond à ma requête.
    Voici l'erreur :

    Nom : Sans titre.png
Affichages : 405
Taille : 15,1 Ko

    Je ne comprends pas, il parle d'un clé nommée "id_tournee_2"...

  8. #8
    Membre émérite Avatar de Willy_k
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    541
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 541
    Par défaut
    L'erreur suppose que dans ta table evenements id_tournee est en unique donc essaie de supprimer cette contrainte.
    PS: T'inquiète pas pour id_tournee_2 c'est le nom d'un index (dans ton cas index unique) qui peut différer de celui de la colonne réelle

  9. #9
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Novembre 2014
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2014
    Messages : 123
    Par défaut
    Alors en effet, il doit être en unique puisque sur cette image, le "unique" n'est pas cliquable (en rouge) :

    Nom : Sans titre.png
Affichages : 436
Taille : 113,3 Ko

    J'ai lors essayé cette requête :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    alter table evenement drop index id_tournee;

    Mais ça me dit cela :

    #1091 - Ne peut effacer (DROP) 'id_tournee'. Vérifiez s'il existe

  10. #10
    Membre émérite Avatar de Willy_k
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    541
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 541
    Par défaut
    c'est id_tournee_2 comme le montre ton screen

  11. #11
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Novembre 2014
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2014
    Messages : 123
    Par défaut
    Impossible de la supprimer :

    Nom : Sans titre.png
Affichages : 414
Taille : 10,2 Ko

  12. #12
    Membre émérite Avatar de Willy_k
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    541
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 541
    Par défaut
    Essaie ça
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SET FOREIGN_KEY_CHECKS=0;
    ALTER TABLE evenement DROP INDEX id_tournee_2;
    CREATE INDEX id_tournee_2 ON evenement(id_tournee);
    SET FOREIGN_KEY_CHECKS=1;

  13. #13
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Novembre 2014
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2014
    Messages : 123
    Par défaut
    Citation Envoyé par Willy_k Voir le message
    Essaie ça
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SET FOREIGN_KEY_CHECKS=0;
    ALTER TABLE evenement DROP INDEX id_tournee_2;
    CREATE INDEX id_tournee_2 ON evenement(id_tournee);
    SET FOREIGN_KEY_CHECKS=1;
    Exactement le même résultat :/

  14. #14
    Membre émérite Avatar de Willy_k
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    541
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 541
    Par défaut
    Ne connaissant pas le nom que MYSQL a donnée à ta clé étrangère
    Va dans la partie Vue relationnelle >> Contrainte de la clé étrangère et supprime la ligne de id_tournee
    Et exécute la requête SQL de suppression de l'index unique

  15. #15
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Novembre 2014
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2014
    Messages : 123
    Par défaut
    Citation Envoyé par Willy_k Voir le message
    Ne connaissant pas le nom que MYSQL a donnée à ta clé étrangère
    Va dans la partie Vue relationnelle >> Contrainte de la clé étrangère et supprime la ligne de id_tournee
    Et exécute la requête SQL de suppression de l'index unique
    Ok je viens de supprimer cette ligne :

    Nom : Sans titre.png
Affichages : 419
Taille : 24,9 Ko

  16. #16
    Membre émérite Avatar de Willy_k
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    541
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 541
    Par défaut
    Et toujours l'erreur à la suppression avec alter drop ?

  17. #17
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Novembre 2014
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2014
    Messages : 123
    Par défaut
    Non, ça a marché ! Cependant, je n'ai plus ma relation entre les tables evenement et tournee, si je la crée de nouveau, l'erreur se reproduira ?
    Parce que cette relation est primordiale.

  18. #18
    Membre émérite Avatar de Willy_k
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    541
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 541
    Par défaut
    Faudrait la recréer , tu ajoutes un index en cliquant sur index dans la ligne id_tournee de ta table evenement, et dans vue relationnelle pour ajouter la clé étrangère...

  19. #19
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Novembre 2014
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2014
    Messages : 123
    Par défaut
    Parfait, merci !

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 13/10/2005, 18h24
  2. [VB.NET]Champ image dans base de donnée access
    Par dankes dans le forum Windows Forms
    Réponses: 10
    Dernier message: 06/10/2005, 15h31
  3. [VB.NET] filtre dans base de donnée
    Par speedtug dans le forum Windows Forms
    Réponses: 7
    Dernier message: 21/09/2005, 17h12
  4. Réponses: 8
    Dernier message: 11/05/2005, 14h48
  5. Conflit entre bases de données
    Par BRODU dans le forum Bases de données
    Réponses: 4
    Dernier message: 18/10/2004, 11h40

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