Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1456 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  [RESOLU]Formulaire et tableau: maj table

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[RESOLU]Formulaire et tableau: maj table

n°1492259
piedbleu
Posté le 16-12-2006 à 21:20:24  profilanswer
 

Bonjour,
 
J'ai une table dont la structure est:
 
Champ1   champ2   champ3   champ4   champ5
idunique   id           nom        qte         pu
auto+
 
et remplie par:
 
1           1             art1        12            11
2           1             art2        10            24
3           2             art3        20            40
 
A l'aide d'une requête portant sur champ2=1 par exemple, j'affiche ds un formulaire, sur 3 colonnes et 2 lignes, les données (art1, 12, 11) pour la 1ère ligne et (art2, 10, 24) pour la 2nde ligne.
 
Je souhaite pouvoir modifier, ds le formulaire, l'une ou plusieurs de ces valeurs et mettre à jour ma table.
Les données sont rangées ds un tableau multidimensionnel contenant 3 tableaux - correspondants aux champs 3 à 5.  
 
Mon tableau est correctement rempli mais invariablement ma table contient les 2 mêmes enregistrements! correspondants à la 2nde ligne du formulaire.
 
Je ne comprends pas .... et ça m'escagaceeee légèrement franchement, pourquoi les 2 lignes ne sont pas distinguées.
 
Merci pour vos avis et votre aide, j'apporte des précisions si nécessaire.
 
J'aimerai poster mon code mais je ne vois pas de coloration syntaxique de proposer pour php, comment faire svp?

Message cité 1 fois
Message édité par piedbleu le 17-12-2006 à 17:02:47
mood
Publicité
Posté le 16-12-2006 à 21:20:24  profilanswer
 

n°1492266
naceroth
Posté le 16-12-2006 à 21:55:40  profilanswer
 

piedbleu a écrit :


J'aimerai poster mon code mais je ne vois pas de coloration syntaxique de proposer pour php, comment faire svp?


 
le bouton http://forum-images.hardware.fr/icones/message/c.gif fonctionne aussi pour php :)
 
Sinon, tu identifies tes enregistrements dans le formulaire ?

n°1492274
piedbleu
Posté le 16-12-2006 à 22:33:57  profilanswer
 


Sinon, tu identifies tes enregistrements dans le formulaire ?[/quotemsg]
 
no comprendo la question ... j'affiche un formulaire vide pour enregistrement ds une table et affectation à une variable - mon tableau -;je réaffiche ce formulaire rempli des saisies précédentes; je modifie la saisie, enregistre cette modif ds mon tableau - c'est ok - et mets à jour la table : big pbm.
 
Ci - dessous mon code, très court, seuls les print_r prennent de la place.  
Pour l'exemple je force champ2 à 1 - voir mon 1er post.
 
A nouveau merci pour tte contribution !
 
--- essaitrait.php ---  
- traitement des variables postées et insertion/maj de la table -
 

Code :
  1. <?php
  2.                 include('include/connexion.php');
  3.                 $etape = 0;
  4.                 $idcommande = 1;
  5.                
  6.                 if (isset($_REQUEST['etape']) & !empty($_REQUEST['etape'])) {
  7.                    $etape = $_REQUEST['etape'];
  8.                 }
  9.                
  10.                 if (isset($_REQUEST['idcommande']) & !empty($_REQUEST['idcommande'])) {
  11.                    $idcommande = $_REQUEST['idcommande'];
  12.                 }
  13.                 switch ($etape) {
  14.                                    
  15.                 case "0": // saisie formulaire  
  16.                          $etape = 1;
  17.                          include('essaiform.php');
  18.                 break;
  19.                
  20.                 case "1": // enregistrement et affichage pour modifs  
  21.                          // test contenu de la variable article postée: OK  
  22.                          echo 'contenu de article posté: test ok';
  23.                          echo '<pre>';
  24.                          print_r($_POST["article"]);
  25.                          echo '</pre>';
  26.                          // affectation de la variable postée  
  27.                          for($i=0;$i<=1;$i++){
  28.                          $article["nom"] = $_POST["article"]["nom"];
  29.                          $article["qte"] = $_POST["article"]["qte"];
  30.                          $article["pu"] = $_POST["article"]["pu"];
  31.                          }
  32.                          // test contenu de la variable affectée: OK  
  33.                          echo 'contenu de article affecté: test ok';
  34.                          echo '<pre>';
  35.                          print_r($article);
  36.                          echo '</pre>';
  37.                          // insertion ds la table: OK  
  38.                          for($i=0;$i<=1;$i++){
  39.                          $req1="insert into essaiarticle (idcommande, nom_art, qte, pu )
  40.                          values($idcommande, '{$article[nom][$i]}', '{$article[qte][$i]}', '{$article[pu][$i]}' )";
  41.                
  42.                          $rep1=mysql_query($req1)or die("Enregistrement ds table article impossible" );
  43.                          }
  44.                          echo $idcommande;
  45.                          $etape=2;
  46.                          include('essaiform.php');
  47.                 break;
  48.                 case "2": // maj enregistrement suite modifs de saisie  
  49.                          // affectation suite maj  
  50.                          for($i=0;$i<=1;$i++){
  51.                          $article["nom"] = $_POST["article"]["nom"];
  52.                          $article["qte"] = $_POST["article"]["qte"];
  53.                          $article["pu"] = $_POST["article"]["pu"];
  54.                          }
  55.                          // ICI PROBLEME: REQUETE NON PRISE EN COMPTE - ARRGHHH !  
  56.                          for($i=0;$i<=1;$i++){
  57.                          $req2="UPDATE essaiarticle SET nom_art='{$article[nom][$i]}', qte='{$article[qte][$i]}', pu='{$article[pu][$i]}'
  58.                          WHERE idcommande='$idcommande'";
  59.                          $rep2=mysql_query($req2)or die("MAJ table article impossible" );
  60.                          }
  61.                          
  62.                          echo $idcommande;
  63.                          echo 'contenu de article maj: test OK';
  64.                          echo '<pre>';
  65.                          print_r($article);
  66.                          echo '</pre>';
  67.                          include('essaiform.php');
  68.                 }
  69. ?>


--- essaiform.php ---  
- affichage du formulaire -
 

Code :
  1. <table>
  2.                    <form name="devis" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
  3.                  
  4.                            <?php
  5.                            for($i=0;$i<=1;$i++){    ?>
  6.                    <tr>
  7.                               <!-- saisie refs article -->
  8.                               <td><input type="text" name="article[nom][]" value="<?php echo $article[nom][$i]; ?>" size="30" maxlength="35"></td>
  9.                               <td><input type="text" name="article[qte][]" value="<?php echo $article[qte][$i]; ?>" size="13" maxlength="35"></td>
  10.                                <td><input type="text" name="article[pu][]" value="<?php echo $article[pu][$i]; ?>" size="13" maxlength="35"></td>
  11.                            </tr>
  12.                          
  13.                            <?php      }    ?>
  14.                          
  15.                            <tr>   
  16.                                    <input type="hidden" name="idcommande" value="<?php echo $idcommande; ?>">
  17.                                    <input type="hidden" name="etape" value="<?php echo $etape; ?>">
  18.                      <!--          <td><input type="submit" name="valider" value="Ajouter"></td>     -->
  19.                            </tr>
  20.                          
  21.                            <tr>
  22.                                <td><input type="submit" name="valider" value="Enregistrer"></td>
  23.                            </tr>
  24.                            </form>
  25.                          
  26. </table>


 
 
 

n°1492277
piedbleu
Posté le 16-12-2006 à 22:38:06  profilanswer
 

Le pbm. se situe ds la requête de mise à jour de la table:
essaitrait.php => case "2" => $req2= ...

n°1492279
naceroth
Posté le 16-12-2006 à 22:53:56  profilanswer
 

Bon, il y a déjà un gros problème dans ta boucle

Code :
  1. // affectation de la variable postée
  2. for($i=0;$i<=1;$i++){
  3. $article["nom"] = $_POST["article"]["nom"];
  4. $article["qte"] = $_POST["article"]["qte"];
  5. $article["pu"] = $_POST["article"]["pu"];
  6. }


 
parce que là, à chaque passage dans la boucle, tu écrases ce que le tableau $article contenait déjà => $article["nom"][] = ... et ainsi de suite.
 
Puis la logique même de la mise à jour me semble bancale, la clause where de ton update va mettre à jour de la même manière tous les articles d'une commande ou tu as un idcommande différent pour chaque article commandé ?

n°1492288
piedbleu
Posté le 16-12-2006 à 23:29:44  profilanswer
 

>> tu écrases ....
Ce qui expliquerait qu'après mise à jour ma table contienne les 2 mêmes enregistrements correspondants à la dernière ligne du formulaire?
Ds ce cas la boucle est mauvaise et je veux bien de l'aide car j'ai un gros souci.
.... malgré le fait que $article soit lui correctement affecté : le print_r qui suit l'update.
 
La logique du truc peut surprendre, mais je cherche à faire une mise à jour sur un id non unique : champ2 ds mon exemple. Est ce possible?

n°1492295
piedbleu
Posté le 16-12-2006 à 23:44:14  profilanswer
 

En fait le pbm. est là, tu dis:
 
"" la clause where de ton update va mettre à jour de la même manière tous les articles ... "
 
... oui c'est ce qui se passe et j'ajoute :
pour "tous les articles": tque champ2=1 pour l'exemple.
pour " de la même manière ": avec les valeurs de la dernière ligne.
 
Le fait qu'après mise à jour mon tableau $article soit correctement affecté ET que la maj de la table déconne m'échappe complètement.
 
Comment se fait il que lors de l'update les deux lignes du formulaire ne soit pas distinguées? Je veux bien un coup de main là - dessus!

n°1492301
piedbleu
Posté le 17-12-2006 à 00:13:34  profilanswer
 

Mes excuses pour ces messages en rafale mais qd. on a le nez ds le guidon on ne voit plus la route.
 
Pour reprendre ta remarque sur la boucle Naceroth, la variable $i incrémentée à chaque tour n'apparaît pas ds la boucle elle - même, donc effectivement gros souci - d'où les écrasements? :j'essaie des corrections.
 
Mon aisance avec la gestion des tableaux est finallement tte relative, malgré des lectures attentives de tutos et consultations de forums et faq où ces questions reviennent très souvent, chacun les mettant à la sauce de sa propre appli.
 
Si l'un d'entre vous après avoir survolé le début de cet échange se demande pourquoi s'emmerder avec des indices pour boucler et voit une solution tte naturelle employant de manière limpide des foreach, alors bien sur je ne demande qu'à être irradié de cette lumière.
 
Du reste il n'est pas simple d'intervenir comme ça sur des détails, donc j'en apporte davantage à qui veut :) !
 
 
 
 

n°1492320
naceroth
Posté le 17-12-2006 à 02:50:24  profilanswer
 

Alors j'ai relu le code en étant moins pressé de répondre et j'ai remarqué que j'avais dit une bêtise plus haut, même si tu ne l'as probablement pas fait exprès :D
 
En fait, tu n'as pas besoin de faire une boucle pour ta première boucle (hum, ça veut rien dire cette phrase)

Code :
  1. $article["nom"] = $_POST["article"]["nom"];
  2. $article["qte"] = $_POST["article"]["qte"];
  3. $article["pu"] = $_POST["article"]["pu"];


 
écrire juste ça à la place de la première boucle va copier un tableau dans un élément d'un autre tableau, ce qui explique le print_r correct, le problème est situé dans l'autre boucle.
 

Citation :


Comment se fait il que lors de l'update les deux lignes du formulaire ne soit pas distinguées? Je veux bien un coup de main là - dessus!


 
Comme souvent, la réponse la plus simple est souvent correcte : parce qu'il n'a aucun moyen de les distinguer. Tu fais un update en te basant sur un champs que les deux lignes ont en commun, il faut utiliser un champ unique (le champ1 de ton exemple plus haut) pour différencier les deux lignes.
 
Donc, il te faut modifier le formulaire pour ajouter pour chaque article l'identifiant unique qui va permettre de déterminer quelle ligne modifier et utiliser cet identifiant dans la clause where de ton update.

n°1492395
piedbleu
Posté le 17-12-2006 à 17:02:10  profilanswer
 

OK, vu pour le tableau, je vérifierai.
 
Pour l'id unique je dirai .... hum bon sang mais c'est bien sûr :).
 
Je devrai donc m'en sortir : merci!


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  [RESOLU]Formulaire et tableau: maj table

 

Sujets relatifs
[C] Lire un fichier contenant un tableau de valeursfusionner des cellules dans un tableau en css
Requetes alimentant un formulaire AccessFormulaire de personnalisation de la page
Récupérer le code VBA d'un formulaire Accesslimite d'une table ?
Script FormulaireSoucis avec un tableau
[Résolu] [MySQL] Contenu du répertoire dataformulaire de personnalisation
Plus de sujets relatifs à : [RESOLU]Formulaire et tableau: maj table


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR