Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/11/2011, 14h16   #1
Invité de passage
 
Inscription : mars 2008
Messages : 23
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 23
Points : 0
Points : 0
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 :
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
adnanedelphi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2011, 14h20   #2
Modérateur
 
Inscription : septembre 2010
Messages : 7 131
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 131
Points : 8 491
Points : 8 491
commence par protéger tes valeurs, c'est plus un trou mais un gouffre en sécurité la.
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2011, 14h32   #3
Invité de passage
 
Inscription : mars 2008
Messages : 23
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 23
Points : 0
Points : 0
Par défaut salut

j'ai pas compris, protection des valeurs ?!
adnanedelphi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2011, 14h33   #4
Modérateur
 
Inscription : septembre 2010
Messages : 7 131
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 131
Points : 8 491
Points : 8 491
http://php.net/manual/fr/security.da...-injection.php
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2011, 14h40   #5
Invité de passage
 
Inscription : mars 2008
Messages : 23
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 23
Points : 0
Points : 0
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
adnanedelphi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2011, 16h46   #6
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 991
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

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

Informations forums :
Inscription : février 2010
Messages : 2 991
Points : 5 032
Points : 5 032
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 :
$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.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2011, 11h40   #7
Invité de passage
 
Inscription : mars 2008
Messages : 23
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 23
Points : 0
Points : 0
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 :
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 :
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
adnanedelphi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2011, 11h46   #8
Modérateur
 
Inscription : septembre 2010
Messages : 7 131
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 131
Points : 8 491
Points : 8 491
ta activé la gestion des erreurs ?
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2011, 14h05   #9
Invité de passage
 
Inscription : mars 2008
Messages : 23
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 23
Points : 0
Points : 0
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
adnanedelphi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2011, 14h36   #10
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 461
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 461
Points : 2 551
Points : 2 551
Envoyer un message via Skype™ à rawsrc
Bonjour,

J'ai repris ton code histoire de le clarifier et surtout de le réorganiser un peu plus lisiblement :
Code :
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
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2011, 15h28   #11
Membre éclairé
 
Avatar de EIN-LESER
 
Homme Sebastian
Développeur Web
Inscription : mai 2008
Messages : 380
Détails du profil
Informations personnelles :
Nom : Homme Sebastian
Âge : 35
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mai 2008
Messages : 380
Points : 318
Points : 318
Envoyer un message via MSN à EIN-LESER
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

L'urgent est fait, l’impossible est en cour, pour les miracles prévoir un délai

Si une reponse vous plait ou vous a aidé n'hesitez pas a voter pour
EIN-LESER est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 17/11/2011, 15h33   #12
Invité de passage
 
Inscription : mars 2008
Messages : 23
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 23
Points : 0
Points : 0
salam

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

Merci
adnanedelphi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2011, 15h37   #13
Modérateur
 
Inscription : septembre 2010
Messages : 7 131
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 131
Points : 8 491
Points : 8 491
fais un var_dump($etudiants) pour voir
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2011, 15h43   #14
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 991
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

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

Informations forums :
Inscription : février 2010
Messages : 2 991
Points : 5 032
Points : 5 032
Et mets ça au début de ton script, c'est jamais perdu:
Code :
1
2
error_reporting(-1);
ini_set('display_errors', 1);
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2011, 15h49   #15
Invité de passage
 
Inscription : mars 2008
Messages : 23
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 23
Points : 0
Points : 0
j'ai rien compris
la table élève contient deux enregistrement,

Citation:

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)

adnanedelphi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2011, 15h51   #16
Modérateur
 
Inscription : septembre 2010
Messages : 7 131
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 131
Points : 8 491
Points : 8 491
maintenant fait :
Code :
var_dump($stmt->execute());
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2011, 16h01   #17
Invité de passage
 
Inscription : mars 2008
Messages : 23
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 23
Points : 0
Points : 0
voila qu'est ce que ça donne:

Code :
1
2
3
4
 
boolean false
 
boolean false
adnanedelphi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2011, 16h04   #18
Modérateur
 
Inscription : septembre 2010
Messages : 7 131
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 131
Points : 8 491
Points : 8 491
mais ajoute la gestion des erreurs, comment tu veux savoir quelles sont les erreurs si tu les affiche pas ???
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2011, 16h20   #19
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 991
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

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

Informations forums :
Inscription : février 2010
Messages : 2 991
Points : 5 032
Points : 5 032
Pour PDO:
Code :
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2011, 13h24   #20
Invité de passage
 
Inscription : mars 2008
Messages : 23
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 23
Points : 0
Points : 0
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:

Citation:
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
adnanedelphi est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h57.


 
 
 
 
Partenaires

Hébergement Web