Enregistrement multiple a partir d'un tableau

mht -  
 mht -
bonjours a toutes et tous,
J'aimerai savoir comment faire un multi-enregistrement dans une base de données plus prescicement dans un même champs. Les données sont dans un tableau qui m'affiche une liste d'étudiant et une case vide dans la quel je doit remplir une appréciation pour chacun d'entre eux.
Mon tableau tire la liste des étudiants a partir d'une boucle WHILE. J'ai la possibilité de remplir pour chaque étudiant une appréciation dans le tableau et pour chacun d'entre eux j'aimerai enregistrer leurs noms, prénoms et appréciation en même temps.

Le problème qui ce pose et qu'il enregistre tous simplement le dernier étudiant et ne prend pas en compte les autres. merci

11 réponses

Résumé de la discussion

Problème central : réaliser l’enregistrement multi‑enregistrements des appréciations pour tous les étudiants affichés dans une boucle, car seul le dernier enregistrement est pris en compte actuellement. Des réponses recommandent d’utiliser une requête UPDATE pour chaque étudiant en transmettant son identifiant via GET ou POST et en traitant chaque ligne de la boucle afin d’éviter l’écrasement par le dernier élément. D’autres échanges évoquent l’emploi d’un formulaire par ligne avec champs cachés pour le nom et le prénom, et l’enregistrement se fait soit par UPDATE, soit par vérification d’un identifiant d’étudiant. Enfin, certaines réponses soulignent l’importance de baser l’opération sur une clé identifiant l’étudiant et avertissent de passer par une API moderne (PDO/MySQLi) plutôt que l’API dépréciée mysql_.

Généré automatiquement par IA
sur la base des meilleures réponses
  1. mandolorien Messages postés 115 Statut Membre 3
     
    Salut :)
    Ta requete et situé dans le while ou aprés le while ?
    0
    1. mht
       
      ma requete se trouve apres le while
      0
  2. mandolorien Messages postés 115 Statut Membre 3
     
    me la dans le while ;)
    0
    1. mht
       
      c'est toujours la meme chose
      0
  3. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  4. mandolorien Messages postés 115 Statut Membre 3
     
    tu as essayé avec un for ? au lieu d'un while
    0
    1. mht
       
      non
      0
  5. mandolorien Messages postés 115 Statut Membre 3
     
    tu peux m'envoyé ton code ?
    0
    1. mht
       
      <form method="GET" action="index41.php">
      <table BORDER="1">
      <CAPTION> <?php echo "LISTE DE LA CLASSE ".$tes." ";?> </CAPTION>
      <tr>
      <th><h5>Nom Etudiant</h5></th>
      <th><h5>Prenom Etudiant</h5></th>
      <th><h5>Nom devoire</h5></th>
      <th><h5>Type de devoire</h5></th>
      <th><h5>Note sur <?php echo "".$n." ";?></h5></th>
      <th><h5>Coefficient</h5></th>
      </tr>

      <?php //On affiche les lignes du tableau une à une à l'aide d'une boucle
      while($donnees = mysql_fetch_array($reponse))
      {
      ?>
      <tr>
      <th><input type="text" value="<?PHP echo $donnees["nomet"];?>" readonly name="nometudiant"/></th>
      <th><input type="text" value="<?PHP echo $donnees["prenomet"];?>" readonly name="prenometudiant"/></th>
      <input type="hidden" value="<?PHP echo $donnees['numetud'];?>" name="idetudiant" />
      <th><input type="text" value="<?PHP echo $_POST["ndd"];?>" readonly name="ndd1"/></th>
      <th><input type="text" value="<?PHP echo $_POST["tdd"];?>" readonly name="tdd1"/></th>
      <th><input type="text" value="" class="champs" name="nt"/></th>
      <th><input type="text" value="<?PHP echo $_POST["coefi"];?>" class="champs" readonly name="coefi1"/></th>


      <input type="hidden" value="<?PHP echo $_POST["annee"]."-".$_POST["mois"]."-".$_POST["jour"];?>" name="annee1"/>
      <input type="hidden" value="<?PHP echo $_POST["slm"];?>" class="champs" readonly name="slm1"/>
      <input type="hidden" value="<?PHP echo $_POST["mldn"];?>" class="champs" readonly name="mldn1"/>
      <input type="hidden" value="<?PHP echo $_POST["semes"];?>" readonly name="semes1"/>
      <input type="hidden" value="MOYENNE CC" readonly name="qwer"/>
      <input type="hidden" value="NO RECLAME" readonly name="easy"/>
      <input type="hidden" value="<?PHP echo $_POST["cle"];?>" readonly name="clee"/>
      </tr>

      <?php


      }


      ?>





      <tr>
      <td><a href="index41.php?id=<?php echo $donnees["numetud"];?>"> <input type="submit" value="ENREGISTRER" name="enregistre" /></a></td>
      </tr>
      <tr>
      <?php
      } mysql_close();?>
      </table>

      </form>
      0
    2. mht
       
      j ai utilitser laa methode get (celui la concerne les notes)


      <?php
      $idetudiant = $_GET["idetudiant"];
      $nom= $_GET["nometudiant"];
      $prenom= $_GET["prenometudiant"];
      $devoir= $_GET["ndd1"];
      $categorie= $_GET["tdd1"];
      $note= $_GET["nt"];
      $coef= $_GET["coefi1"];
      $date= $_GET["annee1"];
      $modul= $_GET["slm1"];
      $lnote=$_GET["mldn1"];
      $type=$_GET["qwer"];
      $clas=$_GET["clee"];
      $lol=$_GET["easy"];
      $sem= $_GET["semes1"];
      $ins= $_SESSION["inst"];
      $requete6 = "insert into note values ('','$nom','$prenom','$idetudiant','$devoir','$categorie','$note','$date','$coef','$modul','$lnote','$type','$clas','$lol','$sem','$ins')";
      $execution6 = mysql_query($requete6);
      if($execution6)
      {
      echo "<h3>Vous venez de d'inserer des notes aux etudiant de la classe. <a href='index4.php'>Cliquez ici</a> pour renseigner une note d'evaluation </h3>";

      }

      else
      {
      echo "<p>impossible, revoyer les parametres </p>";
      }
      ?>


      </div>
      0
  6. mandolorien Messages postés 115 Statut Membre 3
     
    il me faudrai le nom de tes champs de ta table ;)
    0
    1. mht
       
      acompt, nomet, prenomet, numetud, nom_dev, note, date_execut, coef, nomm, note_sur, type, nomcl, rec, sem, inst
      0
  7. mandolorien Messages postés 115 Statut Membre 3
     
    ok donc voila je t'ai saisi un script , mais étant donné que je connais presque rien de ton tableau etc , je ne suis pas sur que ca fonctionne , voila test ceci :

    <?php
    	#variables
    	$idetudiant = intval($_GET["idetudiant"]);
    	$nom= $_GET["nometudiant"];
    	$prenom= $_GET["prenometudiant"];
    	$devoir= $_GET["ndd1"];
    	$categorie= $_GET["tdd1"];
    	$note= $_GET["nt"];
    	$coef= $_GET["coefi1"];
    	$date= $_GET["annee1"];
    	$modul= $_GET["slm1"];
    	$lnote=$_GET["mldn1"];
    	$type=$_GET["qwer"];
    	$clas=$_GET["clee"];
    	$lol=$_GET["easy"];
    	$sem= $_GET["semes1"];
    	$ins= $_SESSION["inst"];
    	
    	$num_rows = mysql_num_rows($reponse); #si c'est dans une BDD
    	$num_rows = intval(count($reponse)); #si c'est un tableaux array
    	$QryInsert  = "INSERT INTO note ";
    	$QryInsert  .= "(";
    	for($i=0;$i<=$num_rows;$i++)
    	{
    		if(isset($reponse[$i]))
    		{
    			$QryInsert .= "'acompt',";
    			$QryInsert .= "'nomet',";
    			$QryInsert .= "'prenomet',";
    			$QryInsert .= "'numetud',";
    			$QryInsert .= "'nom_dev',";
    			$QryInsert .= "'note',";
    			$QryInsert .= "'date_execut',";
    			$QryInsert .= "'coef',";
    			$QryInsert .= "'nomm',";
    			$QryInsert .= "'note_sur',";
    			$QryInsert .= "'type',";
    			$QryInsert .= "'nomcl',";
    			$QryInsert .= "'rec',";
    			$QryInsert .= "'sem',";
    			$QryInsert .= "'inst',";
    		}
    	}
    
    	$QryInsert = substr($QryInsert,0,-1);#on enleve le dernier caractere
    	$QryInsert  .= ") VALUE (";
    	for($i=0;$i<=$num_rows;$i++)
    	{
    		if(isset($reponse[$i]))
    		{
    			$QryInsert .= "'".$nom."',";
    			$QryInsert .= "'".$prenom."',";
    			$QryInsert .= "'".$idetudiant."',";
    			$QryInsert .= "'".$devoir."',";
    			$QryInsert .= "'".$categorie."',";
    			$QryInsert .= "'".$note."',";
    			$QryInsert .= "'".$date."',";
    			$QryInsert .= "'".$coef."',";
    			$QryInsert .= "'".$modul."',";
    			$QryInsert .= "'".$lnote."',";
    			$QryInsert .= "'".$type."',";
    			$QryInsert .= "'".$clas."',";
    			$QryInsert .= "'".$lol."',";
    			$QryInsert .= "'".$sem."',";
    			$QryInsert .= "'".$ins."',";
    		}
    	}
    
    	$QryInsert = substr($QryInsert,0,-1);#on enleve le dernier caractere
    	$QryInsert   .= ");";
    	$execution6 = mysql_query($QryInsert);
    


    Admire la personne qui te critique , car prisonniere de ca propre jalousie elle ne fais que t admirer
    0
    1. mht
       
      ok je vais essayer je t y revien ;)
      0
    2. mandolorien Messages postés 115 Statut Membre 3
       
      j'aimerai savoir si c'est stocker dans un tableaux array si oui , tu n'as pas besoin des $_GET :)
      0
    3. mht
       
      c'est dans un tableau <table> avec la boucle While
      0
    4. mht
       
      il y a des erreus avec les lignes suivante :

      $num_rows = mysql_num_rows($reponse); #si c'est dans une BDD
      $num_rows = intval(count($reponse));
      0
    5. mandolorien Messages postés 115 Statut Membre 3
       
      $reponse viens d'ou ? ^^'

      car la je comprend pas trés bien , tes eleves sont stocker ou ? dans une base de données ? si oui ca veux dire qu'il faut faire un Update et non pas un INSERT :)

      eclaire moi le plus possible
      0
  8. mandolorien Messages postés 115 Statut Membre 3
     
    Oupsss , tu pourrais m'expliquer le nom de tes champs de ta BDD ? en particulier :

    acompt,nom_dev,nomm,note_sur,type,nomcl,rec,sem,inst :)
    0
    1. mht
       
      acompt : pour l'auto incrementation
      nom_dev : pour l'intituler du devoire
      nomm : nom du module
      note_sur : la note limite
      type : le type de devoire
      nomcl : le nom de la class
      rec : reclamation
      sem : semestre
      inst : institut
      0
    2. mht
       
      toujours la meme erreure mandolorien :/
      0
    3. mandolorien Messages postés 115 Statut Membre 3
       
      oui je réecris ton fichier :)
      0
    4. mht
       
      ok ;)
      0
  9. mandolorien Messages postés 115 Statut Membre 3
     
    voila j'ai revu ton fichier bien qu'il y a certains points qui ne concordes pas , de ce faite , je suis pas sure que ca fonctionne mais essaye ceci :

    <?php
    session_start();
    // variante 2 : avec localhost
    $link = mysql_connect('localhost', 'root', '');
    if (!$link) {
        die('Connexion impossible : ' . mysql_error());
    }
    else
    {
    	mysql_select_db('ccm', $link) or die('Could not select database.');
    	$tes = "exemple";
    	$n = "20";
    	$reponse = mysql_query("SELECT * FROM note");
    }
    ?>
    	<table BORDER="1">
    		<CAPTION> <?php echo "LISTE DE LA CLASSE ".$tes." ";?> </CAPTION>
    			<tr>
    				<th><h5>Nom Etudiant</h5></th>
    				<th><h5>Prenom Etudiant</h5></th>
    				<th><h5>Nom devoire</h5></th>
    				<th><h5>Type de devoire</h5></th>
    				<th><h5>Note sur <?php echo "".$n." ";?></h5></th>
    				<th><h5>Coefficient</h5></th>
    			</tr>
    <?php //On affiche les lignes du tableau une à une à l'aide d'une boucle
    while($donnees = mysql_fetch_array($reponse))
    {
    ?>
    <form method="post" action="index.php?etudiant=<?PHP echo htmlentities($donnees['acompt']);?>">
    	<tr>
    		<th><?PHP echo htmlentities($donnees["nomet"]);?><input type="hidden" value="<?PHP echo htmlentities($donnees["nomet"]);?>" readonly name="nometudiant"/></th><!-- nom étudiant -->
    		<th><?PHP echo htmlentities($donnees["prenomet"]);?><input type="hidden" value="<?PHP echo htmlentities($donnees["prenomet"]);?>" readonly name="prenometudiant"/></th><!-- nom prénom -->
    		<th><input type="text" name="ndd1"/></th><!-- nom du devoir -->
    		<th><input type="text" name="tdd1"/></th><!-- type du devoir -->
    		<th><input type="text" class="champs" name="nt"/></th><!-- note -->
    		<th><input type="text" class="champs" name="coefi1"/></th><!-- coef -->
    	</tr>
    <tr>
    	<td colspan="6">
    		<center>
    			<input type="submit" value="ENREGISTRER" name="enregistre" />
    			<input type="hidden" value="<?PHP echo htmlentities($donnees['acompt']);?>" name="idetudiant" /><!-- numéro étudiant -->
    		</center>
    	</td>
    </tr>
    </form>
    <tr>
    <?php
    } mysql_close();?>
    </table>
    <?php
    if(isset($_GET['etudiant']) && !empty($_GET['etudiant']) && is_numeric($_GET['etudiant']))
    {
    	// variante 2 : avec localhost
    	$link = mysql_connect('localhost', 'root', '');
    	if (!$link) {
    		die('Connexion impossible : ' . mysql_error());
    	}
    	else
    	{
    		mysql_select_db('ccm', $link) or die('Could not select database.');
    	}
    	# faire une requete si l'utilitaeur existe
    	$verification = mysql_query("SELECT * FROM note WHERE acompt ='".intval($_GET['etudiant'])."'");
    	$verif = mysql_num_rows($verification);
    	if($verif > 0)
    	{
    		if($_GET['etudiant'] == $_POST['idetudiant'])
    		{
    			# est que le bouton à était cliqué
    			if(isset($_POST["enregistre"]))
    			{
    				# est ce que les variables existes
    				if(isset($_POST['tdd1']) && isset($_POST['ndd1']) && isset($_POST['nt']) && isset($_POST['coefi1']))
    				{
    					# estce qu'elles ne sont pas cies
    					if(!empty($_POST['tdd1']) && !empty($_POST['ndd1']) && !empty($_POST['nt']) && !empty($_POST['coefi1']))
    					{
    						$tdd1 = htmlentities($_POST['tdd1'],ENT_QUOTES);
    						$ndd1 = htmlentities($_POST['ndd1'],ENT_QUOTES);
    						$note = intval($_POST['nt']);
    						$coef = intval($_POST['coefi1']);
    						# requete update à faire
    						var_dump($tdd1);
    						var_dump($ndd1);
    						var_dump($note);
    						var_dump($coef);
    					}
    				}
    			}
    		}
    		else
    		{
    			echo "problème , veuillez contacter l'administrateur";
    		}
    	}
    	else
    	{
    		echo "il n'existe pas d'étudiant avec cette ID ! ";
    	}
    }
    else
    {
    	echo "ce n'est pas un nombre";
    }
    ?>
    


    si tu ne comprends pas le code n'hesites pas à me demander , il ne te reste plus que la requete Update à faire :)
    0
    1. mht
       
      ok merci Mandolorien
      0