|
|
|
#1 (permalink) |
|
Messages: n/a
Hébergeur: |
Bonjour
je travaille avec wamp J'affiche une table article dans un tableau. Chaque ligne correspond à la description de l'article et en fin de ligne , j'ai mis un lien "modifier" qui permet d'ouvrir une boite de dialogue permettant de modifier l'article. Lorsque je valide ce formulaire, je rafraichis mon tableau avec les nouvelles informations. Le probleme est que lorsque j'ai plusieurs centaines d'articles, lorsque je réaffiche la page avec le tableau, j'ai perdu la position de la ligne que je venais de modifier, ce qui fait que si je veux modifier l'article juste au dessus ou en dessous pour modifier un prix par exemple, je dois à nouveau chercher dans tout le tableau. Je peux mettre en évidence le dernier article modifié en mettant la ligne d'une autre couleur, mais il faut quand meme faire du scrolling pour le rechercher. Je sais que le top serait de modifier directement dans le tableau d'affichage sans passer par le formulaire, mais cela me parait depasser mes compétences. Auriez vous des pistes ? merci Jeff |
|
|
|
#2 (permalink) |
|
Messages: n/a
Hébergeur: |
J-F Portala a écrit :
> Bonjour > je travaille avec wamp Wikipedia me dit que ce n'est qu'un package : Apache + PHP + MySql .... un serveur Web à la maison quoi. > J'affiche une table article dans un tableau. > Chaque ligne correspond à la description de l'article et en fin de ligne , > j'ai mis un lien "modifier" qui permet d'ouvrir une boite de > dialogue permettant de modifier l'article. Plus de précision ? Qu'est-ce que c'est que cette boite de dialogue ? (qu'il y a t-il dedans, comment sait-elle qu'on veut modifier l'article et non pas son prix ou la quantité ? comment et où renvoie-t'elle la modif ?) > Lorsque je valide ce formulaire, je rafraichis mon tableau avec les > nouvelles informations. > > Le probleme est que lorsque j'ai plusieurs centaines d'articles, lorsque je > réaffiche la page avec le tableau, > j'ai perdu la position de la ligne que je venais de modifier, ce qui fait > que si je veux modifier l'article juste au dessus ou en dessous > pour modifier un prix par exemple, je dois à nouveau chercher dans tout le > tableau. Ben ! Aussi ! c't'idée de valider alors que c'est pas fini ! Frénétique de la touche Entrée ? > Je peux mettre en évidence le dernier article modifié en mettant la ligne > d'une autre couleur, mais il faut quand > meme faire du scrolling pour le rechercher. > > Je sais que le top serait de modifier directement dans le tableau > d'affichage sans passer par le formulaire, mais cela me parait > depasser mes compétences. Le top, puisque tu sembles en gestion d'un futur formulaire de commande, serait de tout mettre dans un vrai formulaire avec réf, descriptif, prix dans des champs de formulaires qui sont alors directement modifiables. Pour la modif d'affichage : function ecrire(rang, cel, texte) { // cel = N° de cellule de la rangée rang = rang.parentNode; while(rang.tagName!='TD') rang = rang.parentNode; rang.cells[cel-1].innerHTML = texte; } <button onclick="ecrire(this, 2, 'Paire de chaussettes')"> Alors ... par l'exemple : CSS : ..hide { visibility: hidden; height: 0px; overflow: hidden; z-index: 0; } td { position: relative } td div { position: absolute; top: 0; border:1px solid; z-index: 100; } HTML : <form action="articles.php" name="f_art"> <table id="articles"> <tr><th>Ref</th>Desrc.</th><th>Px</th><th>Quant</th><th>Total</th><th>Modif</th></tr> <tr><td><?php echo $Numero[] ?></td><td><?php echo $Descro[] ?></td> ... <tr><td> ... ... ... ... </tr> </table> <input type=submit> </form> dernière cellule de 125ième rangée : (le php devra écrire '125' partout où c'est nécessaire) <td class="modif"> <button onclick="modifier(125)">modifier</button> <div class="hide" id="modif_125"> <p>Article N° : <input name="Num_125" value="125"> - Prix : <input name="Prx_125" value="31.25">€ <input name="Mem_125" type=hidden> <p>Descriptif : <textarea name="Txt_125"> Apprendre le JavaScript, mais c'est facile. </textarea> <input type=button onclick="return modif(125)" value="valider la modification"> <input type=button onclick="return annule(125)" value="annuler la modification"> </div> </td> JS : <script type="text/javascript"> function $(id) { return document.getElementById(id); } function modifier(num) { $('modif_'+num).className = ''; } function modif(num) { var rang = $('articles).rows[num].getElementsByTagName('TD'); var F = document.forms['f_art'].elements; // sauvegarde des originaux F['Mem_'+num].value = F['Num_'+num].value + '|' + F['Txt_'+num].value + '|' + F['Prx_'+num].value; // ecriture des modifs rang[0].innerHTML = F['Num_'+num].value; rang[1].innerHTML = F['Txt_'+num].value; rang[2].innerHTML = F['Prx_'+num].value; $('modif_'+num).className = 'hide'; return false; } function annule(num) { var rang = $('articles).rows[num].getElementsByTagName('TD'); var F = document.forms['f_art'].elements; // récupération des originaux var Mem = F['Mem_'+num].value.split('|'); // ecriture des modifs rang[0].innerHTML = F['Num_'+num].value = Mem[0]; rang[1].innerHTML = F['Txt_'+num].value = Mem[1]; rang[2].innerHTML = F['Prx_'+num].value = Mem[2]; $('modif_'+num).className = 'hide'; return false; } </script> et pour vraiment confirmer tout d'un coup le boutton de submit est après le table Le PHP n'aura qu'à redistribuer à la BdD les données qui sont dans les champs des divs de modification Bon, après on peut compliquer avec une double validation : - réaffichage via PHP pour être sûr que tout est OK - validation pour enregistrement > Auriez vous des pistes ? Sinon, par méthode "fébrile", mettre dans le head : <?php # script php pour récupérer 'num' $num = $POST[ ... ; // ou je ne sais quoi kivabien en php ?> <script type="text/javascript"> var num ='<?php echo $num ?>'; function repere(val) { document.form.num.value = val;} function init() { if(num != '') { num = document.forms['f_art'].elements['Num_'+num]; num.focus(); setTimeout(function(){num.blur();},200); } } window.onload = init; </script> et mettre qque part dans le form : <input type=hidden name="num" value=""> puis dans les boutons de submit de chaque rangée : (exemple rangée N°125) <input type=submit onclick="repere(125);"> Soit en PHP qque chose comme : <input type=submit onclick="repere(<?php echo $Numero[] ?>);"> Le PHP, au retour du formulaire, devra avoir récupéré la variable attachée 'num' et la ré-écrire oussavabien dans le JS du head. -- sm |
|
|
|
#3 (permalink) |
|
Messages: n/a
Hébergeur: |
Le Sat, 22 Mar 2008 10:18:41 +0100, "J-F Portala" <jfportala@free.fr>
écrivait dans fr.comp.infosystemes.www.auteurs: >Le probleme est que lorsque j'ai plusieurs centaines d'articles, lorsque je >réaffiche la page avec le tableau, >j'ai perdu la position de la ligne que je venais de modifier, ce qui fait >que si je veux modifier l'article juste au dessus ou en dessous >pour modifier un prix par exemple, je dois à nouveau chercher dans tout le >tableau. Une solution simple : saisir dans le tableau la date et l'heure de la dernière modification et s'en servir pour afficher les n dernières modifications ou pour repositionner le tableau au même endroit. Denis |
|
|
|
#4 (permalink) |
|
Messages: n/a
Hébergeur: |
Denis Beauregard a écrit :
> Le Sat, 22 Mar 2008 10:18:41 +0100, "J-F Portala" <jfportala@free.fr> > écrivait dans fr.comp.infosystemes.www.auteurs: > >> Le probleme est que lorsque j'ai plusieurs centaines d'articles, lorsque je >> réaffiche la page avec le tableau, >> j'ai perdu la position de la ligne que je venais de modifier, > > Une solution simple : saisir dans le tableau la date et l'heure de la > dernière modification et s'en servir pour afficher les n dernières > modifications ou pour repositionner le tableau au même endroit. J'a rien compris de rien compris ! Comment fais-tu pour te repositionner au "même endroit" ? Tu as une molette automatique et réglée sur ta pendule ? Ceci étant, au rechargement de la même page ça devrait s'afficher pareil qu'avant, non ? Si on avait une url de test ... ce serait plus facile de comprendre-voir de quoi il retourne. -- sm |
|
|
|
#5 (permalink) |
|
Messages: n/a
Hébergeur: |
Le Sat, 22 Mar 2008 20:58:19 +0100, SAM
<stephanemoriaux.NoAdmin@wanadoo.fr.invalid> écrivait dans fr.comp.infosystemes.www.auteurs: >Denis Beauregard a écrit : >> Le Sat, 22 Mar 2008 10:18:41 +0100, "J-F Portala" <jfportala@free.fr> >> écrivait dans fr.comp.infosystemes.www.auteurs: >> >>> Le probleme est que lorsque j'ai plusieurs centaines d'articles, lorsque je >>> réaffiche la page avec le tableau, >>> j'ai perdu la position de la ligne que je venais de modifier, >> >> Une solution simple : saisir dans le tableau la date et l'heure de la >> dernière modification et s'en servir pour afficher les n dernières >> modifications ou pour repositionner le tableau au même endroit. > >J'a rien compris de rien compris ! > >Comment fais-tu pour te repositionner au "même endroit" ? >Tu as une molette automatique et réglée sur ta pendule ? > >Ceci étant, au rechargement de la même page ça devrait s'afficher pareil >qu'avant, non ? > >Si on avait une url de test ... ce serait plus facile de comprendre-voir >de quoi il retourne. D'après ce que j'ai compris du problème, c'est qu'il a une base de données, qu'il édite un élément à la fois, et il voudrait se repositionner au même endroit + 1 une fois que les données ont été saisies. Soit il note quelque part le numéro de la dernière entrée, soit il peut classer par date les dernières modifications comme je suggère. Ensuite, il affiche tout bonnement la position suivant la dernière modif. S'il affiche plusieurs éléments à la fois, il suffirait d'avoir un "set focus" en javascript (mais je ne sais pas comment le faire). Denis |
|
|
|
#6 (permalink) |
|
Messages: n/a
Hébergeur: |
Denis Beauregard a écrit :
> Le Sat, 22 Mar 2008 20:58:19 +0100, SAM > <stephanemoriaux.NoAdmin@wanadoo.fr.invalid> écrivait dans > fr.comp.infosystemes.www.auteurs: > >> J'a rien compris de rien compris ! > > D'après ce que j'ai compris du problème, c'est qu'il a une base de > données, qu'il édite un élément à la fois, et il voudrait se > repositionner au même endroit + 1 une fois que les données ont été > saisies. C'est ce qu'il semble. > S'il affiche plusieurs éléments à la fois, il suffirait d'avoir > un "set focus" en javascript (mais je ne sais pas comment le faire). J'ai compris qu'on était dans ce cas de figure. Je proposais d'entrer dans un hidden le N° de la dernière ligne vue. Le fichier PHP étant supposé, au retour, le re-donner à un JS qui placerait le focus sur un des éléments de la rangée visée. On a bien la même façon de voir la chose. Mais je n'ai pas trop compris l'histoire de la date+heure. -- sm |
|
|
|
#7 (permalink) |
|
Messages: n/a
Hébergeur: |
Le Sat, 22 Mar 2008 23:29:37 +0100, SAM
<stephanemoriaux.NoAdmin@wanadoo.fr.invalid> écrivait dans fr.comp.infosystemes.www.auteurs: >Mais je n'ai pas trop compris l'histoire de la date+heure. L'an dernier, j'avais développé (mais pas terminé) un petit logiciel en PHP pour gérer une liste de liens. Je prévoyais ajouter l'heure du dernier ajout pour annuler les dernières corrections. J'ai répondu avec ce concept en tête. Denis |
|
|
|
#8 (permalink) |
|
Messages: n/a
Hébergeur: |
> Le probleme est que lorsque j'ai plusieurs centaines d'articles, lorsque
> je réaffiche la page avec le tableau, > j'ai perdu la position de la ligne que je venais de modifier, ce qui fait > que si je veux modifier l'article juste au dessus ou en dessous > pour modifier un prix par exemple, je dois à nouveau chercher dans tout le > tableau. Il me semble que tu peux faire ça, tout simplement, avec une "ancre" (http://www.la-grange.net/w3c/html4.0...ks.html#h-12.1). Tu créer un formulaire pour chaque fiche, tu associes une ancre à chaque formulaire et tu mets sur le lien "action" de ton formulaire l'ancre de la fiche suivante. <FORM action="modif_fiches.php#fiche2" method="post" id="fiche1"> ...le formulaire de la fiche n°1... </FORM> <FORM action="modif_fiches.php#fiche3" method="post" id="fiche2"> ... </FORM> -- Fredchou mailto:fredchou@nospam.free.fr.invalid |
|
![]() |
| Outils de la discussion | |
|
|