exécuter une fonction dynamiquement

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : exécuter une fonction dynamiquement

Re: exécuter une fonction dynamiquement

par SimonBHB » 07 mars 2015, 00:12

J'aurais juste aimer ne pas avoir la chaine dans l'url, peut être avec une session ? Les données sont en session et si elle existe pas je remets l'url complète pour refaire la session ? Ca fait "salle" dans le code^^

Re: exécuter une fonction dynamiquement

par xTG » 06 mars 2015, 14:36

Pas de souci avec l'url.
Si l'url ne change pas le navigateur va mettre son contenu en cache.

Re: exécuter une fonction dynamiquement

par SimonBHB » 06 mars 2015, 13:03

C'est pas grave si je génère du css avec une adresse de ce type ?

Code : Tout sélectionner

http://data.***.fr/css/dynamique/progressbar.php?donnees=eyJjbGUiOiJsaXN0ZV8yIiwiY291bGV1ciI6ImRlZmF1dCIsIndpZHRoIjo1MCwiaGVpZ2h0IjoxNCwidW5pdHdpZHRoIjoiJSIsInVuaXRoZWlnaHQiOiJweCJ9
PHP génère le css a chaque fois, mais le navigateur lui, si l'url change pas va sauvegarder le css et plus le redl ?

Re: exécuter une fonction dynamiquement

par SimonBHB » 05 mars 2015, 20:36

Merci, c'était tout bête, comme ça j'ai plus besoin de l'array^^, car parfois quand je le manipulais ça exécutait certaine chose plusieurs fois :twisted:

Sinon c'est exécuté que par moi, en gros c'est un système qui génère un CSS dynamique ou qui permet juste de charger certaines parties. Et j'ai plusieurs systèmes qui me génèrent des erreurs en rouge si le CSS demandé existe pas...

On peut réduire ça en une ligne ?

Code : Tout sélectionner

$get_css_array = $this->get_css_array(); $get_css_array = $get_css_array[1]
EDIT:
J'ai essayé et ça marche:

Code : Tout sélectionner

krumo( $this->get_css_array()[0] );
C'est top, ça fait en une ligne ce que je fais d'habitude en deux^^.


@jojolapine => pour le CSS dynamique il va falloir que je le transmette sous form de chaine genre json a mon script qui va générer le css.
En gros je vais avoir ma class qui s'occupe de tout vérifier et afficher les css choisit avec la balise html link et pour le css dynamiques mêmes choses sauf qu'il y aura des paramètres dans l'url pour générer le css.

Par contre avant je générais chaque css que je sauvegardais et ensuite je compactais le CSS dans un seul fichier pour éviter que PHP génère le fichier à chaque fois, mais ça m'oblige à supprimer les fichiers pour les regénérer, donc je ne sais pas ce qui est le plus pratique

Re: exécuter une fonction dynamiquement

par Ryle » 05 mars 2015, 20:23

Si tu maîtrises les valeurs utilisées dynamiquement et que ces informations ne sont pas fournis par les utilisateurs ou qu'elles sont bien cernées, tu peux aussi simplement utiliser la fonction eval() de php.

Il te suffit alors de construire ton instruction php sous forme de chaine de caractères (tu peux ainsi facilement inclure la clé de ton tableau dans le nom de ta fonction) et évaluer celle-ci comme s'il s'agissait d'une instruction php.

Il faut cependant pour cela bien contrôler les éléments qui seront donnés à évaluer afin qu'aucun utilisateur ne puisse y injecter de code php qui pourrait nuire à ton site.

Re: exécuter une fonction dynamiquement

par jojolapine » 05 mars 2015, 20:15

Bonjour,

Tu peux utiliser cette syntaxe :
$css_fonction = 'get_css_'.$value;
echo $this->{$css_fonction}(true);
Par contre tu ne peux pas gérer les arguments comme tu l'as fait.
Tu peux en revanche envisager de passer un tableau de paramètres :
$functions_and_params = array(
    'table' => array( 'name'=>'get_css_table','args'=>array('arg1',2,true))
);

$key = "table";

if(method_exists($this, $functions_and_params[$key]['name'])){
    $this->{$functions_and_params[$key]['name']}($functions_and_params[$key]['args']);
}
Je ne sais pas quel est le but final, mais tu peux regarder également du coté des méthodes magiques : http://php.net/manual/fr/language.oop5. ... bject.call
Et également du coté de call_user_func : http://php.net/manual/fr/function.call-user-func.php

Bon courage !

Re: exécuter une fonction dynamiquement

par tof73 » 05 mars 2015, 20:11

un exemple trouvé sur un site :
class Bar {
function foo(){
echo __METHOD__;
}
}
$bar = new Bar();
$foo = 'foo';
$bar->$foo(); //affiche Bar::foo

il manque donc () à ton code.

exécuter une fonction dynamiquement

par SimonBHB » 05 mars 2015, 20:02

Bonjours,

En gros j'ai un array avec des fonctions du genre:
"table" => $this->get_css_table()
Pour exécuter des fonctions dynamiquement j'aimerais faire comme ça:

Code : Tout sélectionner

$css_foncion = 'get_css_'.$value.'(TRUE)'; // Local echo $this->$css_fonction;
Le problème c'est que j'ai l'erreur:
Notice: Undefined property: css_extends_dev::$get_css_table() in

On peut régler ça ? Je ne vois pas de solution