2010-12-14 5 views
1

Dans une application PHP que je construis, j'aimerais avoir une table 'éditable'. L'idée est que chaque rangée aura un bouton d'édition, qui, quand on cliquera, remplacera certains champs par des champs de texte et sélectionnera des listes et passera à un bouton de sauvegarde. Lorsque l'utilisateur clique sur Enregistrer, les données de données doivent être validées et modifiées le cas échéant. Je m'occupe principalement de ce projet d'apprentissage (je sais qu'il y a déjà plein de choses à faire) et de voir si je peux faire quelque chose de «cool». J'ai créé une classe produisant des tables PHP qui peut prendre un tableau d'objets en tant que source de données, et peut avoir des colonnes créées en fonction de ces méthodes de classe.Table modifiable en PHP

par exemple.

$table = new Table($dataSource); 
$table->addColumn('Name', 'getName'); 
$table->addColumn('Amount Due', array('getOrdersManager', 'getTotalAmountDue')); //First calls getOrdersManager() on each data item and then calls the getTotalAmountDue() on the result 

Je voudrais essayer ma main à étendre ce pouvoir à la ligne de table et ont ces changements reflètent sur l'objet correspondant dans la source de données.

Je n'ai pas vraiment beaucoup d'expérience avec AJAX, même si cela va jouer un rôle très important pour que cela fonctionne correctement.

Des conseils sur la façon dont je devrais aborder une telle tâche? Editer: Je ne suis pas vraiment intéressé par les bibliothèques Ajax à ce stade (j'ai une certaine expérience avec jQuery). Je suis plus intéressé à apprendre les bases de l'Ajax à ce stade.

+0

http://plugins.jquery.com/project/uiTableEdit peut-être vaut le coup d'oeil – Ross

Répondre

1

mon astuce est d'utiliser jquery (fait la plupart des charges lourdes pour vous et est facile à apprendre).

L'idée est que chaque ligne aura un bouton d'édition , qui, lorsque vous cliquez dessus remplacer certains champs avec texte champs et sélectionnez listes et changer pour un bouton Enregistrer

http://api.jquery.com/click/

Lorsque l'utilisateur clique enregistrer, les données les données doivent être validées et changé si approprié.

http://api.jquery.com/jQuery.post/

1

Certaines choses à prendre en compte/penser:

  • Vous allez envoyer tout changement de champ au serveur, ou seulement toute la ligne (celle-ci est plus de ressources efficace, mais pas nécessairement aussi précis)
  • Comment allez-vous vous assurer que les données affichées restent exactes même si la mise à jour du serveur échoue pour une raison quelconque (soit une panne réseau ou une erreur DB/validation)
  • Comment allez-vous vous assurer que l'utilisateur a l'autorisation de mettre à jour l'enregistrement et que vous n'ouvrez pas un trou de sécurité en autorisant le répondeur AJAX à simplement mettre à jour l'enregistrement auquel il est dit. Mon approche a été que si un enregistrement est affiché dans la table interactive alors l'utilisateur a l'autorisation de le mettre à jour, donc un cache d'ID d'enregistrement est maintenu dans la session lorsque la table est créée. ?Si vous ne le faites pas, une longue table peut contenir beaucoup de HTML en raison de la répétition des contrôles de sélection, mais encore une fois, il est plus efficace de ne pas avoir de requête chaque fois qu'un utilisateur clique dans une liste déroulante. Un compromis pourrait être de mettre les options dans un champ HTML caché et de les charger dynamiquement au bon endroit quand un utilisateur clique sur une liste déroulante
+0

À ce stade, je pense à envoyer à travers la rangée entière (maintenant pour sûr pourquoi ce n'est pas aussi efficace en ressources). – NRaf

+0

Si vous envoyez la ligne, vous envoyez moins de requêtes au serveur, donc plus de ressources. Cependant, vous avez également plus de choses qui peuvent échouer à la validation, vous devez donc faire attention à la façon dont vous gérez les erreurs (donc moins précises). Vous devez vous assurer qu'une ligne n'est jamais laissée en apparence mais contenant des valeurs qui ne reflètent pas ce qui est dans la base de données –

+0

Comment faites-vous le cache des ID? – Dale