Ok, en fait le problème vient de ton update lorsque tu as plusieurs enregistrements associés à un $nom_miss :
$req1="UPDATE phases SET
nom_phase='$nom_phase1',
date_debut='$date_debut1',
date_fin='$date_fin1',
pourcentage='$pourcentage1'
where nom_miss='$nom_miss'";
Ne connaissant pas le propos de ton script, ce n'est pas évident à expliquer mais en gros, cet update va mettre à jour tous les enregistrement de ta table "phase" pour lesquels la colonne nom_miss a pour valeur $nom_miss.
Telle qu'elle est conçue, ta boucle va prendre chacune des lignes du formulaire et faire un update de tous les enregistrements en base (pour un même $nom_miss). Le problème c'est donc qu'elle met également à jour la clé primaire de tous les enregistrements. Si par exemple tu as une phase A et une phase B, ta boucle va mettre à jour ces 2 nom_phase avec la valeur A, puis mettre à jour les deux nom_phase avec la valeur B. C'est ce qui provoque l'erreur SQL, puisque tu ne peux pas avoir 2 fois la même valeur pour une clé primaire.
A priori, je dirais que la solution consiste à modifier ta requête SQL pour que la clé primaire soit dans le WHERE, mais je ne sais pas si cela correspond à ce que tu veux faire fonctionnellement :
$req1="UPDATE phases SET
date_debut='$date_debut1',
date_fin='$date_fin1',
pourcentage='$pourcentage1'
where nom_miss='$nom_miss'
and nom_phase='$nom_phase1' ";
Ca ne met plus à jour nom_phase, mais ça l'utilise pour mettre à jour l'enregistrement (c'est l'intérêt d'une clé primaire

)
Ok, en fait le problème vient de ton update lorsque tu as plusieurs enregistrements associés à un $nom_miss :
[php]$req1="UPDATE phases SET
nom_phase='$nom_phase1',
date_debut='$date_debut1',
date_fin='$date_fin1',
pourcentage='$pourcentage1'
where nom_miss='$nom_miss'";[/php]
Ne connaissant pas le propos de ton script, ce n'est pas évident à expliquer mais en gros, cet update va mettre à jour tous les enregistrement de ta table "phase" pour lesquels la colonne nom_miss a pour valeur $nom_miss.
Telle qu'elle est conçue, ta boucle va prendre chacune des lignes du formulaire et faire un update de tous les enregistrements en base (pour un même $nom_miss). Le problème c'est donc qu'elle met également à jour la clé primaire de tous les enregistrements. Si par exemple tu as une phase A et une phase B, ta boucle va mettre à jour ces 2 nom_phase avec la valeur A, puis mettre à jour les deux nom_phase avec la valeur B. C'est ce qui provoque l'erreur SQL, puisque tu ne peux pas avoir 2 fois la même valeur pour une clé primaire.
A priori, je dirais que la solution consiste à modifier ta requête SQL pour que la clé primaire soit dans le WHERE, mais je ne sais pas si cela correspond à ce que tu veux faire fonctionnellement :
[php]$req1="UPDATE phases SET
date_debut='$date_debut1',
date_fin='$date_fin1',
pourcentage='$pourcentage1'
where nom_miss='$nom_miss'
and nom_phase='$nom_phase1' ";[/php] Ca ne met plus à jour nom_phase, mais ça l'utilise pour mettre à jour l'enregistrement (c'est l'intérêt d'une clé primaire :))