- 1
[Opened] __set avec des jDaoRecordBase ?
Posted by peter on 06/08/2009 18:47
Bijour bijour, ça faisait un petit bout de temps que je n'étais pas passé ... une rédaction de thèse, ça prend du temps mine de rien :D
Alors voilà: je suis en train de me faire une chtite page sur laquelle je veux mettre pleins d'indicateurs journaliers. Ces indicateurs sont les propriétés d'enregistrements contenus dans une bases "jours". Rien de bien compliqué donc.
Je veux pouvoir facilement incrémenter/décrémenter ces indicateurs. Je mets donc des "+/-" à côté de chacun. Chaque "+" et chaque "-" appellera donc une fonction dans mon contrôleur pour modifier la propriété adéquate. Le soucis est que j'en ai une chiadée, de ces indicateurs.
Comment donc faire pour n'avoir qu'une seule fonction quelque soit la propriété à updater ? Pour le moment, j'ai fait ça:
function updateIndicator() { // récupération des paramètres $id = $this->param("id"); $indicator = $this->param("indicator"); $value = $this->param("value"); // mise à jour du paramètre $factoryDays = jDao::get("daylog~days"); $today = $factoryDays->get($id); ??? $factoryDays->update($today); // response $rep = $this->getResponse('redirect'); $rep->action = "daylog~default:index"; return $rep; }
Les ??? indiquent le code qui me manque. J'ai essayé à la main (çàd avec des $today->propriété = $value) et ça marche nickel.
Comment échapper au case ? J'ai essayé un vaillant
$today->__set($indicator,$value);
et je pense que mon installation de jelix a du faire partir les papiers de demande de divorce. J'ai remis l'ancien code (à base de case), mais j'attend la lettre de l'avocat ;)
Des idées . Code-je une fois encore avec mon pied coche ? J'ai fait une (unique) rapide recherche sur le forum avec "__set" comme mot-clé, alors tapépa si ça a déjà été expliqué ailleurs svp, un lien suffira :)
http://www.petermeuel.com
[Opened] Re: __set avec des jDaoRecordBase ?
Posted by Julien on 06/08/2009 20:04
Hello,
si $indicator représente le nom de la propriété à mettre à jour, alors simplement
$today->$indicator = $value;
ou un peu plus complet :
if(isset($today->$indicator)){ $today->$indicator = $value; $factoryDays->update($today); }
pour plus ou moins vérifier la validité de la valeur de $indicator
Julien
[Opened] Re: __set avec des jDaoRecordBase ?
Posted by peter on 06/08/2009 22:07
tout simplement ..... pourquoi je n'essaie jamais les trucs simple ?
1001 fois merci Julien :)
http://www.petermeuel.com
[Opened] Re: __set avec des jDaoRecordBase ?
Posted by laurentj on 06/09/2009 10:50
OUai alors là, c'est super dangereux !
Il faut absolument vérifier la valeur de $indicator, qu'elle corresponde bien à un des champs que l'on veut modifier.
Parce que sinon, ça veut dire qu'un petit malin peut passer un autre champs, et qu'il peut alors ecraser des donnés, ou même provoquer des erreurs sql, faire du slq injection etc...
Bref, faire la verification !!
- 1