pk ????
c'est un script générique
et preuve qu'il est très générique, puisque qu'il fonctionne avec jqgrid et avec mes formulaires.
il fonctionne en total transparence, mais rien ne t’empêche de passer des param supplementaire.
par $_GET par exemple.
>>Et pourquoi qu'il s'emmerde à les passer dans un jsonReader si c'est pour finalement les balancer en POST (ou GET) à l'ancienne ?
là, je te donne la permission de réfléchir
et te casse pas la gueule avec ta super moto
a++
]]>En résumé l'id est transmise en POST['id'] et le type d'action SQL (UPDATE, INSERT ou DELETE) en POST['oper'] et les valeurs éventuelles des colonnes en JSON ?
Parce que ce $result = array_merge($_POST, $_GET) me semble assez rock'n roll !
Bon, je vois bien que tu fais le ménage un peu avant avec 4 unset, mais pourquoi ce ramasse-miettes ? Normalement avec l'option mtype on devrait savoir où sont les données, non ?
Et pourquoi qu'il s'emmerde à les passer dans un jsonReader si c'est pour finalement les balancer en POST (ou GET) à l'ancienne ?
Et que contiendra donc $ar['sql'], le code de la requête ?
Ouh là, MK, on se calme, ça fait beaucoup de questions, là !
Sinon, tu es d'accord que puisque le nom de la table est passé en GET dans editurl, on ne peut pas mettre editurl dans le $.jgrid.default({}) ?
Bon de toutes façons je me replongerais dans tout ça demain à Taulé.
Ça y est, j'ai fixé ma belle plaque toute neuve sur ma petite SKYTEAM DAX 125, je n'attends plus que le courriel de mon assureur.
Amike, MoKo.
]]><?php
require_once('init.php');
$path = getcwd().DIRECTORY_SEPARATOR;
$id = isset($_POST['id']) ? $_POST['id'] : 0;
$oper = isset($_POST['oper']) ? $_POST['oper'] : '';
if ($oper > '') unset($_POST['oper']);
unset($_POST['id']);
$fields = array();
$table = isset($_GET['table']) ? $_GET['table'] : '';
unset($_GET['table']);
$pretraitement = isset($_GET['pretraitement']) ? $path.$_GET['pretraitement'].'.php' : '';
$posttraitement = isset($_GET['posttraitement']) ? $path.$_GET['posttraitement'].'.php' : '';
unset($_GET['pretraitement']);
unset($_GET['posttraitement']);
$result = array_merge($_POST, $_GET);
if( $pretraitement>'' && file_exists($pretraitement)){
include_once($path.$pretraitement);
}
if ($oper == 'del') {
try{
$stmnt = "DELETE FROM $table WHERE id=$id";
$count = $connexion->exec($stmnt);
}
catch (Exception $exc) {
$msgerr .= $exc->getMessage();
}
} else {
foreach ($result as $key => $value) {
array_push($fields, "$key = '" . addslashes($value) . "'");
}
$fields_str = join($fields, ', ');
if ($id >= 0) {
try {
$stmnt = "UPDATE $table SET $fields_str WHERE id = $id";
$count = $connexion->exec($stmnt);
} catch (Exception $exc) {
$msgerr .= $exc->getMessage();
}
}
// Si on recoit -1 dans record_id alors c'est une insertion
else {
try {
$stmnt = "INSERT INTO $table SET $fields_str";
$count = $connexion->exec($stmnt);
$id = $connexion->lastInsertId();
} catch (Exception $exc) {
$msgerr .= $exc->getMessage();
}
}
}
$ar = array();
if( $posttraitement > '' && file_exists($posttraitement)){
include_once($posttraitement);
}
$ar['msgerr']=$msgerr;
$ar['path']=$path;
$ar['sql']=$stmnt;
$ar['id']=$id;
echo json_encode($ar);
?>
voila un editurl standart
dans init.php tu fait une connection mysql ($connexion) et se renseigne comme ca :
editurl : 'update_table.php?table=unetable&pretraitement=lenomduficherquiferalepretraitemtsansextension&posttraitement=lenomduficherquiferaleposttraitemtsansextension'
pretraitement et posttraitement son facultatif, seul table est obligatoire.
en retour
msgerr : je comment pas
id : l'id qui a été inseré ou modifié
sql : la requete générée et utilisée pour faire le traitement.
ce script passe dans 100% des cas, tu peux même l'utiliser tel quel
je l'utilise aussi pour mes formulaires et tel quel.
a++
]]>a++
]]>pour update et delete c'est :
editurl : 'lescript.php'
De plus, je te conseille de travailler en JSON plutôt qu'en XML
Ok, Merci pour editurl, je l'avais zappé celui-là.
C'est du XML par défaut, donc il faut modifier l'option datatype:json et sinon le jsonReader type
c'est lui qui le génère pour les (INSERT/UPDATE) ?
Où y trouve-t-on le nom de la page ?
Il faut le passer en GET dans (editurl : 'lescript.php?page='+page) ?
Là, on n'est plus vraiment dans le polymorphisme.
Pour les DELETE on a juste besoin du nom de la table et de l'id de la ligne.
Quels sont les avantages du JSON par rapport au XML ?
]]>editurl : 'lescript.php'
de plus, je te conseil pluto de travailler en JSON plutôt que XML
a++
]]>dans ce cas, tu met un id a zéro ou -1
Ça sera plutôt 0 car je ne sais pas trop les effets que pourraient inférer des ids du genre '-1nom'.
Je pensais effectivement à quelque chose comme ça, Merci.
Sinon, les options seront parfois (souvent) identiques pour tous les grids, je pense à datefmt:"yyyy-mm-dd", hidegrid:false, height:230, loadtext:"traitement en cours", loadui:block | enable | disable, mtype:"POST", scroll:true, toolbar{true,"bottom"}, usw;
Si j'ai bien compris il suffit de faire
Par ailleurs l'option url, définit le script (PHP ici) qu'invoquera AJAX pour récupérer les données auprès du SGBD dans un format XML, ça, ça semble clair.
Mais je n'ai pas encore bien saisi comment se gèrera la mise à jour (INSERT-UPDATE-DELETE), à quel(s) évènement(s) on doit raccorder ces appels AJAX et sous quel format les données sont transmises à PHP.
D'autant que je tiens à conserver le polymorphisme initial.
CM-709-HV, c'est, enfin, l'immatriculation de mon SKYTEAM DAX 125. Ouf !
]]>a++
]]>.navButtonAdd('#'+pagerlistevenement,
{caption:"",
buttonicon:"ui-icon-pencil",
title:"",
cursor: "pointer",
onClickButton: function(rowid){
var id = jqgridevenement.jqGrid('getGridParam','selrow');
if(id){
jqgridevenement.
jqGrid('restoreRow',lastsel3);
jqgridevenement.
jqGrid('editRow',id,true,pickdatesProchainContact);/<--ici
lastsel3=id;
}
}
})
Quand tu demande l’édition de la ligne, tu appel la fonction qui applique de datepicker.
a++
]]>Mais je ne remettrai probablement pas le nez dans cette affaire avant mercredi.
Là je suis en pause déjeuner.
@pluche
vé aller faire un tour en Bretagne moi :D
tu m'invites ?? :D
a++
C'est pas déjà fait ?
Tu sais que tu viens quand tu veux, ici, au moins, il ne neige pas.
Ceci dit, Marckolsheim->Plomodiern on doit friser les 1000 bornes, non ?
Et puis, Marckolsheim, ce n'est pas là qu'il y a une centrale électrique ? T'es pas irradié au moins ? Ah non c'est vrai, c'est de la houille blanche chez toi, c'est à Fessenheim que c'est tout pourri.
Bon, bah bon voyage, alors.
]]>vé aller faire un tour en Bretagne moi :D
tu m'invites ?? :D
a++
L'exemple consiste à gérer dynamiquement une liste de clients dans une seule page HTML. Un client est représenté par un nom, un prénom et un numéro de téléphone. Dès que l'un de ces éléments est modifié à l'écran, une requête Ajax est envoyé au serveur pour que la table clients de la base de données soit mise à jour.
Un bouton Insérer une ligne permet d'ajouter une ligne vierge permettant de saisir les données du nouveau client. En queue, à droite, de chaque ligne figure un bouton Supprimer permettant de supprimer le client de la table de la base de données.
Cinématique de l'application
Au départ, la table clients est vide, à l'écran s'affiche donc uniquement les entêtes des colonnes et le bouton Insérer une ligne.
A l'insertion d'une nouvelle ligne le curseur est positionné directement dans le premier champ de saisie nom.
Les champs de toutes les lignes affichées peuvent être modifiés dynamiquement. Aucun bouton de modification n'est requis, car c'est le fait de quitter le champ de saisie qui provoque la sauvegarde dynamique de la ligne.
L'action sur un bouton Supprimer occasionne la suppression de la ligne à l'écran et dans la table de la base de données.
Lors du rechargement de la page HTML, la liste des clients se ré-affiche telle qu'elle est dans la table de la base de données.
Les différences entre cet exemple et ce que je cherche à en faire :
-. La page contient 8 <div> qui s'affichent dans des onglets gérés par jQuery UI,
-. Chacune de ces <div> permet(-tra) de gérer dynamiquement une des 8 tables de nomenclatures de l'application,
-. Je souhaite que le <tbody> de chacune des <table> soit scrollé au-delà d'une dizaine de lignes, pour ce faire j'essaye d'y incorporer le plugin jQuery tablescroll,
-. Je souhaite que tous les champs de type date fassent appel au datepicker de jQuery UI, (le problème, pour l'instant, réside dans le fait que quand on clique sur un champ de type date d'une autre ligne que la première, le calendrier s'affiche bien au bon endroit, sous le champ, mais c'est toujours le champ équivalent de la première ligne de la table qui est impacté, dommage !),
-. Certains champs résultent d'une sélection dans une liste restreinte ou issue d'une autre table de nomenclature,
-. Certains champs correspondent à des colonnes dans les table de la base de données auxquelles sont éventuellement appliquées des contraintes (NOT NULL ou DEFAULT, par exemple),
-. Bien entendu, c'est le même code PHP, qui génère les <table> en fonction de la structure de la table de base de données représentée,
-. Bien sûr c'est le même code Javascript (jQuerysé) et PHP invoqué par Ajax qui assure les INSERT, UPDATE, DELETE et SELECT en fonction de la table concernée,
-. Évidemment j'essaye de conserver tout cela dans une approche MVC.
On voit que JQGrid prend en charge très proprement l'aspect scroll et ajoute des outils de navigation, voire de recherche, qui pourraient ne pas s'avérer inutiles.
J'aime moins le recours à une popup pour l'édition des lignes (ajout, modif, suppression), les utilisateurs actuels étant habitués à gérer tout cela dans des feuilles de tableurs, l'édition en ligne fait partie du cahier des charges.
Y rencontrera-ton les mêmes difficultés pour y interfacer les champs de type date avec datepicker de jQuery UI ?
Quid des champs à choix multiples ?
Je vois mal comment faire rapidement la synthèse de tout cela avec jQGrid, d'où ma valse hésitation. D'autant que je me rends compte combien tout ce petit monde jQuery est éminemment évolutif et combien ça devient vite la pagaille pour s'y retrouver parmi la foultitude des paramètres, feuilles de style et/ou méthodes (pas toujours explicitement documentés) auxquelles viennent systématiquement s'agréger ceux de jQuery UI et de chacun de ses plugins.
De toutes façons, je vais faire une pause jusqu'à mardi. J'ai ma pelouse à tondre, mes abeilles à nourrir, la belle-mère et sa Dame 4in de fille à promener.
Bref, du taf. Et je n'ai toujours pas reçu l'immatriculation de ma SKYTEAM DAX 125, donc toujours pas de plaque et toujours pas d'assurance. Faut que je m'occupe de relancer tout cela dès lundi.
La vie de retraité, un enfer d'hyper-activité !
]]>