IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Envoi de données dans formulaire d'édition [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2009
    Messages
    330
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2009
    Messages : 330
    Points : 93
    Points
    93
    Par défaut Envoi de données dans formulaire d'édition
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    <?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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    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

  2. #2
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Bonjour,
    C'est que tu exécutes la requête après la boucle for et la requête exécuté c'est la valeur de la dernière itération.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Février 2009
    Messages
    330
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2009
    Messages : 330
    Points : 93
    Points
    93
    Par défaut
    Citation Envoyé par andry.aime Voir le message
    Bonjour,
    C'est que tu exécutes la requête après la boucle for et la requête exécuté c'est la valeur de la dernière itération.
    j'ai testé cela

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    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' " ;
     
    $requete2 = mysql_query($sql2, $cnx) or die( mysql_error() ) ;
     
     
    }
    mais j'ai toujours le même resultat.
    à savoir je ne récupère que la dernière valeur.

  4. #4
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    WHERE id_fiche = '$id'
    La valeur de $id reste inchangé au cour de la boucle donc c'est le seul qui est modifié.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Février 2009
    Messages
    330
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2009
    Messages : 330
    Points : 93
    Points
    93
    Par défaut
    Citation Envoyé par andry.aime Voir le message
    La valeur de $id reste inchangé au cour de la boucle donc c'est le seul qui est modifié.
    alors je te donne un exemple de ce qu'il y a dans ma table

    id_fiche ----- id
    1 =====> paul

    1 =====> gérard


    ma requete doit modifier les champs "id" qui ont le même "id_fiche"
    cet "id_fiche" me permet de savoir à quel fiche les locuteurs sont associés.

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 349
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 349
    Points : 1 460
    Points
    1 460
    Par défaut
    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.
    peux tu donner le schema de tes tables pasque je ne vois pas l'interet d'avoir dans une meme table avec deux id_fiches identique et ton id à paul

    (doublons de ligne...)
    Stay in Bed .. Save Energy

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Février 2009
    Messages
    330
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2009
    Messages : 330
    Points : 93
    Points
    93
    Par défaut
    Citation Envoyé par boo64 Voir le message
    peux tu donner le schema de tes tables pasque je ne vois pas l'interet d'avoir dans une meme table avec deux id_fiches identique et ton id à paul

    (doublons de ligne...)
    je vais tenter d'expliquer la structure de ma bdd :
    - j'ai une table fiches avec mes fiches et leur id_fiche qui sera unique
    - j'ai une table locuteurs qui correspondra au différents locuteurs d'une meme fiche (je récupére l'id_fiche de ma table fiches pour savoir quel locuteur appartient à quelle fiche).

    de ce fait il est normal d'avoir des doublons dans ma table locuteurs.

  8. #8
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 349
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 349
    Points : 1 460
    Points
    1 460
    Par défaut
    non justement il te faut donc une table fiches une table personne et une table personne avec les infos sur la personne et une table locuteurs ou tu as juste associé les id des fiches avec les locuteurs associés ainsi pas de doublons
    Stay in Bed .. Save Energy

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Février 2009
    Messages
    330
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2009
    Messages : 330
    Points : 93
    Points
    93
    Par défaut
    Citation Envoyé par boo64 Voir le message
    non justement il te faut donc une table fiches une table personne et une table personne avec les infos sur la personne et une table locuteurs ou tu as juste associé les id des fiches avec les locuteurs associés ainsi pas de doublons
    d'accord je vois ce que tu veux dire. par contre j'ai du mal à voir si cette rectification va corriger mon problème et si éventuellement la structure actuelle peut faire fonctionner mon code...

  10. #10
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 349
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 349
    Points : 1 460
    Points
    1 460
    Par défaut
    en faite le principe de base dans une table c'est une ligne = un ensemble de données unique donc c'etait pour ca et oui cela va faciliter ensuite la gestion de ta base donc si j'ai bien compris dans ton cas:

    si modifie de la donnée tu n'auras que la table personne à changer l'id de la personnne restant le même ainsi pas besoin de bouclé sur ta table locuteur

    de même si tu modifies des données sur tes fichies ta tables locuteurs qui fait le lien entre les 2 tu en dois la modifier que si tu ajoute supprime ou change un locuteur à une fiche
    Stay in Bed .. Save Energy

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Février 2009
    Messages
    330
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2009
    Messages : 330
    Points : 93
    Points
    93
    Par défaut
    Citation Envoyé par boo64 Voir le message
    en faite le principe de base dans une table c'est une ligne = un ensemble de données unique donc c'etait pour ca et oui cela va faciliter ensuite la gestion de ta base donc si j'ai bien compris dans ton cas:

    si modifie de la donnée tu n'auras que la table personne à changer l'id de la personnne restant le même ainsi pas besoin de bouclé sur ta table locuteur

    de même si tu modifies des données sur tes fichies ta tables locuteurs qui fait le lien entre les 2 tu en dois la modifier que si tu ajoute supprime ou change un locuteur à une fiche
    ok merci pour les explications...
    j'ai beaucoup de rectification à faire c'est ce qui me tracasse un peu.
    non pas le volume mais le fait de changer une grande quantité de code mais je vais le faire.

    à titre informatif j'aimerai tout de même savoir si je peux modifier ma base avec le code que j'ai évoqué..
    merci encore pour t infos

  12. #12
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 349
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 349
    Points : 1 460
    Points
    1 460
    Par défaut
    Non car ton $id et ton $id_loc sortent d'ou dans ta partie traitement du form
    Stay in Bed .. Save Energy

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Février 2009
    Messages
    330
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2009
    Messages : 330
    Points : 93
    Points
    93
    Par défaut
    Citation Envoyé par boo64 Voir le message
    Non car ton $id et ton $id_loc sortent d'ou dans ta partie traitement du form
    le $id correspond à l'id de la fiche dans la table fiche
    pour le $id_loc il correspond à l'id dans la table locuteur (les fameux doublons)

  14. #14
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 349
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 349
    Points : 1 460
    Points
    1 460
    Par défaut
    autant pour moi je n'avais pas vu cette ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	$id_loc = addslashes($_POST["id"][$i]);
    c'est la fin de journée

    mais pour le $id tu l'initialise où?
    Stay in Bed .. Save Energy

  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    Février 2009
    Messages
    330
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2009
    Messages : 330
    Points : 93
    Points
    93
    Par défaut
    avant ma boucle j'initialise

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $id         = $_POST["id_fiche"] ;
    pas de soucis la fatigue arrive pour moi aussi

  16. #16
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 349
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 349
    Points : 1 460
    Points
    1 460
    Par défaut
    le soucis comme le dit andry.aime c'est qu ta boucle ne sert à rien

    "UPDATE locuteurs
    SET
    id = '$id_loc'
    WHERE id_fiche = '$id' " la seul requete sans la boucle te modifiera bien tout les id de ta table locuteurs qui on pour id_fiche $id ;-)

    après change vite cette base et pense à mettre des clé primaires cela t'empêchera les doublons qui sont vraiment à proscrire
    Stay in Bed .. Save Energy

  17. #17
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    383
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 383
    Points : 658
    Points
    658
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    $id = mysql_real_escape_string($_POST["id_fiche"]);
     
    mysql_query("DELETE FROM locuteurs WHERE id_fiche=".$id);
     
    foreach( $_POST["id"] as $locuteur) {
       $locuteur = mysql_real_escape_string($locuteur); // récupère l'id
     
       //requete 2 : table locuteurs
       $sql2 = "INSERT locuteurs(id_fiche,id) VALUES (".$id.",".$locuteur.")";
     
       $requete2 = mysql_query($sql2, $cnx) or die( mysql_error() ) ;
    }
    Je pense que c'est cela que tu desires...

    Cedric
    Un petit si la réponse convient. Merci.

  18. #18
    Membre régulier
    Profil pro
    Inscrit en
    Février 2009
    Messages
    330
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2009
    Messages : 330
    Points : 93
    Points
    93
    Par défaut
    voilà ma solution grace a raptor (j'ai fait quelques modif)

    en fait au lieu de faire un update jefface les ou l'enregistrement et je fais un insert dans la bdd.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    $id = mysql_real_escape_string($_POST["id_fiche"]);
     
    				mysql_query("DELETE FROM locuteurs WHERE id_fiche=".$id);
     
     
     
    				for ($i=0 ; $i < count($_POST["id"]) ; $i++ ) {
     
    					$id_loc = addslashes($_POST["id"][$i]);
    					$nbre_tour_parole = addslashes($_POST["nbre_tour_parole"][$i]);
    					$Loc_principal = addslashes($_POST["Loc_principal"][$i]);
    					$age = addslashes($_POST["age"][$i]);
    					$sex = addslashes($_POST["sex"][$i]);
    					$etude = addslashes($_POST["etude"][$i]);
    					$formation = addslashes($_POST["formation"][$i]);
    					$occupation = addslashes($_POST["occupation"][$i]);
    					$occupationAnt = addslashes($_POST["occupationAnt"][$i]);
    					$role = addslashes($_POST["role"][$i]);
    					$degre_planification = addslashes($_POST["degre_planification"][$i]);
    					$statut_francais = addslashes($_POST["statut_francais"][$i]);
    					$autre_langue = addslashes($_POST["autre_langue"][$i]);
    					$Lieu_naissance = addslashes($_POST["Lieu_naissance"][$i]);
    					$app_regionale = addslashes($_POST["app_regionale"][$i]);
    					$local = addslashes($_POST["local"][$i]);
    					$Particularites = addslashes($_POST["Particularites"][$i]);
     
    					//requete 2 : table locuteurs
    					$sql2 = "INSERT INTO locuteurs(id_fiche,session_login,Statut_corpus,NomFichierSource,id,nbre_tour_parole,Loc_principal,age,sex,etude,formation,occupation,occupationAnt,role,degre_planification,statut_francais,autre_langue,Lieu_naissance,app_regionale,local,Particularites)";
    					$sql2 .= "VALUES('$id','$session_login','$Statut_corpus','$NomFichierSource','$id_loc','$nbre_tour_parole','$Loc_principal','$age','$sex','$etude','$formation','$occupation','$occupationAnt','$role','$degre_planification','$statut_francais','$autre_langue','$Lieu_naissance','$app_regionale','$local','$Particularites')";
     
    					$requete2 = mysql_query($sql2);
     
    				}
    merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 26
    Dernier message: 08/08/2007, 13h33
  2. Réponses: 15
    Dernier message: 10/04/2006, 15h06
  3. ajout donnée dans formulaire
    Par gregius dans le forum Access
    Réponses: 2
    Dernier message: 09/01/2006, 11h12
  4. saisie de données dans formulaire
    Par philpaul dans le forum Access
    Réponses: 4
    Dernier message: 15/09/2005, 13h13
  5. Réponses: 4
    Dernier message: 29/11/2004, 16h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo