La somme des valeurs venant d'une foreach

Résolu
EL.marwaa123 Messages postés 99 Date d'inscription jeudi 24 avril 2014 Statut Membre Dernière intervention 7 juin 2014 - Modifié par jordane45 le 6/06/2014 à 08:21
EL.marwaa123 Messages postés 99 Date d'inscription jeudi 24 avril 2014 Statut Membre Dernière intervention 7 juin 2014 - 7 juin 2014 à 04:46
Bonjour,

voila mon code:
  $tf=mysql_num_rows($f);
  while($tth=mysql_fetch_array($f)){$g=$tth['idS'];}
  echo $g;
  $_SESSION['g']=$g;
  $i=0;
 $v=mysql_query($sql);
      $nb = mysql_num_rows($v);//exemple retourne 2 
   while($resu=mysql_fetch_array($v))
                                {
                 $k=$resu['idT'];
 $j[$i]=$k;
 $i++;
}
 foreach($_POST as $name=>$valeur){
  if(substr( $name, 0, 9 )=="monInput_"){
    // On sépare le nom de l'input pour récupérer sa valeur de $i
     $arrNom = explode("_",$name);
     $N =$arrNom[1]; 
     $i =$arrNom[2]; 
    // on affiche la valeur et le numéro :
    echo "Nom => ".$name."  Num =>".$N."  i =>".$i." Valeur =>".$valeur."</br>";
 $sql="insert into test values('','$j[$i]','$g','$N','$valeur')</br>";
 for($l=0;$l<$tf;$l++){
  $ml=$valeur[$l]+$valeur[$l+1];
  echo $valeur.'</br>';
 $sql2=" UPDATE composer SET noteG='$ml' WHERE idM='$w' AND  idS='$g'";
 echo $sql2;
}
 
 }

je veux calculer la note genearal qui est la somme des notes des deux types dans cette cas,et mettre le résultat dans une case qui s'appelle note génerale ,j'ai essayé ce code mais ca marche pas :(
merci

A voir également:

7 réponses

jordane45 Messages postés 38177 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 15 mai 2024 344
6 juin 2014 à 08:30
Bonjour,

Ta boucle foreach te sert à traiter l'INSERT dans ta BDD de tes Types.
L'affichage de ton tableau se fait plus bas dans ta page......Ce n'est donc pas là que tu va afficher ta note globae.


De plus il n'est pas nécéssaire de stocker en Base cette somme...
Il existe en Mysql la fonction SUM qui te permet de la calculer lorsque tu en as besoin.

Ce qu'il te faut donc faire... c'est dans ton code d'affichage de ton tableau, lorsque tu fais ta requête pour afficher les types de chaque élève, ajouter la SUM et l'afficher.....





0
EL.marwaa123 Messages postés 99 Date d'inscription jeudi 24 avril 2014 Statut Membre Dernière intervention 7 juin 2014
6 juin 2014 à 11:23
voila mon code d'affichage des notes:

//affichage des note 
$qs=array();
$ml=0;
	             for($i=0;$i<$nbResult+1;$i++){
		    $req17=("SELECT note FROM test
		   WHERE idT='$ff[$i]'	
	     AND num='$num'
         AND idS='$g'");
   echo $req17."</br>";
													$mark=mysql_query($req17);
													while($tt=mysql_fetch_array($mark)){$fg=$tt['note'];
							                                     $qs[$ml]=$fg;  }
		echo "<th><input type='text' name='monInput_".$num."_".$i."' id='imp_".$i."' value='$fg'/></th>";

												}}
?>

ce code affiche les notes des étudiants selon les types d'évaluations crée par un prof,et ajoute un column de note general pour y placer les notes.comment je peux faire la fonction SUM sans savoir comment séparer les notes d'un étudiant pour les calculer.


merci
0
jordane45 Messages postés 38177 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 15 mai 2024 344
6 juin 2014 à 11:52
Tu as cherché sur le net ... la fonction SUM de mysql ???

Par contre... je serais toi... je ne ferai pas une requête pour CHAQUE Type séparément..
mais directement une requête qui récupère TOUTES LES NOTES ( plus leur somme) d' un élève dans une seule requête....
0
EL.marwaa123 Messages postés 99 Date d'inscription jeudi 24 avril 2014 Statut Membre Dernière intervention 7 juin 2014
6 juin 2014 à 12:30
j'ai cherché la fonction SUM je peux pas affiché les notes de chaque type et la sommes des notes des types qui appartient à un étudiant,je peux juste faire la somme des note groub by nom ou num ...
0
jordane45 Messages postés 38177 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 15 mai 2024 344
Modifié par jordane45 le 6/06/2014 à 13:08
ah oui;ok...

Ben dans ce cas tu fais la somme de tes notes dans la boucle qui te permet d'en faire l'affichage...

un truc du genre :

  for($i=0;$i<$nbResult+1;$i++){
    $req17="SELECT note FROM test
       WHERE idT='$ff[$i]' 
       AND num='$num'
       AND idS='$g'";
   //echo $req17."</br>";
  $mark=mysql_query($req17);
 while($tt=mysql_fetch_array($mark)){
  $fg=$tt['note'];
   
  $noteG = $noteG + $fg;
  
   echo "<td style='font-weight: bold;'>
             <input type='text' name='monInput_".$num."_".$i."' id='imp_".$i."' value='$fg'/>
      </td>";
  }
   echo "<td style='font-weight: bold;'>
           <input type='text' name='noteG_".$num."_".$i."' id='imp_".$i."' value='$noteG'/>
      </td>";

0
EL.marwaa123 Messages postés 99 Date d'inscription jeudi 24 avril 2014 Statut Membre Dernière intervention 7 juin 2014
6 juin 2014 à 19:26
bonjour,
ce code ca marche bien avec la somme mais quand j'ai changé la requete selon mes besoins,les résultats qui s'affiche est bizarre,
dans la requete j'ai séléctionner les coeffs des types et les notes
je veux que les notes d'un étudiant se multiplient par les coeffs des types d'évaluations et aprés diviser le résultat sur 100 pour obtenir la note generale de sous module de chaque étudian.
voila le code:
for($i=0;$i<$nbResult;$i++){
    $req17="SELECT a.coeffT,(t.note)
		FROM  assocts AS a,test as t 
		where  t.idS = '$g'
		AND t.idT=a.idT
		AND t.num='$num'";
   //echo $req17."</br>";
  $mark=mysql_query($req17);
 while($tt=mysql_fetch_array($mark)){
  $fg=$tt['note'];
  $ml=$tt['coeffT'];
   $noteG=0;
  $noteG = $noteG + ($fg*$ml);
  echo $noteG.'</br>';
   echo "<td style='font-weight: bold;'>
             <input type='text' name='monInput_".$num."_".$i."' id='imp_".$i."' value='$fg'/>
      </td>";
	  $noteG=$noteG/100;
  }}
  echo $noteG.'</br>';
   echo "<td style='font-weight: bold;'>
  <input type='text' name='noteG_".$num."_".$i."' id='imp_".$i."' value='$notG'/>
      </td>"
}

merci
0
jordane45 Messages postés 38177 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 15 mai 2024 344
6 juin 2014 à 19:38
n'aurais tu pas mis un "}" en trop ligne 19 ?
0
jordane45 Messages postés 38177 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 15 mai 2024 344
6 juin 2014 à 19:42
Ligne 22... tu as oublié de sortir la variable de la chaine de caractères..

<input type='text' name='noteG_".$num."_".$i."' id='imp_".$i."' value='$notG'/>


c'est mieux ainsi je pense surtout si tu orthographie CORRECTEMENT le nom de ta variable $noteG .. et non $notG
<input type='text' name='noteG_".$num."_".$i."' id='imp_".$i."' value='".$noteG."'/>


Attention à bien relire ton code.... tu fais beaucoup de fautes d'étourderie...
0
EL.marwaa123 Messages postés 99 Date d'inscription jeudi 24 avril 2014 Statut Membre Dernière intervention 7 juin 2014
6 juin 2014 à 19:45
ce code est à l'intérieur d'une boucle while qui récupére (num,nom,prénom) c'est pour cela.
0
jordane45 Messages postés 38177 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 15 mai 2024 344
6 juin 2014 à 19:55
et pour ce qui est du nom de la variable dans ton input ??
0
EL.marwaa123 Messages postés 99 Date d'inscription jeudi 24 avril 2014 Statut Membre Dernière intervention 7 juin 2014
6 juin 2014 à 20:04
ahh oui dsl,je l'ai ajusté et il m'affiche les résultas des notes seulement dans tous les cases.
0
jordane45 Messages postés 38177 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 15 mai 2024 344
6 juin 2014 à 20:51
Et ça...ça donne quoi ?

// Reinit de $noteG pour chaque élève
$noteG=0;
for($i=0;$i<$nbResult;$i++){
    $req17="SELECT a.coeffT
	              ,t.note
		FROM  assocts AS a,test as t 
		where  t.idS = '$g'
		AND t.idT=a.idT
		AND t.num='$num'";
   //echo $req17."</br>";
  $mark=mysql_query($req17);
  while($tt=mysql_fetch_array($mark)){
    $fg=$tt['note'];
    $ml=$tt['coeffT'];
    //$noteG=0;
    $noteG = $noteG + ($fg*$ml);
    //echo $noteG.'</br>';
     echo "<td style='font-weight: bold;'>
             <input type='text' name='monInput_".$num."_".$i."' id='imp_".$i."' value='".$fg."'/>
           </td>";
	  
   }
  }
//echo $noteG.'</br>';
   $noteG=$noteG/100;
   echo "<td style='font-weight: bold;'>
  <input type='text' name='noteG_".$num."_".$i."' id='imp_".$i."' value='".$noteG."'/>
      </td>"
}

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
EL.marwaa123 Messages postés 99 Date d'inscription jeudi 24 avril 2014 Statut Membre Dernière intervention 7 juin 2014
6 juin 2014 à 21:01
il affiche les notes des types deux fois:
0
jordane45 Messages postés 38177 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 15 mai 2024 344
Modifié par jordane45 le 6/06/2014 à 21:26
A quoi correspond ta variable $nbresult ?

Peux tu nous mettre le code complet de ta page ?
0
EL.marwaa123 Messages postés 99 Date d'inscription jeudi 24 avril 2014 Statut Membre Dernière intervention 7 juin 2014
Modifié par EL.marwaa123 le 6/06/2014 à 21:46
j'ai modifié mon code,il fait la multiplication du note par le coeff mais la somme nn.voila mon code:
//affichage des types d'évaluations crée par un prof
 $sql1="SELECT t.TYPE ,t.idT              
         FROM TYPE AS t
                  , assocts AS l
                  , smodule AS s
                 , filiere AS f
         WHERE t.idT = l.idT
         AND l.idS = s.idS
        AND nomF = '$e'
        AND annee ='$d'
        AND nomS ='$c'";  
  $u=mysql_query($sql1);
       $nbResult = mysql_num_rows($u);
          while($resu=mysql_fetch_array($u))
                                                {
             $type1 = $resu['TYPE'];
             echo "<th>".$type1."</th>";
             }
          
          echo'<th>Note General</th>';   
          echo'<th>Decision </th>'; 
//------------------------------------------------------------
//affichage des étudiants 

$ff=array();
$sql="SELECT t.idT
         FROM TYPE AS t
                  , assocts AS l
                  , smodule AS s
                 , filiere AS f
         WHERE t.idT = l.idT
         AND l.idS = s.idS
        AND nomF = '$e'
        AND annee ='$d'
        AND nomS ='$c'";   
  $q="select s.idS from smodule as s,module as m,composer as c where s.nomS='$c' AND m.nomM='$w' AND s.idS=c.idS AND m.idM=c.idM ";
  $f=mysql_query($q);
  while($tth=mysql_fetch_array($f)){$g=$tth['idS'];}
  echo $g;
  $_SESSION['g']=$g;
  $i=0;
 $v=mysql_query($sql);
 $nb = mysql_num_rows($v);//
  while($resu=mysql_fetch_array($v))
                                            {
                   $k=$resu['idT'];
  $ff[$i]=$k;
  $i++;
}
     print_r($ff);
 
  $sql=("SELECT t.num, t.nomE, t.prenom
  FROM etudiant AS t
  ,filiere AS f
  WHERE f.nomF = '$e'
  AND f.annee = '$d'
  LIMIT 5");
       $t=mysql_query($sql);
       
$r = mysql_num_rows($t);
          while($result=mysql_fetch_array($t))
                                                {
      
$num = $result['num'];         $_SESSION['h']=$num;
                                            $nom = $result['nomE'];
                                                    $prenom = $result['prenom'];
               
           echo "</tr>
               <tr>
                <th>".$num."</th>
                <th>".$nom."</th>
                <th>".$prenom."</th>";
   
         
//------------------------------------------------------------------------ 
//affichage des note 

 
 $req17="SELECT (t.note)
  FROM  test as t
  where  t.idS = '$g'
  AND t.num='$num'";
   //echo $req17."</br>";
  $mark=mysql_query($req17);
  $req18="SELECT a.coeffT
  FROM  assocts AS a,test as t 
  where  t.idS = '$g'
  AND t.idT=a.idT
  AND t.num='$num'";
  $coef=mysql_query($req18);
  //print_r($as);echo '<br>';
  $noteG=0;
  echo '$noteG : '.$noteG.'<br>';
 $req17="SELECT (t.note)
  FROM  test as t
  where  t.idS = '$g'
  AND t.num='$num'";
   //echo $req17."</br>";
  $mark=mysql_query($req17);
  $req18="SELECT a.coeffT
  FROM  assocts AS a,test as t 
  where  t.idS = '$g'
  AND t.idT=a.idT
  AND t.num='$num'";
  $coef=mysql_query($req18);
  //print_r($as);echo '<br>';
for($i=0;$i<$nbResult;$i++){
while($tt=mysql_fetch_array($mark)){
  $fg=$tt['note'];
  echo "<td style='font-weight: bold;'>
             <input type='text' name='monInput_".$num."_".$i."' id='imp_".$i."' value='$fg'/>
      </td>";
  while($tt1=mysql_fetch_array($coef)){
  $tg=$tt1['coeffT'];
  $noteG=$noteG+($fg*$tg);
  echo 'note'.$fg. 'coef'.$tg.'noteG:'.$noteG.'<br>';
  }}
  $noteG=$noteG/100;
  echo $noteG.'</br>';}
   echo "<td style='font-weight: bold;'>
           <input type='text' name='noteG_".$num."_".$i."' id='imp_".$i."' value='$noteG'/>
      </td>";
}
?>
  

merci
0
jordane45 Messages postés 38177 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 15 mai 2024 344
6 juin 2014 à 21:51
A quoi te servent tes requêtes 1è... 18 ??
Tu peux nettoyer ton code pour ne mettre QUE ce qui est utilisé ?
0
EL.marwaa123 Messages postés 99 Date d'inscription jeudi 24 avril 2014 Statut Membre Dernière intervention 7 juin 2014
Modifié par jordane45 le 7/06/2014 à 02:25
je m'éxcuse voila le nouveau code:

j'ai modifié mon code,il fait la multiplication du note par le coeff mais la somme nn.voila mon code:

//affichage des types d'évaluations crée par un prof
 $sql1="SELECT t.TYPE ,t.idT              
         FROM TYPE AS t
                  , assocts AS l
                  , smodule AS s
                 , filiere AS f
         WHERE t.idT = l.idT
         AND l.idS = s.idS
        AND nomF = '$e'
        AND annee ='$d'
        AND nomS ='$c'";  
  $u=mysql_query($sql1);
       $nbResult = mysql_num_rows($u);
          while($resu=mysql_fetch_array($u))
                                                {
             $type1 = $resu['TYPE'];
             echo "<th>".$type1."</th>";
             }
          
          echo'<th>Note General</th>';   
          echo'<th>Decision </th>'; 
//------------------------------------------------------------
//affichage des étudiants 

$ff=array();
$sql="SELECT t.idT
         FROM TYPE AS t
                  , assocts AS l
                  , smodule AS s
                 , filiere AS f
         WHERE t.idT = l.idT
         AND l.idS = s.idS
        AND nomF = '$e'
        AND annee ='$d'
        AND nomS ='$c'";   
  $q="select s.idS from smodule as s,module as m,composer as c where s.nomS='$c' AND m.nomM='$w' AND s.idS=c.idS AND m.idM=c.idM ";
  $f=mysql_query($q);
  while($tth=mysql_fetch_array($f)){$g=$tth['idS'];}
  echo $g;
  $_SESSION['g']=$g;
  $i=0;
 $v=mysql_query($sql);
 $nb = mysql_num_rows($v);//
  while($resu=mysql_fetch_array($v))
                                            {
                   $k=$resu['idT'];
  $ff[$i]=$k;
  $i++;
}
     print_r($ff);
 
  $sql=("SELECT t.num, t.nomE, t.prenom
  FROM etudiant AS t
  ,filiere AS f
  WHERE f.nomF = '$e'
  AND f.annee = '$d'
  LIMIT 5");
       $t=mysql_query($sql);
       
$r = mysql_num_rows($t);
          while($result=mysql_fetch_array($t))
                                                {
      
$num = $result['num'];         
      $nom = $result['nomE'];
              $prenom = $result['prenom'];
               
           echo "</tr>
               <tr>
                <th>".$num."</th>
                <th>".$nom."</th>
                <th>".$prenom."</th>";
   
         
//------------------------------------------------------------------------ 
//affichage des note 

 
 $req17="SELECT (t.note)
  FROM  test as t
  where  t.idS = '$g'
  AND t.num='$num'";

  $mark=mysql_query($req17);

  $req18="SELECT a.coeffT
  FROM  assocts AS a,test as t 
  where  t.idS = '$g'
  AND t.idT=a.idT
  AND t.num='$num'";
  $coef=mysql_query($req18);
  $noteG=0;
  
for($i=0;$i<$nbResult;$i++){
while($tt=mysql_fetch_array($mark)){
  $fg=$tt['note'];
  echo "<td style='font-weight: bold;'>
<input type='text' name='monInput_".$num."_".$i."' id='imp_".$i."' value='$fg'/>
      </td>";
  while($tt1=mysql_fetch_array($coef)){
  $tg=$tt1['coeffT'];
  $noteG=$noteG+($fg*$tg);
  echo 'note'.$fg. 'coef'.$tg.'noteG:'.$noteG.'<br>';
  }}
  $noteG=$noteG/100;
  echo $noteG.'</br>';}
   echo "<td style='font-weight: bold;'>
     <input type='text' name='noteG_".$num."_".$i."' id='imp_".$i."' value='$noteG'/>
      </td>";
}
?>
  
0
jordane45 Messages postés 38177 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 15 mai 2024 344
Modifié par jordane45 le 9/06/2014 à 18:18
Je ne comprend pas pourquoi tu boucles sur $mark puis sur $coef ...?

Pourquoi ne fais-tu pas qu'une seule requête :
  $req18="SELECT a.coeffT
                              ,t.note
  FROM  assocts  a
             ,test  t 
  WHERE  t.idS = '$g'
  AND t.idT=a.idT
  AND t.num='$num'";

 $arrNotesCoef =mysql_query($req18);
//------------------------------------------------------
// Que donne un print de cette requête ?
   echo "<be> Resultat de la requête :<br>";
  while ($row = mysql_fetch_array($arrNotesCoef )) {
     print_r($row);
    }
   echo "<br>";
//------------------------------------------------------



Et à tout hasard...
Que te donne la requête suivante ?

  $sql=
  "SELECT e.num
         ,e.nomE
   ,e.prenom
   ,a.coeffT
   ,t.note
  FROM etudiant  e
   ,filiere  f
   ,assocts  a
   ,test  t 
  WHERE f.nomF = '$e'
  AND f.annee = '$d'
  AND t.idT = a.idT
  AND t.num = e.num
  LIMIT 5";
  $t=mysql_query($sql);
//------------------------------------------------------
// Que donne un print de cette requête ?
   echo "<be> Resultat de la requête :<br>";
    while ($row = mysql_fetch_array($t)) {
 print_r($row);
}
   echo "<br>";
//------------------------------------------------------





PS : pour s'y retrouver plus facilement il faudrait que :
1 - Les champs de tes différentes tables...si elle se correspondent..portent le même nom.

2 - Que tu donnes à tes variables des noms plus parlant.... $t ..ne correpond à rien.. alors que si tu la nommes $arrEleves ( arr pour array et Eleves...ben pour élèves). par exemple.

3 - Lorsque tu mets des alias pour tes tables..arrange toi pour que ça correspondre à quelque chose .. mettre etudiant as t ... n'est pas terrible.. mieux vaut mettre un E (pour Elève)...c'est plus parlant;

4 - fans les FROM.. pour mettre un alias sur une table il n'y a pas besoin de AS


Edit : Modification lecture des requêtes
0
EL.marwaa123 Messages postés 99 Date d'inscription jeudi 24 avril 2014 Statut Membre Dernière intervention 7 juin 2014
7 juin 2014 à 03:00
j'ai fait une req qui récupere le coeff et les notes en meme temps mais quand je veux les récupere ca marche pas,donc je les ai séparer
voila le résultats des 2 requete:
0
EL.marwaa123 Messages postés 99 Date d'inscription jeudi 24 avril 2014 Statut Membre Dernière intervention 7 juin 2014
7 juin 2014 à 03:02
mysql_query il éxécute juste la requete aprés il faut récuperer les résultats soit par mysql_result si on sait deja le row ou on utilise while et mysql_fetch_array.
0
EL.marwaa123 Messages postés 99 Date d'inscription jeudi 24 avril 2014 Statut Membre Dernière intervention 7 juin 2014
7 juin 2014 à 04:46
j'ai trouvé une solution simplee merci pour votre aide merci infiniment voici mon code:

$req17="SELECT (t.note)
		FROM  test as t
		where  t.idS = '$g'
		AND t.num='$num'";
   //echo $req17."</br>";
  $mark=mysql_query($req17);
    $sql="SELECT ( SUM( a.coeffT * t.note ) /100) AS NG
					FROM assocts AS a, test AS t
					WHERE t.idS = '$g'
					AND t.idT = a.idT
					AND t.num = '$num'
					GROUP BY t.num";
 $no=mysql_query($sql);
 
  //print_r($as);echo '<br>';
for($i=0;$i<$nbResult;$i++){
while($tt=mysql_fetch_array($mark)){
  $fg=$tt['note'];
  echo "<td style='font-weight: bold;'>
             <input type='text' name='monInput_".$num."_".$i."' id='imp_".$i."' value='$fg'/>
      </td>";
  }

 while($t=mysql_fetch_array($no)){
$noteG=$t['NG'];
   echo "<td style='font-weight: bold;'>
           <input type='text' name='noteG_".$num."_".$i."' id='imp_".$i."' value='$noteG'/>
      </td>";
	  if($noteG>=12){ $deciss='valide';} elseif($noteG<=6){$deciss='NV';}
	  echo "<td style='font-weight: bold;'>
           <input type='text' name='noteG_".$num."_".$i."' id='imp_".$i."' value='$deciss'/>
      </td>";
	  
	  
	  }}}

merci merci :D :D
0
Rejoignez-nous