|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 | |
|
Invité de passage
![]() Inscription : juin 2010 Messages : 27 ![]() |
Bonjour,
je suis en train d'effectuer mon Projet de Fin d’Étude qui consiste a développer une application php. voici mon problème: Un utilisateur doit entrer une formule dans un formulaire et puis je dois calculer cette formule,voici un exemple de formule: Citation:
2)MoyenneMath,MoyenneS1, MoyenneS2, age et NotePFE sont des champs de la base de donnée 3)la longueur de la formule est variable et voici ma solution(que je trouve pas satisfaisante): 1)demander a l'utilisateur le nombre des operateurs/operandes(exp:N) présent dans la formule 2)lui afficher N inputs de type select soit contenant les champs possible(MoyenneMath,age, ...) soit contenant des opérateurs ==>eviter les fautes de frappes en plus facile a calculer la formule j’espère que j'ai été claire et j'espère que vous pouvez m'aidez |
|
|
|
00
|
|
|
#2 |
|
Membre émérite
![]() Développeur Inscription : août 2010 Messages : 587 ![]() |
pourquoi pas faire une sorte de calculatrice en ajoutant des boutons correspondant aux champs de ta base en plus des boutons classiques (+, -, *, 0, 2, (,...) avec une texte area qui afficherai la formule au fur et à mesure que l'opérateur clique sur les boutons...?
__________________
Développeur informatique contrarié... |
|
|
10
|
|
|
#3 |
|
Invité de passage
![]() Inscription : juin 2010 Messages : 27 ![]() |
merci vorace pour la réponse,
en effet,ta solution est très proche de la mienne,je pense pas que j'arriverai a les appliquer car: après avoir utiliser cette calculatrice,la formule introduite(le résultat) sera présente dans un input "Text" par exemple,ensuite je doit appeler une fonction "CalculerFormule" qui reçoit en paramètre une variable "$Formule" et une autre "$IdEtudiant" qui permet de calculer la formule passer en paramètre pour l’étudiant donné et retourne le résultat. la question est comment appliquer la formule qui est une chaine de caractères? |
|
|
00
|
|
|
#4 | ||
|
Expert Confirmé
![]() Inscription : janvier 2010 Messages : 2 709 ![]() |
Salut
Le principe de la calculatrice qu'à suggéré Vorace me parais pourtant une bonne solution, car on évite justement que l'utilisateur ne saisisse une chaine, avec tous les éventuels erreurs, et les possibilités tel que MoyenneMath/MoyMath qui ne font que rajouter de la complexité pour rien. Pour ça, Javascript serait fort utile. En gros, imaginons que coté interface/graphique on simule une calculatrice, dont chaque bouton représente la donnée à générer. un bouton "MoyMath" -> va générer MoyenneMath un bouton"(" -> va générer l'ouverture d'une parentèse -> ) -> fermeture d'une parentèse -> idem pour + - * / etc, etc ... tout ce qu'il faut en faite. Ensuite, pour aider l'utilisateur, on crée une zone de texte qui sera là juste pour visualiser les opérations (comme une calculatrice), du coup, même avec l'impossibilité de saisir quoi que ce soit (on rajoute : readonly="readonly"). Et bien chaque click sur un des bouton va déclencher la fonction JS en relation, et ces fonctions génèreraient des champs cachés avec sa valeur, mais aussi va rajouter cette même valeur dans le champ texte. Un 1er click sur le bouton : ( Puis sur : MoyMath Puis : + On génèrerait successivement : Code :
Et à la validation, on recevra en POST un tableau du nom de "formule", et une simple boucle foreach permettra de générer la chaine de requête finale. Obtenir tout ça dans un tableau est un gros avantage à mon sens, ça évite des successions de REGEX souvent complexes pour vérifier si tout ça est permis et cohérent. C'est une idée.
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20 Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra] |
||
|
|
00
|
|
|
#5 |
|
Membre émérite
![]() Développeur Inscription : août 2010 Messages : 587 ![]() |
une fonction java sur l'événement onclick de chaque bouton avec un innerHTML qui écrira dans le champs texte le nom du bouton correspondant qui sera au fait le nom de tes champs de bdd avec en plus un champs hidden dans le quel tu écris la même chose mais avec un '$' devant chaque nom, une fois validé tu récupère le contenu du champ, tu effectues tes requêtes pour récupérer tes champs que tu affectes à des variables de même nom que celles contenues dans ton input hidden et avec cette ligne ca devrai être bon :
Code :
eval('$result ='.$_POST['calcul'].';'); RunCodePhp m'a devancé de quelques minutes mais l'idée est la même et la sienne me parait plus propre...
__________________
Développeur informatique contrarié... |
|
|
00
|
|
|
#6 |
|
Expert Confirmé
![]() Inscription : janvier 2010 Messages : 2 709 ![]() |
@vorace
Un eval sur une donnée en POST ... mouais ... Est-ce si compliqué que ça de générer des champs cachés qui au bout donne un bon vieux tableau : $_POST['formule'][0] -> ( $_POST['formule'][1] -> MoyenneMath $_POST['formule'][2] -> + ... etc ...
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20 Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra] |
|
|
00
|
|
|
#7 |
|
Membre émérite
![]() Développeur Inscription : août 2010 Messages : 587 ![]() |
@RunCodePhp
j'ai bien dit : Code :
calcul étant le nom de l'input hidden...je sais c'est pas très simple et cette ligne niveau sécurité c'est pas top mais bon...ca devrait marcher. et il est vrai que implicitement je supposais en dépit de la loi de Murphy que l'appli serait en intranet et que l'utilisateur ne serait pas assez tordu pour tenter quoi que ce soit...
__________________
Développeur informatique contrarié... |
|
|
00
|
|
|
#8 | ||
|
Expert Confirmé
![]() Olivier Développeur Web Inscription : août 2003 Messages : 1 837 ![]() |
J'aurais même tendance à dire un eval tout court ^^
Puisque les données à calculer semble extraite d'une bdd et si cette application n'a pas d'impératif de sécurité , le fait de cliquer sur les boutons de la calculette (idée qui me semble également intéressante) pourrait simplement construire la requete de calcul. Lorsque l'on appui sur égale cela execute simplement la requête du genre : Code :
|
||
|
00
|
|
|
#9 | |
|
Expert Confirmé
![]() Inscription : janvier 2010 Messages : 2 709 ![]() |
Citation:
Mais franchement, faire un eval() c'est à mon sens du dernier (dernier) recourt. Si on peu l'éviter, ça sera toujours mieux, peu importe le contexte (Internet/Intranet).
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20 Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra] |
|
|
|
00
|
|
|
#10 |
|
Membre émérite
![]() Développeur Inscription : août 2010 Messages : 587 ![]() |
@RunCodePhp et @grunk
je me doute de la dangerosité de la fonction mais ce qui m'étonne c'est qu'elle existe...
__________________
Développeur informatique contrarié... |
|
|
00
|
|
|
#11 | |
|
Invité de passage
![]() Inscription : juin 2010 Messages : 27 ![]() |
Salut RunCodePhp,
merci pour l'idée mais la question qui se repose est comment utiliser la formule dans ma fonction "CalculerFormule" ? j'explique : Citation:
|
|
|
|
00
|
|
|
#12 | |
|
Expert Confirmé
![]() Inscription : janvier 2010 Messages : 2 709 ![]() |
Citation:
(certains me diront que oui )(je déconne Plus sérieusement, on sait pertinemment que ce n'est pas à faire, voir totalement à éviter, et bien évitons le, et plus particulièrement donner ça comme solution sur un forum. De ton coté, tu fais comme tu veux, vois tu. Enfin, c'est ma façon de voir.
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20 Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra] |
|
|
|
00
|
|
|
#13 | ||
|
Expert Confirmé
![]() Inscription : janvier 2010 Messages : 2 709 ![]() |
Admettons que tu opte pour la solution que chaque données obtenues soient dans un tableau (solution que j'ai donnée).
Ensuite, je dirais qu'il ne faudrait pas te focaliser sur ta fonction, tout n'est peut être pas prévu pour. Si dans les données reçues il y certaines qui réclame d'obtenir des valeurs, comme "age", et bien pourquoi pas te faciliter la tâche à lancer une requête pour récupérer cet age. Théoriquement, l'ID de l'utilisateur tu dois l'avoir. S'il y a d'autres valeur liées à cet utilisateur, faudra en profiter. Sinon, s'il y a d'autre valeurs comme "MoyMath" qui vaut 10, alors à toi de lui affecter cette valeur. En tout cas, le fait que les données soient dans un tableau, donc individualisées c'est justement tout l'avantage. On peut tout faire, tout analyser une par une. Par exemple faire un 1er parcourt du tableau SI "age" ALORS ... pour obtenir : $formule['age'] = 20 SI autre ALORS .......... $formule['autre'] = 10 Pure exemple, j'en sais trop rien. A savoir aussi que rien t'empêche de générer directement ces différentes valeurs au moment de cette 1ère étape qu'est la calculatrice. Là encore l'utilisateur et les autre valeurs sont théoriquement connues. Donc coté Javascript, au lieu de générer comme valeur "age", on génère directement ->20 Idem pour MoyMath -> 10 Ce qui sous entend que la valeur de la formule pourrait ce faire de suite, sans même avoir besoin de recharger la page. On peu par exemple générer en Php du Javascript avec des valeurs comme : Code :
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20 Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra] |
||
|
|
00
|
|
|
#14 |
|
Membre émérite
![]() Développeur Inscription : août 2010 Messages : 587 ![]() |
@RunCodePhp et @grunk :
juste pour recadrer les choses : je ne suis officiellement développeur informatique que depuis septembre 2010 et auparavant j'avais des études de bio...tout ca pour dire que je n'ai pas suffisamment trainer dans le milieu pour me rendre compte de l'énormité de ma suggestion (j'entends par la l'utilisation de eval()) comparable à 'escherichia coli' est un virus...) cela ne m'empêche pas d'essayer d'aider les autres du mieux que je peux et ce qui m'incommode le plus sur les autres forums en tout genre c'est 'les piliers de forum' (et pour ceux qui n'aurait pas saisi la métaphore : piliers de barre) plein de sarcasme qui scrute les forums juste pour dénigré, je ne pense pas que sur ce forum ils existent de tel énergumènes...
__________________
Développeur informatique contrarié... |
|
|
00
|
|
|
#15 | |
|
Expert Confirmé
![]() Olivier Développeur Web Inscription : août 2003 Messages : 1 837 ![]() |
Citation:
Pour en revenir au sujet, je reste assez persuadé que l'idée de construire la requête en "live" sans passer par des variables temporaires me semble le plus simple |
|
|
00
|
|
|
#16 |
|
Membre émérite
![]() Développeur Inscription : août 2010 Messages : 587 ![]() |
au risque de vous faire rire à nouveau et d'être accusé de sortir l'artillerie lourde :
pourquoi pas de l'ajax ? pour récupérer la valeur du champ correspondant au bouton cliqué...
__________________
Développeur informatique contrarié... |
|
|
00
|
|
|
#17 |
|
Expert Confirmé
![]() Olivier Développeur Web Inscription : août 2003 Messages : 1 837 ![]() |
Ajax pourrait être utile au moment du calcul final pour ne pas recharger la page. Avant du javascript suffit.
|
|
00
|
|
|
#18 |
|
Invité de passage
![]() Inscription : juin 2010 Messages : 27 ![]() |
Tout d'abord,je vous merci tous pour vos réponses
je veut vous préciser que l'application(pour mon PFE) que je suis entrain de développer est une application de "gestion de concours Nationaux",elle contient 2 grandes parties,la 1ere pour les Admins(qui est aussi divisée en 2,Supers Admins et Simples Admins) et la 2eme pour les utilisateurs(étudiant ou pas) 1)l'une des taches que peut faire un Super Admin est d'ajouter des nouveaux concours (libellé,date début,FORMULE,SeuilMin,...) FORMULE==>je l'ai déjà expliqué SeuilMin==>c'est le minimum pour être accepter dans ce concoure 2)les étudiants s’inscrivent dans des concours==>j'applique la formule pour l’étudiant (normalement j'appelle ma fonction"CalculerFormule") $res=CalculerFormule($formule,$CinEtudiant) IF ($res >=SeuilMin) //alors je l'enregistre dans ma table "inscription" ELSE //l’étudiant n'est accepté dans ce concoure,je lui affiche un msg ![]() 3)Le calcule de la résultat ce fait par un SuperAdmin à la fin du délais de l'inscription au concoure(pas de problème a ce stade Remarque:L'utilisation d'une calculatrice pour entrer la formule se fait par un admin lors d'un ajout d'un nouveau concoure et le calcule de la résultat se fait dans une autre étape ==>on peut pas utiliser le calcule en "live" je suis encore bloqué a ce stade et j’espère que vous pouvez m'aider |
|
|
00
|
|
|
#19 |
|
Membre émérite
![]() Développeur Inscription : août 2010 Messages : 587 ![]() |
dans ce cas ce que je te proposes c'est une table en bdd qui référencie toutes les fonctions avec un id et un nom contenues sur un fichier fonctions.php et qui sera inclu dans les pages ou tu en as besoin, pour la création de la fonction ca se corse un peu car les utilisateurs ne connaissant pas php doivent pouvoir via une interface relativement simple créer cette fonction que tu te chargera t'implémenter en php et que tu iras écrire dans le fichier fonctions.php, l'interface contiendra bien sur les champs de la bdd qui rentrent dans le calcul sous forme de boutons pour éviter les fautes de frappe, l'idée de la calculatrice reste valable et est le meilleur moyen de garder un contrôle sur la saisie, une fois la fonction crée tu la testes avant de l'enregistrer en base et de l'écrire sur le fichier fonctions.php...(plus je développe l'idée, plus je me rends compte que c'est 'velu' comme idée...)
voila, bon courage...
__________________
Développeur informatique contrarié... |
|
|
00
|
|
|
#20 |
|
Invité de passage
![]() Inscription : juin 2010 Messages : 27 ![]() |
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com