appel de fonction paramétrable ?

Le
unbewusst.sein
j'ai une string search|save|edit|view et je voudrais qu'elle appelle les
fonctions relatives, par exemple :
do_search(params) | do_save(params) | do_edit(params) | do_view(params)

comment kon fait ?

--
« Qui prête à rire, n'est pas sûr d'être remboursé. »
(Raymond Devos)
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 4
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
mb
Le #23588691
In article (Une Bévue) wrote:

j'ai une string search|save|edit|view et je voudrais qu'elle appelle les
fonctions relatives, par exemple :
do_search(params) | do_save(params) | do_edit(params) | do_view(params)

comment kon fait ?



Bonjour ,

appel d'une fct par son nom ?

h='do_' + nom + '(' + params+ ')';

// nom = search ou edit ou ...
// pour fabriquer do_search(params);

// et

eval(h);

// pour exécuter

j'espere avoir compris la question

--
mb
mb
Le #23588681
In article (Une Bévue) wrote:

j'ai une string search|save|edit|view et je voudrais qu'elle appelle les
fonctions relatives, par exemple :
do_search(params) | do_save(params) | do_edit(params) | do_view(params)

comment kon fait ?



Bonjour ,

appel d'une fct par son nom ?

h='do_' + nom + '(' + params+ ');';

// nom = search ou edit ou ...
// pour fabriquer do_search(params);

// et

eval(h);

// pour exécuter

j'espere avoir compris la question

--
mb
unbewusst.sein
Le #23588951
mb
appel d'une fct par son nom ?



oui, c'est ça.

h='do_' + nom + '(' + params+ ');';

// nom = search ou edit ou ...
// pour fabriquer do_search(params);

// et

eval(h);

// pour exécuter

j'espere avoir compris la question


OUI, farpaitement compris )))

mais n'y a t'il pas moyen de passer par autre chose que eval ?


--
« Qui prête à rire, n'est pas sûr d'être remboursé. »
(Raymond Devos)
Olivier Miakinen
Le #23588941
Bonjour,

Le 21/07/2011 09:55, mb répondait à unbewußt sein :

j'ai une string search|save|edit|view et je voudrais qu'elle appelle les
fonctions relatives, par exemple :
do_search(params) | do_save(params) | do_edit(params) | do_view(params)

comment kon fait ?





switch(string) {
case "search":
do_search(params);
break;
case "save":
do_save(params);
break;
case "edit":
do_edit(params);
break;
case "view":
do_view(params);
break;
default:
//
// traitement d'erreur
//
break; // inutile dans le dernier cas
}

h='do_' + nom + '(' + params+ ');';

eval(h);



Oui, aussi, mais là c'est un peu plus dangereux car il n'y a pas
de contrôle de la licéité de la chaîne (que je suppose venant de
l'extérieur).
unbewusst.sein
Le #23589231
Olivier Miakinen
switch(string) {
case "search":
do_search(params);
break;
case "save":
do_save(params);
break;
case "edit":
do_edit(params);
break;
case "view":
do_view(params);
break;
default:
//
// traitement d'erreur
//
break; // inutile dans le dernier cas
}




OK, super, merci !
> h='do_' + nom + '(' + params+ ');';
>
> eval(h);

Oui, aussi, mais là c'est un peu plus dangereux car il n'y a pas
de contrôle de la licéité de la chaîne (que je suppose venant de
l'extérieur).



ben oui, je me doutais bien qu'eval, c'est pas top !!!

--
« Qui prête à rire, n'est pas sûr d'être remboursé. »
(Raymond Devos)
mb
Le #23589331
In article Olivier Miakinen
> h='do_' + nom + '(' + params+ ');';
>
> eval(h);

Oui, aussi, mais là c'est un peu plus dangereux car il n'y a pas
de contrôle de la licéité



la quoi ?

de la chaîne (que je suppose venant de
l'extérieur).



--
mb
mb
Le #23589921
In article mb
In article Olivier Miakinen
> > h='do_' + nom + '(' + params+ ');';

> Oui, aussi, mais là c'est un peu plus dangereux car il n'y a pas
> de contrôle de la licéité

la quoi ?



ça y est j'ai trouvé ,
mais comment pourrait-elle être illicite ?
elle est formée à partir des éléments donnés
et si "nom" n'existe pas JS ne fera rien ,

je ne vois vraiment pas le problème

--
mb
Y a personne
Le #23589981
Le 21/07/2011 08:13, Une Bévue a écrit :

j'ai une string search|save|edit|view et je voudrais qu'elle appelle les
fonctions relatives, par exemple :
do_search(params) | do_save(params) | do_edit(params) | do_view(params)

comment kon fait ?





Salut,

Voici la méthode propre :


window[tonNomdeFonction](TesParametres);
Bol
Le #23590111
j'ai une string search|save|edit|view et je voudrais qu'elle appelle les
fonctions relatives, par exemple :
do_search(params) | do_save(params) | do_edit(params) | do_view(params)



un truc du genre

function do_( f, p )
{
f = this['do_'+f];
return ( typeof f == 'function' ) ? f(p) : null;
}

do_( 'edit', params );

ou

window.do_( 'edit', params );

ou

element.do_ = window.do_;
element.do_edit = function (p) { /* code */ };
element.do_( 'edit', params );

ou prototype ... etc ...

A+
Bol
Olivier Miakinen
Le #23592641
Le 21/07/2011 13:04, mb a écrit :

> > h='do_' + nom + '(' + params+ ');';



> Oui, aussi, mais là c'est un peu plus dangereux car il n'y a pas
> de contrôle de la licéité



la quoi ?



ça y est j'ai trouvé ,



:-)

mais comment pourrait-elle être illicite ?



Je n'en sais rien, n'ayant pas le code complet. En outre, même si
j'avais le code complet à la date du 21 juillet 2011, et si je
pouvais prouver qu'elle n'a aucun moyen d'être illicite aujourd'hui,
qu'est-ce qui prouve qu'un changement mineur fait dans un coin en
février 2013 ne pourrait pas ouvrir une faille dans ce bout de code
oublié depuis longtemps ?

elle est formée à partir des éléments donnés



Donnés par quoi ou par qui, ces éléments ? Si cela vient d'un
formulaire, il n'y a rien de plus facile que d'envoyer une
valeur non prévue par ledit formulaire.

et si "nom" n'existe pas JS ne fera rien ,



Ah ? Même s'il existait quelque part une fonction do_resetall,
censément jamais appelée sauf par un script privé, et dont la
tâche consiste à effacer l'ensemble des bases de données ?

je ne vois vraiment pas le problème



C'est généralement le cas de toutes les failles de sécurité : on
ne voit pas où est le problème avant qu'elles aient été exploitées
par une personne malveillante.

Du coup, le principe de base de toute programmation un tant soit
peu « défensive », c'est de verrouiller au départ tout risque de
comportement imprévu. D'où le switch qui recense tous les cas
possibles, avec un traitement d'erreur pour les cas non prévus.
Publicité
Poster une réponse
Anonyme