IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

appliquer une formule


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Femme Profil pro
    Etudiant informatique
    Inscrit en
    Mars 2012
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Etudiant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2012
    Messages : 86
    Par défaut appliquer une formule
    salut,
    Bon j'ai un problème mais j'ai pas trouver d'idée pour le résoudre.
    Je suis en train de développer une application permettant de calculer la moyenne d'un module de cours contenant plusieurs matières.
    Mais la formule de calcul doit être choisie par l'utilisateur, il doit introduire la formule dans un champs textarea par exemple il introduit:
    (programmationC+2*programmationweb)/3
    donc pour moi je doit , pour chacun des étudiants remplacer le nom du cours par la notes existant dans ma base de données et appliquer la formule. mais je trouve pas d'idée.
    ya quelqu'un qui a autre manière de le faire!!

  2. #2
    Membre Expert Avatar de Marc3001
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2008
    Messages
    829
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2008
    Messages : 829
    Par défaut
    Ben l'idée est bonne.

    Tu utilises des tags dans ta formule comme tu l'as fait : programmationC, programmationWeb,...

    Ensuite, quand tu dois calculer ta formule pour un élève, tu remplaces dans celle-ci tes tags avec les notes de l'élève avec par exemple la fonction str_replace.

    Enfin tu la calcules grâce à la fonc tion php eval.

    Attention tout de même à bien blinder la formule que tu vas mettre dans ton eval, c'est potentiellement super dangereux.

  3. #3
    Membre confirmé
    Femme Profil pro
    Etudiant informatique
    Inscrit en
    Mars 2012
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Etudiant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2012
    Messages : 86
    Par défaut appliquer une formule
    le problème qui se pose en appliquant cette idée
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <?php
    while($ligne=mysql_fetch_assoc($resultat))
    if(EREG($ligne["shortname"],$newformule))
        {
    	$grade=$ligne["finalgrade"];
    	$nom=$ligne["shortname"];
    	$calcul=ereg_replace($nom,$grade,$newformule);
    	echo $calcul.'<br>';
    	}
    finalgrade: c'est la note
    shortname: c'est le nom du cours
    newformule: c'est la formule saisie par l'utilisateur
    Lors du remplacement des tags par les notes, ils ne se remplacent pas tous à la fois mais ça se fait comme ça:
    Nom : aperçu.PNG
Affichages : 79
Taille : 8,2 Ko
    je ne sait pas pourquoi ils ne se remplacent pas tous à la fois !!!
    y a quelqu'un qui sait pourquoi?? ou a d'autre méthode pou le faire ??

  4. #4
    Membre Expert Avatar de Marc3001
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2008
    Messages
    829
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2008
    Messages : 829
    Par défaut
    Outre le fait que les fonction ereg et ereg_replace sont obsolètes et donc à éviter, pourquoi utiliser des fonctions de recherche d'expressions rationnelles?
    Tu n'utilises aucune expression rationnelle.

    Utilise plutôt str_replace et supprime ta condition qui ne sert à rien.

  5. #5
    Membre confirmé
    Femme Profil pro
    Etudiant informatique
    Inscrit en
    Mars 2012
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Etudiant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2012
    Messages : 86
    Par défaut appliquer une formule
    comme ça??
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    while($ligne=mysql_fetch_assoc($resultat))
    	$grade=$ligne["finalgrade"];
    	$nom=$ligne["shortname"];
    	echo str_replace ($nom,$grade,$newformule);
    Je pense que je me trompe dans syntaxe car ça ne fonctionne pas ! nn?

  6. #6
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 051
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 051
    Par défaut
    La doc de str_replace.

    Sinon il manque pas des accolades après ton while ?

  7. #7
    Membre Expert Avatar de Marc3001
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2008
    Messages
    829
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2008
    Messages : 829
    Par défaut
    Citation Envoyé par yawra Voir le message
    Je pense que je me trompe dans syntaxe car ça ne fonctionne pas ! nn?
    Il manque les accolades du while sinon c'est bien l'idée.

    Si tu ne donnes pas l'erreur on va pas pouvoir t'aider beaucoup ;-)

  8. #8
    Membre confirmé
    Femme Profil pro
    Etudiant informatique
    Inscrit en
    Mars 2012
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Etudiant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2012
    Messages : 86
    Par défaut appliquer une formule
    Ben oui j'ai oublier de mettre les accolades, mais je ne reçoit toujours pas le résultat attendu
    c'est mon code php:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $requete="SELECT finalgrade,shortname,name,mdl_211grade_grades.userid
    FROM  ... ;
    $resultat=mysql_query($requete) or die ('<h4><b>Erreur SQL!</h4></b><br>'.$requete.'<br>'.mysql_error());
    while($ligne=mysql_fetch_assoc($resultat))
    {	$grade=$ligne["finalgrade"];
    	$nom=$ligne["shortname"];
    	$newformule=str_replace ($nom,$grade,$newformule).'<br>';
    	echo $newformule;
    }
    lorsque je teste et je met dans mon champ la formule: pgmc+pgmweb
    voilà ce qui s'affiche:
    Nom : affichage.PNG
Affichages : 90
Taille : 7,8 Ko
    !!!!
    j'explique:
    le 12.33 et 13.00 sont les note d'un étudiant dans programmationC et programmationWeb, donc ce qu'est afficher c'est remplacer dans la formules les nom des cours par les notes du même étudiant !!!
    ce qui est plus bizarre c'est qu'elle s'affiche au début 2 foi sans etre modifiée w entre les lignes chaque fois une nouvelle ligne vide s'ajoute
    Comme ça:
    pgmweb+pgmc
    pgmweb+pgmc

    pgmweb+13.00


    12.33+13.00



    12.33+13.00




    12.33+13.00





    12.33+13.00
    cela se fait 40 fois !! chaque fois s'ajoute une ligne vide entre les affichage!!
    qu'est ce qui se passe

  9. #9
    Membre Expert Avatar de Marc3001
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2008
    Messages
    829
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2008
    Messages : 829
    Par défaut
    Il y a un truc qui ne va pas dans ton algo.

    A chaque itération, tu dois utiliser une autre variable que $newformule pour stocker le résultat de str_replace ou alors la réinitiliser à chaque itération avec la formule sans les valeurs numériques.

    Sinon, une fois tes valeurs remplacées, à chaque itération, $newformule contient la formule avec les valeurs du premier élève et non celles de l'élève actuel.

  10. #10
    Membre confirmé
    Femme Profil pro
    Etudiant informatique
    Inscrit en
    Mars 2012
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Etudiant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2012
    Messages : 86
    Par défaut
    lorsque je remplace la variable $newformule par une autre: $calcul
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    while($ligne=mysql_fetch_assoc($resultat))
    {	$grade=$ligne["finalgrade"];
    	$nom=$ligne["shortname"];
    	$calcul=str_replace ($nom,$grade,$newformule).'<br>';
    	echo $calcul;
    }
    voilà ce que je reçoit :
    Nom : affchaage.PNG
Affichages : 58
Taille : 13,0 Ko
    Ce qui est encerclé en rouge c'est répéter l'affichage de la formule saisie, et ce qui est en bleu c'est la formule traité mais pas toute les notes à la fois

  11. #11
    Membre confirmé
    Femme Profil pro
    Etudiant informatique
    Inscrit en
    Mars 2012
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Etudiant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2012
    Messages : 86
    Par défaut appliquer une formule
    Bon je vais vous fournir tous les données que j'ai, et si vous pouvez me proposer un algo car je suis bloqué
    par exemple l'utilisateur de l'application saisie la formule suivante: (2*pgmc+3*pgmweb), et en cliquant sur un bouton 'Calculer' les nom des cours doivent etre remplacés par ses notes, donc la requete permettant d'extraire les notes est:
    Code mysql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT userid,shortname,finalgrade
    FROM mdl_211grade_grades,mdl_211course,mdl_211grade_items
    WHERE mdl_211grade_grades.itemid=mdl_211grade_items
    AND mdl_211grade_items.courseid=mdl_211course.id
    AND mdl_211grade_grades.usermodified IS NULL;
    userid: id de l'étudiant
    shortname:nom du cours
    finalgrade:note
    cette requete permet de donner ce resultat:
    Nom : les notes.PNG
Affichages : 62
Taille : 20,4 Ko
    aprés pour remplacer les nom des cours par leur note j'ai fait:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    $requete='SELECT userid,shortname,finalgrade
    FROM mdl_211grade_grades,mdl_211course,mdl_211grade_items
    WHERE mdl_211grade_grades.itemid=mdl_211grade_items
    AND mdl_211grade_items.courseid=mdl_211course.id
    AND mdl_211grade_grades.usermodified IS NULL';
    $resultat=mysql_query($requete) or die ('<h4><b>Erreur SQL!</h4></b><br>'.$requete.'<br>'.mysql_error());
    while($ligne=mysql_fetch_assoc($resultat))
    {	$grade=$ligne["finalgrade"];
    	$nom=$ligne["shortname"];
    	$calcul=str_replace ($nom,$grade,$newformule).'<br>';
    	echo $calcul;
    }
    ET ça affiche malheureusement ça:
    Nom : affchaage.PNG
Affichages : 65
Taille : 13,0 Ko
    j'ai besoin d'aiiiiiide

  12. #12
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Bonsoir,

    Je pense que l'approche n'est pas bonne.

    Il ne faudrait pas permettre de saisir une formule c'est bien trop compliqué au moment du parsage. Il faut se poser la question, si la définition de coefficients en face des matières ne serait pas suffisante.
    De cette manière tu listes dans un tableau les matières avec en face de chaque matière une simple zone de texte utilisée pour saisir le coefficient.
    Une fois que tu récupères le tout, cela devrait être beaucoup plus simple de recalculer les notes.

  13. #13
    Membre confirmé
    Femme Profil pro
    Etudiant informatique
    Inscrit en
    Mars 2012
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Etudiant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2012
    Messages : 86
    Par défaut appliquer une formule
    merci bien pour votre proposition je vais essayer

  14. #14
    Membre Expert Avatar de Marc3001
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2008
    Messages
    829
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2008
    Messages : 829
    Par défaut
    OK en fait effectivement ton algo ne colle pas avec les données résultant de ta requête.

    Ce que je ne comprends pas c'est que le prof donne (par exemple) 2*pgmc+3*pgmweb et toi tu sors avec ta requête 5 notes de pgmweb et 3 de pgmc.

    A ce que je crois comprendre c'est que la formule calcul sur les moyennes et ta requete sors les notes...

    2 solutions :
    - Tu calcules les moyennes dans la requête et du coup ton algo (celui du post de 19h25) est bon
    - Tu calcules d'abord les moyennes en php et ensuite tu mets ces moyennes dans la formule via la commande str_replace

    Il ne faudrait pas permettre de saisir une formule c'est bien trop compliqué au moment du parsage. Il faut se poser la question, si la définition de coefficients en face des matières ne serait pas suffisante.
    De cette manière tu listes dans un tableau les matières avec en face de chaque matière une simple zone de texte utilisée pour saisir le coefficient.
    Une fois que tu récupères le tout, cela devrait être beaucoup plus simple de recalculer les notes.
    Si l'idée c'est effectivement juste d'appliquer des coeff sur les moyennes c'est effectivement plus simple comme ça.

  15. #15
    Membre confirmé
    Femme Profil pro
    Etudiant informatique
    Inscrit en
    Mars 2012
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Etudiant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2012
    Messages : 86
    Par défaut
    ben wi l'idée de 'rawsrc' est bonne, et je suis en train de la concrétiser. j'ai fais comme il m'a proposer les nom des cours avec des champsTEXT pour saisir les coefficients, donc l'utilisateur va saisir seulement les coefficients, mais comment je peux faire la connexion entre les coefficient saisies et les notes réçus suite à la requete ?? proposer moi une démarche SVP !!

  16. #16
    Membre Expert Avatar de Marc3001
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2008
    Messages
    829
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2008
    Messages : 829
    Par défaut
    Rajoute une table en base avec 2 champs :
    - Matière
    - Coefficient

  17. #17
    Membre confirmé
    Femme Profil pro
    Etudiant informatique
    Inscrit en
    Mars 2012
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Etudiant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2012
    Messages : 86
    Par défaut appliquer une formule
    Bonne idée mais comment récupérer la valeur des champs ??
    est ce qu'il est plus simple de donner à tout les champs le méme nom ou plutot donner à chaque champs un nom différent ?? pour faciliter la récupération des coefficients??

  18. #18
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Bonjour,

    quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    <form action="" method="post">
       <table>
          <thead>
             <tr>
                <th>Matière</th>
                <th>Coefficient</th>
             </tr>
          </thead>
          <tbody>
             <tr>
                <td>Programmation C</td>
                <td><input type="text" name="coef[1]" size="3" value="1"></td>
             </tr>
             <tr>
                <td>Programmation Web</td>
                <td><input type="text" name="coef[2]" size="3" value="1"></td>
             </tr>
             <tr>
                <td>Programmation C++</td>
                <td><input type="text" name="coef[3]" size="3" value="1"></td>
             </tr>
          </tbody>
       </table>
       <input type="submit" value="Envoyer">
    </form>
    Ensuite à la soumission du formulaire, tu récupèreras tes données en $_POST clé "coef", sous-clé numérique qui devra être l'id de ta matière.

  19. #19
    Membre confirmé
    Femme Profil pro
    Etudiant informatique
    Inscrit en
    Mars 2012
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Etudiant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2012
    Messages : 86
    Par défaut appliquer une formule
    Mais moi je ne peux pas faire ça, car ce n'est pas moi qui saisie les nom des cours, mis ils sont extrait de ma base de donnée !!
    C'est ce que je peut faire:
    soit donner à tous les champs TEXT le meme nom comme ça:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    //requete permettant d'extraire les noms des cours de ma base mdl_211
    $requete='SELECT shortname
    FROM mdl_211course,mdl_211course_categories
    ...
    while($ligne=mysql_fetch_assoc($resultat)){
    echo '<b><h3><font color=#6495ED>'.$ligne["shortname"].'</h3>
    <input type="text" name="coefficient" size="15" /><br/>';
    }
    ou donner à chacun des champs un name différent qui sera le meme nom que le cours:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    while($ligne=mysql_fetch_assoc($resultat)){
    echo '<b><h3><font color=#6495ED>'.$ligne["shortname"].'</h3>
    <input type="text" name="'.$ligne["shortname"].'" size="15" /><br/>';
    }
    Comment faire ??

  20. #20
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Citation Envoyé par yawra Voir le message
    Mais moi je ne peux pas faire ça, car ce n'est pas moi qui saisie les nom des cours, mis ils sont extrait de ma base de donnée !!
    Je m'en doute, c'était juste une idée pour arriver à tout gérer sans trop se prendre la tête. Pour t'en sortir, il faudra que tu récupères aussi les id des cours.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <tr>
       <td><?php echo $ligne['shortname']; ?></td>
       <td><input type="text" name="coef[<?php echo $ligne['id']; ?>]" size="3" value="1"></td>
    </tr>
    Et surtout tu ne donnes pas le même nom aux champs texte.

Discussions similaires

  1. Réponses: 5
    Dernier message: 15/07/2013, 12h12
  2. Appliquer une formule à une plage variable
    Par sophiefag dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 23/04/2008, 23h27
  3. Réponses: 5
    Dernier message: 14/03/2008, 17h01
  4. [VBA-E] Appliquer une formule si cellule non vide.
    Par zeralium dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 13/03/2007, 19h58
  5. appliquer une formule à +sieurs cellules excel
    Par ramsesthebest dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 27/09/2005, 20h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo