Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

appel de fonction paramétrable ?

38 réponses
Avatar
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)

10 réponses

1 2 3 4
Avatar
mb
In article <1k4qxc3.1g01zop1qutu77N%,
(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
Avatar
mb
In article <1k4qxc3.1g01zop1qutu77N%,
(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
Avatar
unbewusst.sein
mb wrote:

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)
Avatar
Olivier Miakinen
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).
Avatar
unbewusst.sein
Olivier Miakinen <om+ wrote:

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)
Avatar
mb
In article <4e27e51f$,
Olivier Miakinen <om+ wrote:

> 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
Avatar
mb
In article ,
mb wrote:

In article <4e27e51f$,
Olivier Miakinen <om+ wrote:

> > 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
Avatar
Y a personne
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);
Avatar
Bol
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
Avatar
Olivier Miakinen
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.
1 2 3 4