salut,
ton code est illisible il faut vraiment fair eun effort de présentation (on utilise des espace une indentation correcte et surtout une déclaration de variables par ligne.
echo "$row2[0]" ? NON => echo $row2[0]; oui tu pas besoin d'utiliser une chaîne de caractères pour cela (sans parler tu coté perf

).
while ($row2 = mysql_fetch_row($result2)) { ;$i++;
tu as un ; en trop
$i ne vaudra jamais zéro hors tu utilise cette index dans la validation.
=> déplacer le $i++ en fin de while (avant la } ).
while ($valeur = mysql_fetch_array($result2)) {
tu écrase tranquillement les valeurs issue du formulaire par celle de la table ...
Tu n'utilise pas correctement les infos de ta requêtes show columns.
Une requête insert c'est : insert into "TABLE"
(les, colonnes, que, l'on, utilise, dans, l'insertion) values ( ... les valeurs ...);
il faut que tu boucle sur les valeur du formulaire (hors mis le bouton) pour créer ta requête sql.
il est import de récupérer cette requête générée afin de pouvoir la tester avec un client SQL (et aussi contrôler par toi même que la requête est correcte).
extract est a proscrire c'est obligatoirement le bordel ensuite. utilise le tableau POST (et vérifie l’existence des champs avant de les utiliser).
tout comme $choix=$_SESSION['choix'] est inutile utilise directement $_SESSION['choix'].
cela apportera de la lisibilité à ton code (on sais d'où viens la valeur pas besoin de fouiller dans le code pour trouver un affectation noyer au milieux du reste).
pour ce qui est des conventions "de codage" voici un exemple
http://pear.php.net/manual/fr/standards.php
@+