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 :

INSERT INTO Multiple [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Homme Profil pro
    Sans emploi
    Inscrit en
    Novembre 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Sans emploi

    Informations forums :
    Inscription : Novembre 2013
    Messages : 11
    Par défaut INSERT INTO Multiple
    Saluton al cxiuj (petit clin d'oeil à Maljuna Kris)

    J'ai deux tables :

    users :

    id_eleve (int clé primaire)
    identifiant (varchar)
    psw (varchar)
    nom (varchar)
    prenom (varchar)
    classe (varchar)

    compositions :

    id_compo (int clé primaire)
    id_eleve (int clé étrangère)
    date_compo (datetime)
    titre_compo (varchar)
    note_compo (int)
    avis_compo (varchar)
    pdf (varchar)

    Un formulaire qui est généré de cette manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $req = $bdd->query("SELECT DISTINCT `id_eleve`, `identifiant`, `nom`, `prenom`
                                 FROM users
                                 WHERE `users`.`classe` = '$classe'"
                                 );
    Le résultat :

    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
     
    <form action="" method="POST">
         <fieldset>
            <legend>Eléves</legend>
            <table id="notes" class="table table-bordered table-striped" style="margin-top: 0;">
                <tr>
                    <th>Identifiant</th>
                    <th>Eléve</th>
                    <th>Date</th>
                    <th>DS</th>
                    <th>Note (/20)</th>
                    <th>Appréciation</th>
                    <th>PDF</th>
                </tr>
       <?php
           while($donnees = $req->fetch()){
               echo '<tr>';
               echo '<td>' . $donnees['identifiant'] . '</td>';
               echo '<td>' . $donnees['nom'] . ' ' . $donnees['prenom'] . '</td>';
               echo '<td><input type="text" class="form-control" name="date_compo" id="date_compo" placeholder="Date" disabled></td>';
               echo '<td><input type="text" class="form-control" name="titre_compo" id="titre_compo" placeholder="Titre du DS"></td>';
               echo '<td><input type="text" class="form-control" name="note_compo" id="note_compo" placeholder="Note"></td>';
               echo '<td><textarea class="form-control" rows="1" name="avis_compo" id="avis_compo" placeholder="Avis"></textarea></td>';
               echo '<td>' . $donnees['pdf'] . '</td>';
               echo '</tr>';
          }  
    ?>                        
             </table>
          </fieldset>
          <input type="submit" class="form-control" value="Envoyer">
     </form>
    J'obtiens ça :

    Nom : Tableau.png
Affichages : 166
Taille : 16,3 Ko

    Vous pouvez donc voir qu'il existe un ensemble de champs <input>. J'aimerai avoir la possibilité de les remplir et d'insérer tous les résultats dans les tables de la base de données.

    Pour sûr, il faut utiliser une boucle. Je pensais d'ailleurs à faire comme suit :

    - Déclaration d'une variable qui prendra comme valeur le nombre de ligne rempli, sachant que pour valider une ligne, il faut que tous les champs de cette ligne soient remplis. Mais il n'est pas nécessaire de remplir toutes les lignes pour valider l'envoi des données

    - Création d'une boucle for

    - Requête SQL pour insérer les informations (INSERT INTO)

    J'ai trouvé des solutions sur le net dont une qui correspondait vraiment à ce que je m'imaginais, mais j'ai beau essayé, ça ne fonctionne pas. Et je ne retrouve plus ce fameux code - LE boulet...

    Je ne demande pas forcément une réponse toute faite, je veux simplement être aiguillé, est-ce que mon raisonnement est bon ? Est-ce qu'il manque des éléments ?

  2. #2
    Membre averti
    Homme Profil pro
    Sans emploi
    Inscrit en
    Novembre 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Sans emploi

    Informations forums :
    Inscription : Novembre 2013
    Messages : 11
    Par défaut
    N'hésitez à demander si vous ne comprenez pas quelque chose ou si vous avez besoin de plus d'informations... ça m'arrangerait, parce que là je sèche. Sans le vouloir j'ai créé des boucles infinies, je me suis retrouvé avec 6253 entrées dans la table.

    Je pensais à une boucle for :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for($i = 0; $i < $nbrEntrees; $i++){
         if(isset($_POST['titre_compo']) && isset($_POST['note_compo']) && isset($_POST['avis_compo']) && isset($_POST['pdf_compo'])){
     
         }
    }
    Mais comment connaitre le nombre d'entrées ?

    Voici le code complet :

    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
    if(!isset($_POST['Envoyer']) || $_POST['Envoyer'] != 'Envoyer'){
        echo 'erreur envoyer';
    } else {
        $reqAjout = $bdd->prepare("INSERT INTO compositions (date_compo, eleve_id, titre_compo, note_compo, avis_compo, pdf_compo) VALUES (:date_compo, :eleve_id, :titre_compo, :note_compo, :avis_compo, :pdf_compo)");
        $donnees = $req->fetch();
        $date_compo = date("d/m/y");
        $eleve_id = $donnees['id_eleve'];
        $titre_compo = $_POST['titre_compo'];
        $note_compo = $_POST['note_compo'];
        $avis_compo = $_POST['avis_compo'];
        $pdf_compo = $_POST['pdf_compo'];
        $reqAjout->execute(array(
            'date_compo' => $date_compo,
            'eleve_id' => $eleve_id,
            'titre_compo' => $titre_compo,
            'note_compo' => $note_compo,
            'avis_compo' => $avis_compo,
            'pdf_compo' => $pdf_compo
        ));
        for($i = 0; $i < $nbrEntrees; $i++){
            if(isset($_POST['titre_compo']) && isset($_POST['note_compo']) && isset($_POST['avis_compo']) && isset($_POST['pdf_compo'])){
            }
        }
    }

  3. #3
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Utilise une notation en tableau pour ton formulaire
    Et ensuite foreach pour parcourir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    foreach($_POST['date_compo'] as $key=>$value) {
       if (!empty($_POST['titre_compo'][$key]) && !empty($_POST['note_compo'][$key])) {
     $reqAjout->execute(array(
                            'date_compo' => $value,
                            'eleve_id' => $eleve_id,
                            'titre_compo' => $_POST['titre_compo'][$key],
                            'note_compo' => $_POST['note_compo'][$key],
                            'avis_compo' => $_POST['avis_compo'][$key],
                            'pdf_compo' => $pdf_compo
                        ));
    }
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  4. #4
    Membre averti
    Homme Profil pro
    Sans emploi
    Inscrit en
    Novembre 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Sans emploi

    Informations forums :
    Inscription : Novembre 2013
    Messages : 11
    Par défaut
    Parfait. J'ai simplement remplacé $_POST['date_compo'] par $_POST['titre_compo'] puisque la date est automatiquement définie. J'ai aussi ajouté dans la boucle foreach :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $donnees = $req->fetch();
    $eleve_id = $donnees['id_eleve'];
    Pour que les entrées passées dans les input soient propres à un élève.

    Donc en utilisant la notation en tableau, on stocke les valeurs dans ces différents tableaux. Par exemple "titre" va stocker tous les titres de cette manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    titre_compo[
        [0]['titre1'],
        [1]['titre2'],    
        [2]['titre3'],
        ...
    ];
    "note" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    note_compo[
        [0]['note1'],
        [1]['note2'],    
        [2]['note3'],
        ...
    ];
    etc.

    Puis on va exécuter la requête préparée tant qu'on trouvera un titre dans le tableau titre_compo[].

    Merci Sabotage !

    Bonne journée

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

Discussions similaires

  1. Requêtes multiple en Update et insert into
    Par loic3484 dans le forum MySQL
    Réponses: 8
    Dernier message: 13/03/2015, 23h06
  2. Insert multiple (INSERT INTO ...VALUES SELECT...)
    Par acognard dans le forum Débuter
    Réponses: 7
    Dernier message: 13/05/2014, 13h42
  3. [MySQL] Insert into multiple dans même table
    Par andaman dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 08/01/2011, 16h51
  4. [MySQL] insert into multiple
    Par bailamos dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 01/07/2009, 18h51
  5. insert into Insertions multiples
    Par jadey dans le forum SQL
    Réponses: 18
    Dernier message: 14/12/2007, 09h29

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