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 :

insertion multiple checkbox dans table associative [MySQL]


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
    Inscrit en
    Juillet 2012
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2012
    Messages : 210
    Par défaut insertion multiple checkbox dans table associative
    Bonjour,
    Encore une fois je bute sur un problème qui me semblait pourtant simple.
    Après bien des recherches et des essais, je n'ai pas trouvé de solution et sollicite SVP vos conseils pour savoir comment procéder :

    J'ai une base de données "TEXTE".
    Elle est alimentée par un formulaire avec notamment des checkbox, on peut en cocher plusieurs ("METAL") :
    TEXTE -1,n----Renseigner----0,n- METAL
    Donc dans ma base de données j'ai une table associative "AS_TEXTE_METAL" avec 2 lignes : l'ID du texte et l'ID du métal.

    Je souhaiterais que pour chaque métal choisi il y ait une insertion avec les 2 ID.
    Donc si l'utilisateur choisi 5 métaux, qu'il y ait 5 insertions. J'espère que je suis claire ?

    J'arrive bien à récupérer le résultat des checkbox avec une boucle FOREACH et à l'afficher avec ECHO, mais je cale sur l'insertion en bdd.
    Je vous soumets mon code et vous remercie par avance,
    Evelyne31

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    //préparation inserts dans la table AS_TEXTE_METAL
    // Le tableau $_POST['metal'] contient les valeurs des checkbox cochées
    if(empty($_POST['metal'])) {
       echo "Aucune checkbox métal n'a été cochée";
    }
    else
    {
      foreach($_POST['metal'] as $valeur1)
      {
         $requete3 = $base->prepare('INSERT INTO AS_TEXTE_METAL(ID_texte, ID_metal) VALUES (?, ?) ');
         $requete3->execute(array($ID_texte, $valeur1) );
      }
    }

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    C'est clair et conçu comme il faut.
    L'insertion semble correcte.

    1- par contre, il faut :
    • préparer la requête une seule fois -> avant le foreach .
    • ajouter un espace après AS_TEXTE_METAL



    2- quel est le probleme ?
    • as-tu un message d'erreur ? (ajoute un try catch autour de l'insert)
    • as-tu controlé les données ? (echo ...; var_dump...
    • ...


    3- montre le formulaire (checkbox)

  3. #3
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2012
    Messages : 210
    Par défaut
    Bonjour jreaux62,
    Je suis contente de te retrouver, merci pour le compliment.
    1. Voici le code repris selon tes indications :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    //préparation inserts dans la table AS_TEXTE_METAL
    // Le tableau $_POST['metal'] contient les valeurs des checkbox cochées
    $requete3 = $base->prepare('INSERT INTO AS_TEXTE_METAL (ID_texte, ID_metal) VALUES (?, ?) ');
    if(empty($_POST['metal'])) {
       echo "Aucune checkbox métal n'a été cochée";
    }
    else
    {  
      foreach($_POST['metal'] as $valeur1)
      {  	
      $requete3->execute(array($ID_texte, $valeur1) ); 
     
      }
    }
    2. Voici le message d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Fatal error: Uncaught PDOException: SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`metalla`.`as_texte_metal`, CONSTRAINT `fk_AS_TEXTE_METAL_METAL` FOREIGN KEY (`ID_metal`) REFERENCES `METAL` (`ID_metal`) ON DELETE NO ACTION ON UPDATE NO ACTION) in /Applications/MAMP/htdocs/metalla/traitement.php:92 Stack trace: #0 /Applications/MAMP/htdocs/metalla/traitement.php(92): PDOStatement->execute(Array) #1 {main} thrown in /Applications/MAMP/htdocs/metalla/traitement.php on line 92
    La ligne 92 c'est $requete3->execute(array($ID_texte, $valeur1) );
    J'ai vérifié dans ma bdd. J'avais coché 8 checkbox et seules les 3 premières sont enregistrées, avec le bon ID du texte. C'est déjà un énorme progrès !
    Oui j'ai contrôlé les données avec echo et tout était OK.
    Je ne connais pas "try catch autour de l'insert", je vais regarder ça.

    3. Voici le code de mes checkboxs, dans value c'est l'ID du métal :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <br>Métal-aux <i>(plusieurs choix possibles)</i> : <span class="obligatoire">*</span><br>
    <label><INPUT type="checkbox" name="metal[]" value="1" class="form-check-input"> argent</label>
    <label><INPUT type="checkbox" name="metal[]" value="2" class="form-check-input"> bronze</label>
    <label><INPUT type="checkbox" name="metal[]" value="5" class="form-check-input"> cuivre</label>
    <label><INPUT type="checkbox" name="metal[]" value="6" class="form-check-input"> étain</label>
    <label><INPUT type="checkbox" name="metal[]" value="9" class="form-check-input"> fer</label>
    <label><INPUT type="checkbox" name="metal[]" value="10" class="form-check-input"> or</label>
    <label><INPUT type="checkbox" name="metal[]" value="11" class="form-check-input"> plomb</label>
    <label><INPUT type="checkbox" name="metal[]" value="12" class="form-check-input"> autre</label>
    Merci de bien vouloir me conseiller.
    Evelyne31

  4. #4
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2012
    Messages : 210
    Par défaut
    Oups, j'avais fait une boulette, comme d'hab ! Une erreur dans les ID des métaux. Tout est rentré dans l'ordre et ça marche.
    Je peux passer à la suite : modification des enregistrements.
    Sans doute à bientôt, je te remercie vraiment pour ton aide, bon dimanche. Je mets en résolu.
    Evelyne31

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

Discussions similaires

  1. insertion dans table associative
    Par benderR dans le forum Requêtes
    Réponses: 3
    Dernier message: 13/02/2012, 16h52
  2. Réponses: 3
    Dernier message: 14/05/2008, 11h58
  3. Problème insertion nouveau champs dans table
    Par antoine1504 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 04/07/2007, 12h00
  4. Insertion en masse dans table de fait
    Par niiccoo dans le forum Oracle
    Réponses: 19
    Dernier message: 29/05/2006, 10h56
  5. [MySQL] Problème d'insertion de données dans table d'associations
    Par Yukhaa dans le forum PHP & Base de données
    Réponses: 13
    Dernier message: 07/02/2006, 17h10

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