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 :

Insérer des données avec une boucle while


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2008
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 23
    Points : 12
    Points
    12
    Par défaut Insérer des données avec une boucle while
    salam

    j'ai réalisé un tableau qui contient une liste des élèves avec un champ de texte a la fin de chaque ligne dans la liste, le probleme

    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
    	<?php
    	    	    $nclass = $_GET['nclass'];
    		    $trim   = $_GET['trim'];
    		    $nenseign= $_SESSION['numero_enseignant'];
    		    $req    = $bdd1->query("select * from eleve where n_class = $nclass");
    		    $req1   = $bdd1->query("select * from enseignant where num_enseignant = $nenseign");
    		    $res1   = $req1->fetch();
    		    $n_mat  = $res1['n_mat'];
    		    $dev    = $_GET['dev'];
     
    	echo"<form method='post' action='#'>";
    				echo"<table border = '1'>";
    			echo"<tr><td><strong>Numéro</strong></td><td><strong>Nom</strong></td><td><strong>Prénom</strong></td><td><strong>Adresse</strong></td><td><strong>".$_GET['dev']."</strong></td></tr>";
    			while($res    = $req->fetch())
    			    {
    				echo "<tr><td>".$res['n_eleve']."</td><td>".$res['nom_eleve']."</td><td>".$res['prenom_eleve']."</td><td>".$res['adresse']."</td><td><input size ='8' type ='text' name='".$res['n_eleve']."'/></td></tr>";
    				if(isset($_POST['valider']))
    				    {
    					$neleve = $res['n_eleve'];
    					$note = $_POST[''.$neleve];
    					echo $neleve;
    					echo $note;
    					$insert ="insert into note values($neleve,'$trim',$n_mat,'$dev','$note')";
    					$req3 = $bdd1->exec($insert);
    				    }
    			    }
    		    echo"</table><br/>"; 
    		echo"<input type = 'submit' value = 'valider' name= 'valider'/>";
    		?>
    	</form>
    mon problème c'est que la requête insert un seul enregistrement dans la table note. C'est quoi le problème ?
    Merci d'avance

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    commence par protéger tes valeurs, c'est plus un trou mais un gouffre en sécurité la.

  3. #3
    Membre à l'essai
    Inscrit en
    Mars 2008
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 23
    Points : 12
    Points
    12
    Par défaut salut
    j'ai pas compris, protection des valeurs ?!

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726

  5. #5
    Membre à l'essai
    Inscrit en
    Mars 2008
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 23
    Points : 12
    Points
    12
    Par défaut
    Ok merci, je vais voir le lien mais je veux savoir pourquoi la boucle que j'ai fait insert qu'un seul enregistrement dans la table

  6. #6
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Citation Envoyé par adnanedelphi Voir le message
    Ok merci, je vais voir le lien mais je veux savoir pourquoi la boucle que j'ai fait insert qu'un seul enregistrement dans la table
    Sûrement parce que cette requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $req    = $bdd1->query("select * from eleve where n_class = $nclass");
    ne renvoie qu'une ligne de résultat tout bêtement.
    Ou que la requête d'insertion échoue lamentablement. Tu le saura si tu vérifie le résultat de l’exécution. Regarde donc les logs de PHP, tu devrais y voir de jolies choses.

    Et puis faire de l'affichage + des traitements métiers + des requêtes SQL au sein du même script sans même les séparer c'est immonde.

  7. #7
    Membre à l'essai
    Inscrit en
    Mars 2008
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 23
    Points : 12
    Points
    12
    Par défaut
    voila j'ai utilisé des requêtes pour protéger les valeur mais toujours la requête d'insertion insert un seul enregistrement dans la table malgré que la requête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $req    = $bdd1->prepare("select * from eleve where n_class = ?");
    			$req->execute(array($_GET['nclass']));
    renvoi tous les enregistrement de la table élève
    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
    25
    26
    27
    28
    29
    30
     
     
    	<form method="post" action="#">
    		<?php
    			$req    = $bdd1->prepare("select * from eleve where n_class = ?"); // une requete qui permet d'afficher la liste des etudiants
    			$req->execute(array($_GET['nclass']));
    			$req1   = $bdd1->prepare("select * from enseignant where num_enseignant = ?");// une requete pour recuperer le numero de la matiere 
    			$req1->execute(array($_SESSION['numero_enseignant']));
    			$res1   = $req1->fetch();
    			echo"<table border = '1'>";
    			echo"<tr><td><strong>Numéro</strong></td><td><strong>Nom</strong></td><td><strong>Prénom</strong></td><td><strong>Adresse</strong></td><td><strong>".$_GET['dev']."</strong></td></tr>";
    			while($res = $req->fetch())
    			    {
    				echo "<tr><td>".$res['n_eleve']."</td><td>".$res['nom_eleve']."</td><td>".$res['prenom_eleve']."</td><td>".$res['adresse']."</td><td><input size ='8' type ='text' name='".$res['n_eleve']."'/></td></tr>";
    					if(isset($_POST['valider']))
    					{
    							    $req3   = $bdd1->prepare("insert into note values(:neleve,:trim,:n_mat,:dev,:note)");
    							    $req3->execute(array(
    							    'neleve' => $res['n_eleve'],
    							    'trim'   => $_GET['trim'],
    							    'n_mat'  => $res1['n_mat'],
    							    'dev'    => $_GET['dev'],
    							    'note'   => $_POST[''.$res['n_eleve']]
    							));
    					}
    			    }
    		    echo"</table><br/>"; 
    		echo"<input type = 'submit' value = 'valider' name= 'valider'/>";
    		?>
    	</form>
    Merci

  8. #8
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    ta activé la gestion des erreurs ?

  9. #9
    Membre à l'essai
    Inscrit en
    Mars 2008
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 23
    Points : 12
    Points
    12
    Par défaut
    je ne reçois aucune erreur, pour le moment je veux insérer les données avec la requête après je vais faire la gestion des erreurs
    Merci pour vos conseils

  10. #10
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Bonjour,

    J'ai repris ton code histoire de le clarifier et surtout de le réorganiser un peu plus lisiblement :
    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
    46
    47
    48
    49
    50
    51
    52
    53
    <?php
     
    // LISTE DES ETUDIANTS
    $sql  = 'SELECT * FROM eleve WHERE n_class = :nclass';
    $stmt = $bdd1->prepare($sql);
    $stmt->bindValue(':nclass', $_GET['nclass'], PDO::PARAM_INT);  // suppose que nclass est un entier
    $etudiants = ($stmt->execute()) ? $stmt->fetchAll(PDO::FETCH_ASSOC) : array();
     
    // NUMERO DE LA MATIERE
    $sql  = 'SELECT * FROM enseignant WHERE num_enseignant = :num';
    $stmt = $bdd1->prepare($sql);
    $stmt->bindValue(':num', $_SESSION['numero_enseignant'], PDO::PARAM_INT); // suppose que le n° enseignant est un entier
    $data = ($stmt->execute()) ? $stmt->fetchAll(PDO::FETCH_ASSOC) : array();
    $numMat = $data[0]['n_mat'];
     
    // INSERTION DES NOTES
    if (isset($_POST['valider'])) {
       $sql = 'INSERT INTO note VALUES (:neleve, :trim, :n_mat, :dev, :note)';
       $stmt = $bdd1->prepare($sql);
     
       $stmt->bindParam(':trim', $_GET['trim'], PDO::PARAM_INT); // suppose que le trimestre est un entier
       $stmt->bindParam(':n_mat', $numMat, PDO::PARAM_INT);      // suppose que le n° matière est un entier
       $stmt->bindParam(':dev', $_GET['dev']);                   // suppose que dev est une chaine
     
       foreach($etudiants as $etudiant) {
          $stmt->bindParam(':neleve', $etudiant['n_eleve'], PDO::PARAM_INT); // suppose que le n° est un entier
          $stmt->bindParam(':note', $etudiant['n_eleve'], PDO::PARAM_INT);   // suppose que note est un entier
          $stmt->execute();
       }
    }
    ?>
    <form method="post" action="#">
       <table border="1">
          <tr>
             <td><strong>Numéro</strong></td>
             <td><strong>Nom</strong></td>
             <td><strong>Prénom</strong></td>
             <td><strong>Adresse</strong></td>
             <td><strong><?php echo $_GET['dev']; ?></strong></td>
          </tr>
          <?php foreach($etudiants as $etudiant): ?>
          <tr>
             <td><?php echo $etudiant['n_eleve']; ?></td>
             <td><?php echo $etudiant['nom_eleve']; ?></td>
             <td><?php echo $etudiant['prenom_eleve']; ?></td>
             <td><?php echo $etudiant['adresse']; ?></td>
             <td><input size="8" type ="text" name="<?php echo $etudiant['n_eleve']; ?>" /></td>
          </tr>
          <?php endforeach; ?>
       </table>
       <br />
       <input type="submit" value="valider" name="valider" />
    </form>
    Tu verras je suppose des choses quant au type de certaines données manipulées. Corriges au besoin.
    Si ta requête INSERT ne fait qu'un tour c'est que $etudiants ne contient qu'un seul enregistrement comme le souligne Benjamin Delespierre

  11. #11
    Membre éclairé Avatar de EIN-LESER
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2008
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 703
    Points : 778
    Points
    778
    Par défaut
    Si je puis me permettre la gestion des erreurs n'est pas quelque chose qu'on peut juste faire après.
    Je sais je vais me faire qualifier de vieux machin (ce que je suis après tout en considérant que tout est relatif lol) mais il faudrait suivre les conventions car elle sont pas seulement la pour faire joli
    Spécialiste des questions bêtes

    ”If you can't explain it simply, you don't understand it” (Ce que tu ne peux pas expliquer simplement, tu ne le comprends pas) Albert Einstein

    Si une reponse vous plait ou vous a aidé n'hesitez pas a voter pour

  12. #12
    Membre à l'essai
    Inscrit en
    Mars 2008
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 23
    Points : 12
    Points
    12
    Par défaut
    salam

    j'ai essayé avec le code mais toujours la requête insert un seul enregistrement

    Merci

  13. #13
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    fais un var_dump($etudiants) pour voir

  14. #14
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Et mets ça au début de ton script, c'est jamais perdu:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    error_reporting(-1);
    ini_set('display_errors', 1);

  15. #15
    Membre à l'essai
    Inscrit en
    Mars 2008
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 23
    Points : 12
    Points
    12
    Par défaut
    j'ai rien compris
    la table élève contient deux enregistrement,


    array
    0 =>
    array
    'n_eleve' => string '1' (length=1)
    'nom_eleve' => string 'KERRI' (length=5)
    'prenom_eleve' => string 'ADNANE' (length=6)
    'adresse' => string 'GUENZET' (length=7)
    'email_eleve' => string 'aaa@hotmail.fr' (length=14)
    'mp_eleve' => string 'kerri' (length=5)
    'n_class' => string '1' (length=1)
    1 =>
    array
    'n_eleve' => string '2' (length=1)
    'nom_eleve' => string 'IRFAA' (length=5)
    'prenom_eleve' => string 'ISSAAD' (length=6)
    'adresse' => string 'GUENZET' (length=7)
    'email_eleve' => string 'kerri@hotmail.f' (length=15)
    'mp_eleve' => string 'delphi' (length=6)
    'n_class' => string '1' (length=1)

    array
    0 =>
    array
    'n_eleve' => string '1' (length=1)
    'nom_eleve' => string 'KERRI' (length=5)
    'prenom_eleve' => string 'ADNANE' (length=6)
    'adresse' => string 'GUENZET' (length=7)
    'email_eleve' => string 'aaa@hotmail.fr' (length=14)
    'mp_eleve' => string 'kerri' (length=5)
    'n_class' => string '1' (length=1)
    1 =>
    array
    'n_eleve' => string '2' (length=1)
    'nom_eleve' => string 'IRFAA' (length=5)
    'prenom_eleve' => string 'ISSAAD' (length=6)
    'adresse' => string 'GUENZET' (length=7)
    'email_eleve' => string 'kerri@hotmail.f' (length=15)
    'mp_eleve' => string 'delphi' (length=6)
    'n_class' => string '1' (length=1)


  16. #16
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    maintenant fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var_dump($stmt->execute());

  17. #17
    Membre à l'essai
    Inscrit en
    Mars 2008
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 23
    Points : 12
    Points
    12
    Par défaut
    voila qu'est ce que ça donne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    boolean false
     
    boolean false

  18. #18
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    mais ajoute la gestion des erreurs, comment tu veux savoir quelles sont les erreurs si tu les affiche pas ???

  19. #19
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Pour PDO:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);

  20. #20
    Membre à l'essai
    Inscrit en
    Mars 2008
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 23
    Points : 12
    Points
    12
    Par défaut
    salam

    c'est bon j'ai régler le problème avec la gestion des erreurs
    j'ai fait une erreur lors de la création de ma table note, j'ai définis le champs devoir comme clé primaire alors que avec la gestion des erreur je reçois le message suivans:

    Warning: PDOStatement::execute() [pdostatement.execute]: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'devoir1' for key 'PRIMARY' in C:\wamp\www\projet de teste2\classe.php on line 73
    le problème est résolu merci a tous

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 20/04/2010, 11h24
  2. [MySQL] Insérer des données dans une table avec Foreach
    Par Gogad dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 07/04/2010, 08h53
  3. [MySQL] Insérer 700 tuples avec une boucle while
    Par JackBeauregard dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 22/07/2008, 21h10
  4. [D6 => XML] Récupération de données avec une boucle.
    Par Bason_sensei dans le forum Delphi
    Réponses: 1
    Dernier message: 23/05/2006, 13h50
  5. [format des données avec une procédure stockée]
    Par viny dans le forum PostgreSQL
    Réponses: 7
    Dernier message: 10/03/2005, 13h24

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