Bonjour,
Effectivement il faut que tu fasse le même genre de chose.
Actuellement, comme tu nomme à chaque fois tes éléments de la même façon dans ta boucle d'affichage (l'input pour la date, la select box pour la présence / non présence / etc), lors de la soumission du formulaire il va se passer la chose suivante :
Le moteur web va récupérer tous les éléments de la page contenu dans ton FORM et les envoyer via le tableau $_POST selon le nom que tu leur as donné, et ce sans ce pré-occupé de savoir si la variable qui a pour nom le nom de l'élément à ajouter existe déjà dans le tableau $_POST ou non. C'est donc pour ça que pour chacune de tes éléments inclus dans ta boucle, tu n'as que la dernière valeur référencée dans ton tableau $_POST lors de la soumission.
Donc une solution est bien d'appliquer la même remarque que pour le problème précédent : nommer individuellement tous tes champs, ce qui passe donc par une concaténation d'un entier (incrémenté) avec le nom des champs.
Exemple:
<?php
$query_users = "SELECT * FROM agent, service, utilisateurs WHERE agent.nservice = service.nservice = utilisateurs.nservice AND lservice = 'informatique'"; // Tri la table agent sur le champs Nservice
$users = mysql_query($query_users, $dbprotect) or die(mysql_error());
$indice = 0;
while( $result = mysql_fetch_object( $users ) )
{
?>
<form action="crea.php" method="post">
<table width="495" border="1">
<tr>
<td width="109">Entrez la Date:</td>
<td width="215"> <input type="text" name="date<?php echo $indice; ?>" size="20"></td>
</tr>
<tr>
<td>Agent:</td>
<td><input type="text" size="10" name="agent<?php echo $indice; ?>" value="<?php echo ($result->nom);?>">
<select name="etat<?php echo $indice; ?>">
<option>Présent</option>
<option>Congès Annuels</option>
<option>Congès Exceptionnel</option>
<option>Mission</option>
<option>Récupération</option>
</select></td>
</tr>
<tr>
<td>Chef de service</td>
<td><input type="text" size="10" name="login<?php echo $indice; ?>" value="<?php echo ($result->login);?>"></td>
</table>
<input type="hidden" name="nservice" value="<?php echo ($result->nservice);?>"
<?php
$indice++;
}
?><br>
<input type="hidden" name="numIndice" value="<?php echo $indice; ?>"/>
<input type="submit" value="valider" name="valider">
</form>
<?php } // fin de l'affichage conditionnel?>
Voilà pour l'affichage. Maintenant il faut adapter ton traitement, c'est à dire récupérer le nombre d'agent via la variable cachée "numIndice" pour pouvoir boucler sur ce nombre afin de faire ce que tu fais déjà mais sur chaque variable nommée "nom" + indice.
Exemple:
<?php require_once('connexion.php'); ?>
<?php
if(isset($_POST['valider']))
{
$indice = $_POST['numIndice'];
$valider=$_POST['valider'];
if ( $indice > 0 ){
for ($i=0; $i < $indice; $i++ ){
$nservice=$_POST['nservice'.$i];
$date=$_POST['date'.$i];
$agent=$_POST['agent'.$i];
$etat=$_POST['etat'.$i];
$login=$_POST['login'.$i];
$requete ="INSERT INTO presence (id,nservice,date,agent,etat,login) values ('','$nservice','$date','$agent','$etat','$login')";
mysql_query($requete);
}
mysql_close();
echo "La date à bien été prise en charge pour les ".$indice." agent";
}
}
else
echo "Merci de bien remplir le formulaire";
?>
Voilà, ton problème devrait être réglé. Le code que j'ai donné n'a pas été testé, il peut donc y avoir des erreurs de syntaxe / recopie, mais l'idée est là. A toi de corriger s'il y a des petites fautes.
~ N'oubliez pas la balise "Résolu" lorsque votre problème est... résolu :) ~