envoi de données dans formulaire d'édition

Eléphanteau du PHP | 15 Messages

31 juil. 2009, 10:57

Bonjour,

j'ai créé un formulaire en php. ce formulaire une fois compléter est envoyé dans une bdd.

j'ai de l'autre coté créé un formulaire d'édition qui me renvoi les valeurs de la bdd et que je peux donc modifier.

le formulaire fonctionne bien pour une partie mais une seconde partie n'est pas encore opérationnel.

en fait, j'ai des champs associés à des locuteurs. ces champs correspondent à la table "locuteurs" et il peut en avoir plusieurs.

pour un formulaire je peux avoir plusieurs locuteurs et donc plusieurs champs "id" par exemple.

je veux pouvoir modifier ces données mais ma méthode ne fonctionne pas elle ne prend en compte que le dernier élément du tableau.

voici une partie du code :

formulaire-modification1.php

Code : Tout sélectionner

<?php $requete_locuteurs =mysql_query("SELECT * FROM locuteurs WHERE (`locuteurs`.`id_fiche` = '$id')"); $nombre_loc = 0; while($loc=mysql_fetch_assoc($requete_locuteurs)) { $nombre_loc++; $id_loc=$loc["id"]; echo "<tr><td><b><i>Locuteur $nombre_loc </i></b></td><td bgcolor=\"#006699\"></td></tr>"; echo "<tr><td>Identifiant : </td><td><input type=\"text\" size=\"50\" name=\"id[]\" value=\"$id_loc\"></td></tr>"; } ?>
dans le script ci dessus jaffiche toute les valeurs dépendant du nombre de locuteurs.

formulaire-modification2.php

Code : Tout sélectionner

$id = $_POST["id_fiche"] ; for ($i=0 ; $i < count($_POST["id"]) ; $i++ ) { $id_loc = addslashes($_POST["id"][$i]); // récupère l'id //requete 2 : table locuteurs $sql2 = "UPDATE locuteurs SET id = '$id_loc' WHERE id_fiche = '$id' " ; } //exécution de la requête SQL: $requete2 = mysql_query($sql2, $cnx) or die( mysql_error() ) ;
dans le script ci dessus je tente de modifier ma table locuteurs mais ce code ne modifie que la dernière valeur.
si j'ai deux locuteurs et que je modifie le second en inscrivant Paul les deux champs id correspondant à la fiche auront pour valeur Paul.

merci de votre aide[/code]

ViPHP
ViPHP | 1136 Messages

31 juil. 2009, 11:28

Salut ,

Ton erreur est la suivante ,

$sql2 est redéfini à chaque passage dans ta boucle for , c'est donc effectivement ton dernier enregistrement qui est modifié ...

Ch.

Eléphanteau du PHP | 15 Messages

31 juil. 2009, 12:21

Salut ,

Ton erreur est la suivante ,

$sql2 est redéfini à chaque passage dans ta boucle for , c'est donc effectivement ton dernier enregistrement qui est modifié ...

Ch.
merci

et comment je pourrais faire pour faire un update des valeurs?
je suis un peu perdu

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

31 juil. 2009, 18:58

Tu pourrais peut être exécuter tes requêtes dans ta boucle, au fur et à mesure qu'elles sont générées, plutôt que d'attendre la fin de ton for() et ne faire executer que la dernière requête qui aura été générée ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 15 Messages

06 août 2009, 11:11

j'ai trouvé une solution diférente mais qui fonctionne. en fait je DELETE chaque enregistrements concernés et je fais un INSERT pour chaque.

sa fonctionne.

merci

Mammouth du PHP | 991 Messages

06 août 2009, 13:04

Une tite phrase rien que pour toi :

'J'ai pas réussi a ouvrir la porte , donc j'ai démoli le mur et je l'ai reconstruit'

Bref tu fais 2 opérations aux lieux d'une seul ... pas tres économique ca :D

Bye hawk
DevOps, Symfony4, Hoa

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

06 août 2009, 14:29

Et surtout, le jour où le script ou le serveur plante au milieu de son exécution (genre après les delete, mais avant les insert), tu te retrouves avec une jolie table vide...
tout ça pour pas avoir voulu remonter un mysql_query() de deux lignes...
c'est s'embêter et prendre des risques pour rien si tu veux mon avis...
mais c'est effectivement une solution :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 15 Messages

06 août 2009, 14:29

:D en effet on pourrait aussi dire que la porte etait fermé et que je suis passé par la fenetre

jpense que la structure de ma bdd est la cause du soucis.

en fait elle est comme cela :
- une table fiches
- une table locuteurs

chaque fiche possède 1,n locuteurs
chaque locuteur est rataché a 1,1 fiche

de ce fait pour relier les fiches au locuteurs je recupére l'identifiant de la fiche et je l'insere dans la table locuteurs
voila pourquoi on aura des entrée structuré comme cela dans ma table locuteurs :
id_fiche id_loc
- 1 paul
- 1 lucie
- 2 robert
- ect....


je pense ajouter une table pour lier les fiches au locuteurs et éviter les doublons mais peut etre aurai-je le meme soucis....

si vous arrivez à vous projeter sur ce soucis je suis preneur de vos reflexions

Eléphanteau du PHP | 15 Messages

06 août 2009, 14:33

Et surtout, le jour où le script ou le serveur plante au milieu de son exécution (genre après les delete, mais avant les insert), tu te retrouves avec une jolie table vide...
tout ça pour pas avoir voulu remonter un mysql_query() de deux lignes...
c'est s'embêter et prendre des risques pour rien si tu veux mon avis...
mais c'est effectivement une solution :)

je ne suis pas entrain de proposer une solution qui serait du synonyme de laxisme mais le fait de remonter un mysql_query() de deux lignes ne résoud pas mon problème.