Champ de BBD interpreté comme string en php

Fermé
juju - 5 sept. 2011 à 15:03
 juju - 7 sept. 2011 à 10:18
Bonjour,

Je suis en train de dévelloper une petite application en php, l'analyse de la situation dans laquelle je me trouve :

Je recuperer en BBD un champ contenant le nom d'une fonction et un second champ contenant une liste d'arguments à cette fonction.

j'obtiens print($mesArgs) = false, true, true

Cependant quand j'appelle : $mafonction($mesArgs)

Mon code met tout dans le 1er argument, je ne sais pas comment faire à part un explode et compter le nombre d'argument et gerer chaque nombre d'argument ce que je ne souhaite pas car très laborieux a reprendre.

Avez vous une solution? ou une fonction php que je n'aurais pas trouvé qui gère ça?

Merci beaucoup!


A voir également:

2 réponses

Bonjour

Quand tu fais $mafonction($mesArgs) , tu passes bien un seul argument à ta fonction, c'est donc parfaitement normal qu'il se retrouve dans le premier paramètre. Ce n'est pas parce qu'il y a une virgule dans une chaîne qu'elle devient plusieurs chaînes.
C'est peut-être embêtant pour ce que tu veux faire, mais je ne vois pas en quoi un explode est très laborieux.
Au fait, comment fais-tu si un de tes paramètres doit contenir une virgule ?
0
bin je trouve ça laborieux dans le sens ou pour l'instant j'ai fais un explode(), je compte le nombre d'occurrence de mon explode et je fais un switch case de 0 à 4 argument, mais le jour ou par exemple j'en ai 6 faudra que je retouche à ça.

par exemple :
       case 1 : $mafonction(eplode[0]);
       case 2 : $mafonction(eplode[0], explode[1]);


Je préfererais trouver un moyen de contruire automatiquement l'appel de la fonction avec un nombre variable d'arguments mais je n'ai pas trouvé de solution pour le moment. J'ai essayer en la contruisant dans une fonction à part mais j'ai le même problème.

C'est surtout ça qui me chagrine et ce que tu me dis me confirme qu'il va être compliquer de pouvoir le faire automatiquement j'imagine?

Une des seules solutions va être de modifier ma BDD pour respecter un argument = un champ me trompe-je?

En ce qui concerne les virgules, je fais en sorte pour ce cas là de ne pas mettre de virgule dans un argument.
0
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
5 sept. 2011 à 17:13
Bonjour,

Je pense que tu peux t'en sortir en utilisant la fonction eval :

eval($mafonction."($mesArgs)");

Xavier
0
Bonjour

À condition de ne pas oublier de ;
eval($mafonction."($mesArgs);");
car l'instruction passée à eval doit être complète, pont virgule compris.

Et il faut être bien sûr du contenu de $mafonction et de $mesArgs, sinon toutes les injections sont permises...
0
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
6 sept. 2011 à 10:10
Merci, je ne l'utilise jamais, du coup je n'avais pas pensé qu'il ait pu vouloir son point-virgule :)
0
De rien.
Moi non plus, je ne l'utilise jamais. C'est pour ça que je n'y avais pas pensé et que je suis allé lire la doc quand j'ai vu ta suggestion
0
Merci beaucoup je ne connaissais pas cette fonction et elle fonctionne parfaitement en ajoutant le mot return juste avant $mafonction pour recuperer la valeur renvoyée, sinon elle reste à NULL.

Merci beaucoup à tout les deux!
0